diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js index 0ab6481a0..c3ca8cc21 100644 --- a/e2e/helpers/selectors.js +++ b/e2e/helpers/selectors.js @@ -445,17 +445,19 @@ export default { total: 'vn-ticket-components tfoot > tr:nth-child(3) > td' }, ticketRequests: { - requestButton: `vn-left-menu a[ui-sref="ticket.card.request"]`, - addRequestButton: `vn-ticket-request vn-icon[icon="add_circle"]`, - request: 'vn-ticket-request > form > vn-card > div > vn-horizontal', - fifthDescriptionInput: `vn-ticket-request > form > vn-card > div > vn-horizontal:nth-child(6) > vn-textfield:nth-child(1) > div > div > div.infix > input`, - fifthQuantityInput: `vn-ticket-request > form > vn-card > div > vn-horizontal:nth-child(6) > vn-textfield:nth-child(2) > div > div > div.infix > input`, - fifthAtenderSelect: `vn-ticket-request > form > vn-card > div > vn-horizontal:nth-child(6) > vn-autocomplete > div > div > input`, - fifthAtenderSelectFirstOption: `vn-ticket-request > form > vn-card > div > vn-horizontal:nth-child(6) > vn-autocomplete vn-drop-down ul > li:nth-child(1)`, - fifthAtenderSelectSecondOption: `vn-ticket-request > form > vn-card > div > vn-horizontal:nth-child(6) > vn-autocomplete vn-drop-down ul > li:nth-child(2)`, - fifthPriceInput: `vn-ticket-request > form > vn-card > div > vn-horizontal:nth-child(6) > vn-textfield:nth-child(4) > div > div > div.infix > input`, - fifthRemoveRequestButton: `vn-ticket-request vn-horizontal:nth-child(6) vn-icon[icon="remove_circle_outline"]`, - saveButton: `${components.vnSubmit}` + requestButton: `vn-left-menu a[ui-sref="ticket.card.request.index"]`, + addRequestButton: `vn-ticket-request-index > a > vn-float-button > button`, + request: 'vn-ticket-request-index > form > vn-card > div > vn-horizontal > vn-table > div > vn-tbody > vn-tr', + descriptionInput: `vn-ticket-request-create > form > div > vn-card > div > vn-horizontal:nth-child(2) > vn-textfield > div > div > div.infix > input`, + atenderSelect: `vn-ticket-request-create > form > div > vn-card > div > vn-horizontal:nth-child(2) > vn-autocomplete > div > div > input`, + atenderSelectFirstOption: `vn-ticket-request-create > form > div > vn-card > div > vn-horizontal:nth-child(2) > vn-autocomplete > vn-drop-down > vn-popover > div > div.content > div > div.list > ul > li:nth-child(1)`, + atenderSelectSecondOption: `vn-ticket-request-create > form > div > vn-card > div > vn-horizontal:nth-child(2) > vn-autocomplete > vn-drop-down > vn-popover > div > div.content > div > div.list > ul > li:nth-child(2)`, + quantityInput: `vn-ticket-request-create > form > div > vn-card > div > vn-horizontal:nth-child(3) > vn-textfield:nth-child(1) > div > div > div.infix > input`, + priceInput: `vn-ticket-request-create > form > div > vn-card > div > vn-horizontal:nth-child(3) > vn-textfield:nth-child(2) > div > div > div.infix > input`, + firstRemoveRequestButton: `vn-ticket-request-index vn-icon[icon="delete"]:nth-child(1)`, + saveButton: `vn-ticket-request-create > form > div > vn-button-bar > vn-submit[label="Create"] input`, + firstDescription: 'vn-ticket-request-index > form > vn-card > div > vn-horizontal > vn-table > div > vn-tbody > vn-tr:nth-child(1) > vn-td:nth-child(2)', + }, createStateView: { stateInput: `vn-autocomplete[field="$ctrl.ticket.stateFk"] > div > div > input`, diff --git a/e2e/paths/item-module/08_item_create_and_clone.spec.js b/e2e/paths/item-module/08_item_create_and_clone.spec.js index ba3a2696b..d33424405 100644 --- a/e2e/paths/item-module/08_item_create_and_clone.spec.js +++ b/e2e/paths/item-module/08_item_create_and_clone.spec.js @@ -1,143 +1,145 @@ import selectors from '../../helpers/selectors.js'; import createNightmare from '../../helpers/nightmare'; -describe('Item Create path', () => { +describe('Item Create/Clone path', () => { const nightmare = createNightmare(); - beforeAll(() => { - nightmare - .waitForLogin('buyer'); + describe('create', () => { + beforeAll(() => { + nightmare + .waitForLogin('buyer'); + }); + + it('should access to the items index by clicking the items button', async () => { + const url = await nightmare + .click(selectors.moduleAccessView.itemsSectionButton) + .wait(selectors.itemsIndex.createItemButton) + .parsedUrl(); + + expect(url.hash).toEqual('#!/item/index'); + }); + + it(`should search for the item Infinity Gauntlet to confirm it isn't created yet`, async () => { + const result = await nightmare + .wait(selectors.itemsIndex.searchResult) + .type(selectors.itemsIndex.searchItemInput, 'Infinity Gauntlet') + .click(selectors.itemsIndex.searchButton) + .waitForNumberOfElements(selectors.itemsIndex.searchResult, 0) + .countElement(selectors.itemsIndex.searchResult); + + expect(result).toEqual(0); + }); + + it('should access to the create item view by clicking the create floating button', async () => { + const url = await nightmare + .click(selectors.itemsIndex.createItemButton) + .wait(selectors.itemCreateView.createButton) + .parsedUrl(); + + expect(url.hash).toEqual('#!/item/create'); + }); + + it('should return to the item index by clickig the cancel button', async () => { + const url = await nightmare + .click(selectors.itemCreateView.cancelButton) + .wait(selectors.itemsIndex.createItemButton) + .parsedUrl(); + + expect(url.hash).toEqual('#!/item/index'); + }); + + it('should now access to the create item view by clicking the create floating button', async () => { + const url = await nightmare + .click(selectors.itemsIndex.createItemButton) + .wait(selectors.itemCreateView.createButton) + .parsedUrl(); + + expect(url.hash).toEqual('#!/item/create'); + }); + + it('should create the Infinity Gauntlet item', async () => { + const result = await nightmare + .type(selectors.itemCreateView.name, 'Infinity Gauntlet') + .waitToClick(selectors.itemCreateView.typeSelect) + .waitToClick(selectors.itemCreateView.typeSelectOptionThree) + .waitToClick(selectors.itemCreateView.intrastatSelect) + .waitToClick(selectors.itemCreateView.intrastatSelectOptionOne) + .waitToClick(selectors.itemCreateView.originSelect) + .waitToClick(selectors.itemCreateView.originSelectOptionOne) + .click(selectors.itemCreateView.createButton) + .waitForLastSnackbar(); + + expect(result).toEqual('Data saved!'); + }); + + it('should confirm Infinity Gauntlet item was created', async () => { + let result = await nightmare + .wait(selectors.itemBasicData.nameInput) + .getInputValue(selectors.itemBasicData.nameInput); + + expect(result).toEqual('Infinity Gauntlet'); + + + result = await nightmare + .getInputValue(selectors.itemBasicData.typeSelect); + + expect(result).toEqual('Crisantemo'); + + result = await nightmare + .waitProperty(selectors.itemBasicData.intrastatSelect, 'value') + .getProperty(selectors.itemBasicData.intrastatSelect, 'value'); + + expect(result).toEqual('6021010 Plantas vivas: Esqueje/injerto, Vid'); + + result = await nightmare + .getInputValue(selectors.itemBasicData.originSelect); + + expect(result).toEqual('Spain'); + }); }); - it('should access to the items index by clicking the items button', async () => { - const url = await nightmare - .click(selectors.moduleAccessView.itemsSectionButton) - .wait(selectors.itemsIndex.createItemButton) - .parsedUrl(); + describe('clone', () => { + it('should return to the items index by clicking the return to items button', async () => { + const url = await nightmare + .click(selectors.itemBasicData.goToItemIndexButton) + .wait(selectors.itemsIndex.createItemButton) + .waitForURL('#!/item/index') + .parsedUrl(); - expect(url.hash).toEqual('#!/item/index'); - }); + expect(url.hash).toContain('#!/item/index'); + }); - it(`should search for the item Infinity Gauntlet to confirm it isn't created yet`, async () => { - const result = await nightmare - .wait(selectors.itemsIndex.searchResult) - .type(selectors.itemsIndex.searchItemInput, 'Infinity Gauntlet') - .click(selectors.itemsIndex.searchButton) - .waitForNumberOfElements(selectors.itemsIndex.searchResult, 0) - .countElement(selectors.itemsIndex.searchResult); + it(`should search for the item Infinity Gauntlet`, async () => { + const result = await nightmare + .wait(selectors.itemsIndex.searchResult) + .type(selectors.itemsIndex.searchItemInput, 'Infinity Gauntlet') + .click(selectors.itemsIndex.searchButton) + .waitForNumberOfElements(selectors.itemsIndex.searchResult, 1) + .countElement(selectors.itemsIndex.searchResult); - expect(result).toEqual(0); - }); + expect(result).toEqual(1); + }); - it('should access to the create item view by clicking the create floating button', async () => { - const url = await nightmare - .click(selectors.itemsIndex.createItemButton) - .wait(selectors.itemCreateView.createButton) - .parsedUrl(); + it(`should clone the Infinity Gauntlet`, async () => { + const url = await nightmare + .waitForTextInElement(selectors.itemsIndex.searchResult, 'Infinity Gauntlet') + .click(selectors.itemsIndex.searchResultCloneButton) + .waitToClick(selectors.itemsIndex.acceptClonationAlertButton) + .waitForURL('tags') + .parsedUrl(); - expect(url.hash).toEqual('#!/item/create'); - }); + expect(url.hash).toContain('tags'); + }); - it('should return to the item index by clickig the cancel button', async () => { - const url = await nightmare - .click(selectors.itemCreateView.cancelButton) - .wait(selectors.itemsIndex.createItemButton) - .parsedUrl(); + it('should search for the item Infinity Gauntlet and find two', async () => { + const result = await nightmare + .waitToClick(selectors.itemTags.goToItemIndexButton) + .wait(selectors.itemsIndex.searchResult) + .type(selectors.itemsIndex.searchItemInput, 'Infinity Gauntlet') + .click(selectors.itemsIndex.searchButton) + .waitForNumberOfElements(selectors.itemsIndex.searchResult, 2) + .countElement(selectors.itemsIndex.searchResult); - expect(url.hash).toEqual('#!/item/index'); - }); - - it('should now access to the create item view by clicking the create floating button', async () => { - const url = await nightmare - .click(selectors.itemsIndex.createItemButton) - .wait(selectors.itemCreateView.createButton) - .parsedUrl(); - - expect(url.hash).toEqual('#!/item/create'); - }); - - it('should create the Infinity Gauntlet item', async () => { - const result = await nightmare - .type(selectors.itemCreateView.name, 'Infinity Gauntlet') - .waitToClick(selectors.itemCreateView.typeSelect) - .waitToClick(selectors.itemCreateView.typeSelectOptionThree) - .waitToClick(selectors.itemCreateView.intrastatSelect) - .waitToClick(selectors.itemCreateView.intrastatSelectOptionOne) - .waitToClick(selectors.itemCreateView.originSelect) - .waitToClick(selectors.itemCreateView.originSelectOptionOne) - .click(selectors.itemCreateView.createButton) - .waitForLastSnackbar(); - - expect(result).toEqual('Data saved!'); - }); - - it('should confirm Infinity Gauntlet item was created', async () => { - let result = await nightmare - .wait(selectors.itemBasicData.nameInput) - .getInputValue(selectors.itemBasicData.nameInput); - - expect(result).toEqual('Infinity Gauntlet'); - - - result = await nightmare - .getInputValue(selectors.itemBasicData.typeSelect); - - expect(result).toEqual('Crisantemo'); - - result = await nightmare - .waitProperty(selectors.itemBasicData.intrastatSelect, 'value') - .getProperty(selectors.itemBasicData.intrastatSelect, 'value'); - - expect(result).toEqual('6021010 Plantas vivas: Esqueje/injerto, Vid'); - - result = await nightmare - .getInputValue(selectors.itemBasicData.originSelect); - - expect(result).toEqual('Spain'); - }); -}); - -describe('Clone path', () => { - it('should return to the items index by clicking the return to items button', async () => { - const url = await nightmare - .click(selectors.itemBasicData.goToItemIndexButton) - .wait(selectors.itemsIndex.createItemButton) - .waitForURL('#!/item/index') - .parsedUrl(); - - expect(url.hash).toContain('#!/item/index'); - }); - - it(`should search for the item Infinity Gauntlet`, async () => { - const result = await nightmare - .wait(selectors.itemsIndex.searchResult) - .type(selectors.itemsIndex.searchItemInput, 'Infinity Gauntlet') - .click(selectors.itemsIndex.searchButton) - .waitForNumberOfElements(selectors.itemsIndex.searchResult, 1) - .countElement(selectors.itemsIndex.searchResult); - - expect(result).toEqual(1); - }); - - it(`should clone the Infinity Gauntlet`, async () => { - const url = await nightmare - .waitForTextInElement(selectors.itemsIndex.searchResult, 'Infinity Gauntlet') - .click(selectors.itemsIndex.searchResultCloneButton) - .waitToClick(selectors.itemsIndex.acceptClonationAlertButton) - .waitForURL('tags') - .parsedUrl(); - - expect(url.hash).toContain('tags'); - }); - - it('should search for the item Infinity Gauntlet and find two', async () => { - const result = await nightmare - .waitToClick(selectors.itemTags.goToItemIndexButton) - .wait(selectors.itemsIndex.searchResult) - .type(selectors.itemsIndex.searchItemInput, 'Infinity Gauntlet') - .click(selectors.itemsIndex.searchButton) - .waitForNumberOfElements(selectors.itemsIndex.searchResult, 2) - .countElement(selectors.itemsIndex.searchResult); - - expect(result).toEqual(2); + expect(result).toEqual(2); + }); }); }); diff --git a/e2e/paths/ticket-module/10_ticket_request.spec.js b/e2e/paths/ticket-module/10_ticket_request.spec.js index e4a18ccd8..1aa3d61ac 100644 --- a/e2e/paths/ticket-module/10_ticket_request.spec.js +++ b/e2e/paths/ticket-module/10_ticket_request.spec.js @@ -1,7 +1,7 @@ import selectors from '../../helpers/selectors.js'; import createNightmare from '../../helpers/nightmare'; -xdescribe('Ticket purchase request path', () => { +describe('Ticket purchase request path', () => { const nightmare = createNightmare(); beforeAll(() => { @@ -45,74 +45,53 @@ xdescribe('Ticket purchase request path', () => { it(`should add a new request`, async () => { const result = await nightmare .waitToClick(selectors.ticketRequests.addRequestButton) - .wait(selectors.ticketRequests.fifthDescriptionInput) - .type(selectors.ticketRequests.fifthDescriptionInput, 'New stuff') - .type(selectors.ticketRequests.fifthQuantityInput, 99) - .waitToClick(selectors.ticketRequests.fifthAtenderSelect) - .waitToClick(selectors.ticketRequests.fifthAtenderSelectSecondOption) - .type(selectors.ticketRequests.fifthPriceInput, 999) + .wait(selectors.ticketRequests.descriptionInput) + .type(selectors.ticketRequests.descriptionInput, 'New stuff') + .type(selectors.ticketRequests.quantityInput, 99) + .waitToClick(selectors.ticketRequests.atenderSelect) + .waitToClick(selectors.ticketRequests.atenderSelectSecondOption) + .type(selectors.ticketRequests.priceInput, 999) .waitToClick(selectors.ticketRequests.saveButton) .waitForLastSnackbar(); expect(result).toEqual('Data saved!'); }); + it(`should have been redirected to the request index`, async () => { + const url = await nightmare + .waitForURL('/request') + .url(); + + expect(url).toContain('/request'); + }); + it(`should confirm the new request was added`, async () => { const result = await nightmare .waitToClick(selectors.ticketBasicData.basicDataButton) .wait(selectors.ticketBasicData.clientSelect) .waitToClick(selectors.ticketRequests.requestButton) - .waitForTextInInput(selectors.ticketRequests.fifthDescriptionInput, 'New Stuff') - .getProperty(selectors.ticketRequests.fifthDescriptionInput, 'value'); + .waitProperty(selectors.ticketRequests.firstDescription, 'innerText') + .getProperty(selectors.ticketRequests.firstDescription, 'innerText'); expect(result).toEqual('New stuff'); }); - it(`should edit the added request`, async () => { - const result = await nightmare - .clearInput(selectors.ticketRequests.fifthDescriptionInput) - .type(selectors.ticketRequests.fifthDescriptionInput, 'Cool stuff') - .clearInput(selectors.ticketRequests.fifthQuantityInput) - .type(selectors.ticketRequests.fifthQuantityInput, 55) - .waitToClick(selectors.ticketRequests.fifthAtenderSelect) - .waitToClick(selectors.ticketRequests.fifthAtenderSelectFirstOption) - .clearInput(selectors.ticketRequests.fifthPriceInput) - .type(selectors.ticketRequests.fifthPriceInput, 55) - .waitToClick(selectors.ticketRequests.saveButton) - .waitForLastSnackbar(); - - expect(result).toEqual('Data saved!'); - }); - - it(`should confirm the new request was added`, async () => { - const result = await nightmare - .waitToClick(selectors.ticketBasicData.basicDataButton) - .wait(selectors.ticketBasicData.clientSelect) - .waitToClick(selectors.ticketRequests.requestButton) - .waitForTextInInput(selectors.ticketRequests.fifthDescriptionInput, 'Cool Stuff') - .getProperty(selectors.ticketRequests.fifthDescriptionInput, 'value'); - - expect(result).toEqual('Cool stuff'); - }); - it(`should delete the added request`, async () => { const result = await nightmare - .waitToClick(selectors.ticketRequests.fifthRemoveRequestButton) - .waitToClick(selectors.ticketRequests.saveButton) + .waitToClick(selectors.ticketRequests.firstRemoveRequestButton) .waitForLastSnackbar(); expect(result).toEqual('Data saved!'); }); - - it(`should confirm the new request was deleted`, async () => { + it(`should confirm the request was deleted`, async () => { const result = await nightmare .waitToClick(selectors.ticketBasicData.basicDataButton) .wait(selectors.ticketBasicData.clientSelect) .waitToClick(selectors.ticketRequests.requestButton) - .wait(selectors.ticketRequests.request) - .countElement(selectors.ticketRequests.request); + .wait(selectors.ticketRequests.addRequestButton) + .exists(selectors.ticketRequests.request); - expect(result).toEqual(4); + expect(result).toBeFalsy(); }); });