diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js index 213151ba87..d88688b893 100644 --- a/e2e/helpers/selectors.js +++ b/e2e/helpers/selectors.js @@ -394,9 +394,9 @@ export default { firstSaleQuantityCell: 'vn-ticket-sale vn-tr:nth-child(1) > vn-td-editable', firstSaleQuantityClearInput: 'vn-textfield[model="sale.quantity"] div.suffix > i', firstSaleID: 'vn-ticket-sale:nth-child(1) vn-td:nth-child(4) > span', - firstSalePrice: 'vn-ticket-sale:nth-child(1) vn-tr:nth-child(1) > vn-td:nth-child(7) > span', + firstSalePrice: 'vn-ticket-sale:nth-child(1) vn-tr:nth-child(1) > vn-td:nth-child(7)', firstSalePriceInput: 'vn-ticket-sale:nth-child(1) vn-popover.edit.dialog-summary.ng-isolate-scope.vn-popover.shown vn-input-number input', - firstSaleDiscount: 'vn-ticket-sale:nth-child(1) vn-td:nth-child(8) > span', + firstSaleDiscount: 'vn-ticket-sale:nth-child(1) vn-td:nth-child(8)', firstSaleDiscountInput: 'vn-ticket-sale:nth-child(1) vn-ticket-sale-edit-discount vn-input-number input', firstSaleImport: 'vn-ticket-sale:nth-child(1) vn-td:nth-child(9)', firstSaleReservedIcon: 'vn-ticket-sale vn-tr:nth-child(1) > vn-td:nth-child(2) > vn-icon:nth-child(3)', diff --git a/e2e/paths/05-ticket-module/07_edit_sale.spec.js b/e2e/paths/05-ticket-module/07_edit_sale.spec.js index 3deffa33bf..3451b847a2 100644 --- a/e2e/paths/05-ticket-module/07_edit_sale.spec.js +++ b/e2e/paths/05-ticket-module/07_edit_sale.spec.js @@ -1,28 +1,26 @@ import selectors from '../../helpers/selectors.js'; import createNightmare from '../../helpers/nightmare'; -// #1387 e2e Ticket Edit sale path -xdescribe('Ticket Edit sale path', () => { +describe('Ticket Edit sale path', () => { const nightmare = createNightmare(); beforeAll(() => { nightmare .loginAndModule('salesPerson', 'ticket') - .accessToSearchResult('16') + .accessToSearchResult(16) .accessToSection('ticket.card.sale'); }); - it(`should click on the second claim id to navigate over there`, async() => { + it(`should click on the first sale claim icon to navigate over there`, async() => { const url = await nightmare - .waitToClick(selectors.ticketSales.secondSaleClaimIcon) + .waitToClick(selectors.ticketSales.firstSaleClaimIcon) .wait(selectors.claimBasicData.claimStateAutocomplete) .parsedUrl(); expect(url.hash).toEqual('#!/claim/2/basic-data'); }); - - it('should now click on the Tickets button of the top bar menu', async() => { + it('should navigate to the tickets index', async() => { const url = await nightmare .waitToClick(selectors.globalItems.applicationsMenuButton) .wait(selectors.globalItems.applicationsMenuVisible) @@ -33,28 +31,17 @@ xdescribe('Ticket Edit sale path', () => { expect(url.hash).toEqual('#!/ticket/index'); }); - it('should again search for a specific ticket', async() => { - const result = await nightmare - .write(selectors.ticketsIndex.searchTicketInput, '16') - .waitToClick(selectors.ticketsIndex.searchButton) - .waitForNumberOfElements(selectors.ticketsIndex.searchResult, 1) - .countElement(selectors.ticketsIndex.searchResult); - - expect(result).toEqual(1); - }); - - it(`should now click on the search result to access to the ticket Sale`, async() => { + it(`should search for a ticket and then navigate to it's sales`, async() => { const url = await nightmare - .waitForTextInElement(selectors.ticketsIndex.searchResult, 'address 21') - .waitToClick(selectors.ticketsIndex.searchResult) - .waitToClick(selectors.ticketSales.saleButton) + .accessToSearchResult(16) + .accessToSection('ticket.card.sale') .waitForURL('/sale') .parsedUrl(); expect(url.hash).toContain('/sale'); }); - it(`should check the zoomed image isnt present`, async() => { + it(`should check the zoomed image isn't present`, async() => { const result = await nightmare .countElement(selectors.ticketSales.firstSaleZoomedImage); @@ -71,7 +58,7 @@ xdescribe('Ticket Edit sale path', () => { it(`should click on the zoomed image to close it`, async() => { const result = await nightmare - .wait(1000) + .wait(100) .clickIfVisible(selectors.ticketSales.firstSaleZoomedImage) .countElement(selectors.ticketSales.firstSaleZoomedImage); @@ -124,12 +111,8 @@ xdescribe('Ticket Edit sale path', () => { .waitToClick(selectors.globalItems.applicationsMenuButton) .wait(selectors.globalItems.applicationsMenuVisible) .waitToClick(selectors.globalItems.ticketsButton) - .write(selectors.ticketsIndex.searchTicketInput, '16') - .waitToClick(selectors.ticketsIndex.searchButton) - .waitForNumberOfElements(selectors.ticketsIndex.searchResult, 1) - .waitForTextInElement(selectors.ticketsIndex.searchResult, 'address 21') - .waitToClick(selectors.ticketsIndex.searchResult) - .waitToClick(selectors.ticketSales.saleButton) + .accessToSearchResult(16) + .accessToSection('ticket.card.sale') .waitForURL('/sale') .parsedUrl(); @@ -138,17 +121,17 @@ xdescribe('Ticket Edit sale path', () => { it('should try to add a higher quantity value and then receive an error', async() => { const result = await nightmare - .waitToFocus(selectors.ticketSales.firstSaleQuantityCell) - .write(selectors.ticketSales.firstSaleQuantity, '9\u000d') + .focusElement(selectors.ticketSales.firstSaleQuantityCell) + .write(selectors.ticketSales.firstSaleQuantity, '11\u000d') .waitForLastSnackbar(); expect(result).toEqual('The new quantity should be smaller than the old one'); }); - it('should remove 1 from quantity', async() => { + it('should remove 1 from the first sale quantity', async() => { const result = await nightmare - .waitToFocus(selectors.ticketSales.firstSaleQuantityCell) - .write(selectors.ticketSales.firstSaleQuantity, '4\u000d') + .focusElement(selectors.ticketSales.firstSaleQuantityCell) + .write(selectors.ticketSales.firstSaleQuantity, '9\u000d') .waitForLastSnackbar(); expect(result).toEqual('Data saved!'); @@ -156,7 +139,7 @@ xdescribe('Ticket Edit sale path', () => { it('should update the price', async() => { const result = await nightmare - .waitToClick(selectors.ticketSales.firstSalePrice) + .waitToClick(`${selectors.ticketSales.firstSalePrice} > span`) .write(selectors.ticketSales.firstSalePriceInput, '5\u000d') .waitForLastSnackbar(); @@ -165,7 +148,7 @@ xdescribe('Ticket Edit sale path', () => { it('should confirm the price have been updated', async() => { const result = await nightmare - .waitToGetProperty(selectors.ticketSales.firstSalePrice, 'innerText'); + .waitToGetProperty(`${selectors.ticketSales.firstSalePrice} span`, 'innerText'); expect(result).toContain('5.00'); }); @@ -174,14 +157,13 @@ xdescribe('Ticket Edit sale path', () => { const result = await nightmare .waitToGetProperty(selectors.ticketSales.firstSaleImport, 'innerText'); - expect(result).toContain('20.00'); + expect(result).toContain('45.00'); }); it('should update the discount', async() => { const result = await nightmare - .waitToClick(selectors.ticketSales.firstSaleDiscount) + .waitToClick(`${selectors.ticketSales.firstSaleDiscount} > span`) .write(selectors.ticketSales.firstSaleDiscountInput, '50\u000d') - // .write('body', '\u000d') // simulates enter .waitForLastSnackbar(); expect(result).toEqual('Data saved!'); @@ -189,29 +171,29 @@ xdescribe('Ticket Edit sale path', () => { it('should confirm the discount have been updated', async() => { const result = await nightmare - .waitForTextInElement(selectors.ticketSales.firstSaleDiscount, '50 %') - .waitToGetProperty(selectors.ticketSales.firstSaleDiscount, 'innerText'); + .waitForTextInElement(`${selectors.ticketSales.firstSaleDiscount} > span`, '50 %') + .waitToGetProperty(`${selectors.ticketSales.firstSaleDiscount} > span`, 'innerText'); expect(result).toContain('50 %'); }); it('should confirm the total import for that item have been updated', async() => { const result = await nightmare - .waitForTextInElement(selectors.ticketSales.firstSaleImport, '10.00') + .waitForTextInElement(selectors.ticketSales.firstSaleImport, '22.50') .waitToGetProperty(selectors.ticketSales.firstSaleImport, 'innerText'); - expect(result).toContain('10.00'); + expect(result).toContain('22.50'); }); it('should select the third sale and create a claim of it', async() => { const url = await nightmare .waitToClick(selectors.ticketSales.thirdSaleCheckbox) - .waitToClick(selectors.ticketSales.moreMenuButton) + .waitToClick(selectors.ticketSales.moreMenu) .waitToClick(selectors.ticketSales.moreMenuCreateClaim) .wait(selectors.claimBasicData.claimStateAutocomplete) .parsedUrl(); - expect(url.hash).toEqual('#!/claim/5/basic-data'); + expect(url.hash).toContain('basic-data'); }); it('should click on the Claims button of the top bar menu', async() => { @@ -246,21 +228,10 @@ xdescribe('Ticket Edit sale path', () => { expect(url.hash).toEqual('#!/ticket/index'); }); - it('should search the ticket', async() => { - const result = await nightmare - .write(selectors.ticketsIndex.searchTicketInput, '16') - .waitToClick(selectors.ticketsIndex.searchButton) - .waitForNumberOfElements(selectors.ticketsIndex.searchResult, 1) - .countElement(selectors.ticketsIndex.searchResult); - - expect(result).toEqual(1); - }); - - it(`should click on the result to access to the ticket Sale`, async() => { + it('should search for a ticket then access to the sales section', async() => { const url = await nightmare - .waitForTextInElement(selectors.ticketsIndex.searchResult, 'address 21') - .waitToClick(selectors.ticketsIndex.searchResult) - .waitToClick(selectors.ticketSales.saleButton) + .accessToSearchResult(16) + .accessToSection('ticket.card.sale') .waitForURL('/sale') .parsedUrl(); @@ -284,45 +255,33 @@ xdescribe('Ticket Edit sale path', () => { expect(result).toEqual(3); }); - it('should select the third sale and attempt to send it to a frozen client ticket', async() => { + it('should select the third sale and transfer it to a valid ticket', async() => { + const targetTicketId = 12; + const result = await nightmare .waitToClick(selectors.ticketSales.thirdSaleCheckbox) .waitToClick(selectors.ticketSales.transferSaleButton) - .write(selectors.ticketSales.moveToTicketInput, 2) + .write(selectors.ticketSales.moveToTicketInput, targetTicketId) .waitToClick(selectors.ticketSales.moveToTicketButton) - .waitForLastSnackbar(); - - expect(result).toEqual(`The sales of this ticket can't be modified`); - }); - - it('should transfer the third sale to a valid ticket', async() => { - const result = await nightmare - .waitToClick(selectors.ticketSales.moveToTicketInputClearButton) - .write(selectors.ticketSales.moveToTicketInput, 12) - .waitToClick(selectors.ticketSales.moveToTicketButton) - .waitForURL('ticket/12/sale') + .waitForURL(`ticket/${targetTicketId}/sale`) .parsedUrl(); - expect(result.hash).toContain(`ticket/12/sale`); + expect(result.hash).toContain(`ticket/${targetTicketId}/sale`); }); it('should confirm the transfered line is the correct one', async() => { const result = await nightmare - .wait(selectors.ticketSales.firstSaleText) - .waitToGetProperty(selectors.ticketSales.firstSaleText, 'innerText'); + .wait(selectors.ticketSales.secondSaleText) + .waitToGetProperty(selectors.ticketSales.secondSaleText, 'innerText'); - expect(result).toContain(`Melee weapon heavy shield 1x0.5m`); + expect(result).toContain(`Ranged weapon longbow 2m`); }); it('should go back to the original ticket sales section', async() => { const url = await nightmare - .waitToClick(selectors.itemsIndex.goBackToModuleIndexButton) - .write(selectors.ticketsIndex.searchTicketInput, '16') - .waitToClick(selectors.ticketsIndex.searchButton) - .waitForNumberOfElements(selectors.ticketsIndex.searchResult, 1) - .waitForTextInElement(selectors.ticketsIndex.searchResult, 'address 21') - .waitToClick(selectors.ticketsIndex.searchResult) - .waitToClick(selectors.ticketSales.saleButton) + .waitToClick(selectors.ticketDescriptor.goBackToModuleIndexButton) + .accessToSearchResult(16) + .accessToSection('ticket.card.sale') .waitForURL('/sale') .parsedUrl(); @@ -339,13 +298,9 @@ xdescribe('Ticket Edit sale path', () => { it('should go back to the receiver ticket sales section', async() => { const url = await nightmare - .waitToClick(selectors.itemsIndex.goBackToModuleIndexButton) - .write(selectors.ticketsIndex.searchTicketInput, 'id:12') - .waitToClick(selectors.ticketsIndex.searchButton) - .waitForNumberOfElements(selectors.ticketsIndex.searchResult, 1) - .waitForTextInElement(selectors.ticketsIndex.searchResult, 'address 21') - .waitToClick(selectors.ticketsIndex.searchResult) - .waitToClick(selectors.ticketSales.saleButton) + .waitToClick(selectors.ticketDescriptor.goBackToModuleIndexButton) + .accessToSearchResult(12) + .accessToSection('ticket.card.sale') .waitForURL('/sale') .parsedUrl(); @@ -353,78 +308,66 @@ xdescribe('Ticket Edit sale path', () => { }); it('should transfer the sale back to the original ticket', async() => { + const targetTicketId = 16; + const result = await nightmare - .waitToClick(selectors.ticketSales.firstSaleCheckbox) + .waitToClick(selectors.ticketSales.secondSaleCheckbox) .waitToClick(selectors.ticketSales.transferSaleButton) - .write(selectors.ticketSales.moveToTicketInput, '16') + .write(selectors.ticketSales.moveToTicketInput, targetTicketId) .waitToClick(selectors.ticketSales.moveToTicketButton) - .waitForURL('ticket/16/sale') + .waitForURL(`ticket/${targetTicketId}/sale`) .parsedUrl(); - expect(result.hash).toContain(`ticket/16/sale`); + expect(result.hash).toContain(`ticket/${targetTicketId}/sale`); }); it('should confirm the original ticket received the line', async() => { const result = await nightmare - // .waitForNumberOfElements(selectors.ticketSales.saleLine, 3) + .waitForNumberOfElements(selectors.ticketSales.saleLine, 3) .countElement(selectors.ticketSales.saleLine); expect(result).toEqual(3); }); - it('should now go back to the original ticket sales section', async() => { + it(`should throw an error when attempting to create a ticket for an inactive client`, async() => { + const result = await nightmare + .waitToClick(selectors.ticketSales.firstSaleCheckbox) + .waitToClick(selectors.ticketSales.transferSaleButton) + .waitToClick(selectors.ticketSales.moveToNewTicketButton) + .waitToClick(selectors.ticketSales.acceptDeleteTicketButton) + .waitForLastSnackbar(); + + expect(result).toEqual(`You can't create a ticket for a inactive client`); + }); + + it('should go now to the ticket sales section of an active, not frozen client', async() => { const url = await nightmare - .waitToClick(selectors.itemsIndex.goBackToModuleIndexButton) - .write(selectors.ticketsIndex.searchTicketInput, 'id:8') - .waitToClick(selectors.ticketsIndex.searchButton) - .waitForNumberOfElements(selectors.ticketsIndex.searchResult, 1) - .waitForTextInElement(selectors.ticketsIndex.searchResult, 'address 24') - .waitToClick(selectors.ticketsIndex.searchResult) - .waitToClick(selectors.ticketSales.saleButton) + .waitToClick(selectors.ticketDescriptor.goBackToModuleIndexButton) + .accessToSearchResult(13) + .accessToSection('ticket.card.sale') .waitForURL('/sale') .parsedUrl(); expect(url.hash).toContain('/sale'); }); - it('should select the second and third sale and tranfer them to a new ticket then get to the ticket index', async() => { + it(`should select all sales, tranfer them to a new ticket and delete the sender ticket as it would've been left empty`, async() => { + const senderTicketId = 13; + const url = await nightmare .waitToClick(selectors.ticketSales.firstSaleCheckbox) .waitToClick(selectors.ticketSales.transferSaleButton) .waitToClick(selectors.ticketSales.moveToNewTicketButton) - .resetLogin() - .waitForLogin('salesPerson') - .waitToClick(selectors.globalItems.applicationsMenuButton) - .wait(selectors.globalItems.applicationsMenuVisible) - .waitToClick(selectors.globalItems.ticketsButton) - .wait(selectors.ticketsIndex.searchTicketInput) - .parsedUrl(); - - expect(url.hash).toEqual('#!/ticket/index'); - }); - - it('should search for a specific created ticket', async() => { - const result = await nightmare - .write(selectors.ticketsIndex.searchTicketInput, 'nickname:(address 24) stateFk:2') - .waitToClick(selectors.ticketsIndex.searchButton) - .waitForNumberOfElements(selectors.ticketsIndex.searchResult, 1) - .countElement(selectors.ticketsIndex.searchResult); - - expect(result).toEqual(1); - }); - - it(`should click on the search result to access to the ticket Sale once more`, async() => { - const url = await nightmare - .waitForTextInElement(selectors.ticketsIndex.searchResult, 'address 24') - .waitToClick(selectors.ticketsIndex.searchResult) - .waitToClick(selectors.ticketSales.saleButton) - .waitForURL('/sale') + .waitToClick(selectors.ticketSales.acceptDeleteTicketButton) + .wait((selector, ticketId) => { + return document.querySelector(selector).innerText.toLowerCase().indexOf(`${ticketId}`) == -1; + }, selectors.ticketDescriptor.idLabelValue, senderTicketId) .parsedUrl(); expect(url.hash).toContain('/sale'); }); - it('should confirm the new ticket received both lines', async() => { + it('should confirm the new ticket received the line', async() => { const result = await nightmare .countElement(selectors.ticketSales.saleLine); @@ -441,8 +384,8 @@ xdescribe('Ticket Edit sale path', () => { it('should mark the first sale as reserved', async() => { const result = await nightmare .waitToClick(selectors.ticketSales.firstSaleCheckbox) - .waitToClick(selectors.ticketSales.moreMenuButton) - .waitToClick(selectors.ticketSales.moreMenuReseveOption) + .waitToClick(selectors.ticketSales.moreMenu) + .waitToClick(selectors.ticketSales.moreMenuReserve) .waitForClassNotPresent(selectors.ticketSales.firstSaleReservedIcon, 'ng-hide') .isVisible(selectors.ticketSales.firstSaleReservedIcon); @@ -451,9 +394,8 @@ xdescribe('Ticket Edit sale path', () => { it('should unmark the first sale as reserved', async() => { const result = await nightmare - .waitToClick(selectors.ticketSales.firstSaleCheckbox) - .waitToClick(selectors.ticketSales.moreMenuButton) - .waitToClick(selectors.ticketSales.moreMenuUnmarkResevedOption) + .waitToClick(selectors.ticketSales.moreMenu) + .waitToClick(selectors.ticketSales.moreMenuUnmarkReseved) .waitForClassPresent(selectors.ticketSales.firstSaleReservedIcon, 'ng-hide') .isVisible(selectors.ticketSales.firstSaleReservedIcon); @@ -462,8 +404,7 @@ xdescribe('Ticket Edit sale path', () => { it('should update all sales discount', async() => { const result = await nightmare - .waitToClick(selectors.ticketSales.selectAllSalesCheckbox) - .waitToClick(selectors.ticketSales.moreMenuButton) + .waitToClick(selectors.ticketSales.moreMenu) .waitToClick(selectors.ticketSales.moreMenuUpdateDiscount) .write(selectors.ticketSales.moreMenuUpdateDiscountInput, 100) .write('body', '\u000d') @@ -473,80 +414,39 @@ xdescribe('Ticket Edit sale path', () => { expect(result).toContain('0.00'); }); - it('should log in as Production role and go to the ticket index', async() => { + it('should log in as Production role and go to a target ticket summary', async() => { const url = await nightmare - .waitForLogin('production') - .waitToClick(selectors.globalItems.applicationsMenuButton) - .wait(selectors.globalItems.applicationsMenuVisible) - .waitToClick(selectors.globalItems.ticketsButton) - .wait(selectors.ticketsIndex.searchTicketInput) + .loginAndModule('production', 'ticket') + .accessToSearchResult(13) + .waitForURL('/summary') .parsedUrl(); - expect(url.hash).toEqual('#!/ticket/index'); + expect(url.hash).toContain('/summary'); }); - it('should now search for a specific ticket', async() => { + it(`should check it's state is deleted`, async() => { const result = await nightmare - .write(selectors.ticketsIndex.searchTicketInput, '16') - .waitToClick(selectors.ticketsIndex.searchButton) - .waitForNumberOfElements(selectors.ticketsIndex.searchResult, 1) - .countElement(selectors.ticketsIndex.searchResult); + .waitToGetProperty(selectors.ticketDescriptor.stateLabelValue, 'innerText'); - expect(result).toEqual(1); - }); - - it(`should now click on the search result to access to the ticket Tracking`, async() => { - const url = await nightmare - .waitForTextInElement(selectors.ticketsIndex.searchResult, 'address 21') - .waitToClick(selectors.ticketsIndex.searchResult) - .waitToClick(selectors.ticketTracking.trackingButton) - .waitForURL('/tracking/index') - .parsedUrl(); - - expect(url.hash).toContain('/tracking/index'); - }); - - it(`should click on the edit ticket tracking state button`, async() => { - const url = await nightmare - .waitToClick(selectors.ticketTracking.createStateButton) - .waitForURL('/tracking/edit') - .parsedUrl(); - - expect(url.hash).toContain('/tracking/edit'); - }); - - it(`should set the state of the ticket to preparation`, async() => { - const url = await nightmare - .autocompleteSearch(selectors.ticketTracking.stateAutocomplete, 'PreparaciĆ³n') - .waitToClick(selectors.ticketTracking.saveButton) - .waitForURL('/tracking/index') - .parsedUrl(); - - expect(url.hash).toContain('/tracking/index'); - }); - - it(`should click on the ticket Sale menu button`, async() => { - const url = await nightmare - .waitToClick(selectors.ticketSales.saleButton) - .waitForURL('/sale') - .parsedUrl(); - - expect(url.hash).toContain('/sale'); + expect(result).toEqual('State Eliminado'); }); describe('when state is preparation and loged as Production', () => { it(`should not be able to edit the sale price`, async() => { const result = await nightmare - .wait(selectors.ticketSales.firstSaleID) - .exists(selectors.ticketSales.firstSalePrice); + .waitToClick(selectors.ticketDescriptor.goBackToModuleIndexButton) + .accessToSearchResult(8) + .accessToSection('ticket.card.sale') + .waitToClick(selectors.ticketSales.firstSalePrice) + .exists(selectors.ticketSales.firstSalePriceInput); expect(result).toBeFalsy(); }); it(`should not be able to edit the sale discount`, async() => { const result = await nightmare - .waitToClick(selectors.ticketSales.firstSaleID) - .exists(selectors.ticketSales.firstSaleDiscount); + .waitToClick(selectors.ticketSales.firstSaleDiscount) + .exists(selectors.ticketSales.firstSaleDiscountInput); expect(result).toBeFalsy(); }); @@ -559,33 +459,11 @@ xdescribe('Ticket Edit sale path', () => { expect(result).toBeFalsy(); }); - it('should log in as salesPerson role and go to the ticket index', async() => { + it('should log in as salesPerson then go to the sales of a target ticket', async() => { const url = await nightmare - .waitForLogin('salesPerson') - .waitToClick(selectors.globalItems.applicationsMenuButton) - .wait(selectors.globalItems.applicationsMenuVisible) - .waitToClick(selectors.globalItems.ticketsButton) - .wait(selectors.ticketsIndex.searchTicketInput) - .parsedUrl(); - - expect(url.hash).toEqual('#!/ticket/index'); - }); - - it('should once again search for a specific ticket', async() => { - const result = await nightmare - .write(selectors.ticketsIndex.searchTicketInput, '16') - .waitToClick(selectors.ticketsIndex.searchButton) - .waitForNumberOfElements(selectors.ticketsIndex.searchResult, 1) - .countElement(selectors.ticketsIndex.searchResult); - - expect(result).toEqual(1); - }); - - it(`should click on the search result to access to the ticket Sale once again`, async() => { - const url = await nightmare - .waitForTextInElement(selectors.ticketsIndex.searchResult, 'address 21') - .waitToClick(selectors.ticketsIndex.searchResult) - .waitToClick(selectors.ticketSales.saleButton) + .loginAndModule('salesPerson', 'ticket') + .accessToSearchResult(8) + .accessToSection('ticket.card.sale') .waitForURL('/sale') .parsedUrl(); @@ -594,23 +472,23 @@ xdescribe('Ticket Edit sale path', () => { }); describe('when state is preparation and loged as salesPerson', () => { - it(`shouldnt be able to edit the sale price`, async() => { + it(`shouldn't be able to edit the sale price`, async() => { const result = await nightmare - .waitToClick(selectors.ticketSales.firstSaleID) - .exists(selectors.ticketSales.firstSalePrice); + .waitToClick(selectors.ticketSales.firstSalePrice) + .exists(selectors.ticketSales.firstSalePriceInput); expect(result).toBeFalsy(); }); - it(`shouldnt be able to edit the sale discount`, async() => { + it(`should be able to edit the sale discount`, async() => { const result = await nightmare - .waitToClick(selectors.ticketSales.firstSaleID) - .exists(selectors.ticketSales.firstSaleDiscount); + .waitToClick(selectors.ticketSales.firstSaleDiscount) + .exists(selectors.ticketSales.firstSaleDiscountInput); expect(result).toBeFalsy(); }); - it(`shouldnt be able to edit the sale state`, async() => { + it(`should not be able to edit the sale state`, async() => { const result = await nightmare .waitToClick(selectors.ticketSales.stateMenuButton) .exists(selectors.ticketSales.stateMenuOptions); diff --git a/e2e/paths/05-ticket-module/13_services.spec.js b/e2e/paths/05-ticket-module/13_services.spec.js index ab98a36bb6..31d2627782 100644 --- a/e2e/paths/05-ticket-module/13_services.spec.js +++ b/e2e/paths/05-ticket-module/13_services.spec.js @@ -3,7 +3,7 @@ import createNightmare from '../../helpers/nightmare'; describe('Ticket services path', () => { const nightmare = createNightmare(); - const invoicedTicketId = 10; + const invoicedTicketId = 1; describe('as employee', () => { beforeAll(() => { @@ -36,12 +36,16 @@ describe('Ticket services path', () => { }); describe('as administrative', () => { - let editableTicketId = 13; - beforeAll(() => { - nightmare + let editableTicketId = 16; + it('should navigate to the services of a target ticket', async() => { + const url = await nightmare .loginAndModule('administrative', 'ticket') .accessToSearchResult(editableTicketId) - .accessToSection('ticket.card.service'); + .accessToSection('ticket.card.service') + .waitForURL('/service') + .parsedUrl(); + + expect(url.hash).toContain('/service'); }); it('should click on the add button to prepare the form to create a new service', async() => {