import selectors from '../../helpers/selectors.js'; import createNightmare from '../../helpers/nightmare'; describe('Ticket descriptor path', () => { const nightmare = createNightmare(); beforeAll(() => { nightmare .loginAndModule('salesperson', 'ticket'); }); describe('Delete ticket', () => { it('should search for an specific ticket', async() => { const result = await nightmare .write(selectors.ticketsIndex.searchTicketInput, 18) .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 summary`, async() => { const url = await nightmare .waitForTextInElement(selectors.ticketsIndex.searchResult, 'Cerebro') .waitToClick(selectors.ticketsIndex.searchResult) .waitForURL('/summary') .parsedUrl(); expect(url.hash).toContain('/summary'); }); it('should open the change shipped hours dialog by using the more menu option', async() => { const visible = await nightmare .waitToClick(selectors.ticketDescriptor.moreMenu) .waitToClick(selectors.ticketDescriptor.moreMenuChangeShippedHour) .wait(selectors.ticketDescriptor.changeShippedHourInput) .isVisible(selectors.ticketDescriptor.changeShippedHourInput); expect(visible).toBeTruthy(); }); it(`should update the shipped hour`, async() => { const result = await nightmare .pickTime(selectors.ticketDescriptor.changeShippedHourInput, '08:15') .waitToClick(selectors.ticketDescriptor.acceptChangeHourButton) .waitForLastSnackbar(); expect(result).toEqual('Shipped hour updated'); }); it(`should confirm the ticket descriptor shows the correct shipping hour`, async() => { const result = await nightmare .waitToGetProperty(selectors.ticketDescriptor.descriptorDeliveryDate, 'innerText'); expect(result).toContain('08:15'); }); it('should delete the ticket using the descriptor more menu', async() => { const result = await nightmare .waitToClick(selectors.ticketDescriptor.moreMenu) .waitToClick(selectors.ticketDescriptor.moreMenuDeleteTicket) .waitToClick(selectors.ticketDescriptor.acceptDeleteButton) .waitForLastSnackbar(); expect(result).toEqual('Ticket deleted'); }); it('should have been relocated to the ticket index', async() => { const url = await nightmare .parsedUrl(); expect(url.hash).toEqual('#!/ticket/index'); }); it(`should search for the deleted ticket and check it's date`, async() => { const result = await nightmare .write(selectors.ticketsIndex.searchTicketInput, 18) .waitToClick(selectors.ticketsIndex.searchButton) .waitForNumberOfElements(selectors.ticketsIndex.searchResult, 1) .wait(selectors.ticketsIndex.searchResultDate) .waitToGetProperty(selectors.ticketsIndex.searchResultDate, 'innerText'); expect(result).toContain(2000); }); }); describe('add stowaway', () => { it('should search for a ticket', async() => { const result = await nightmare .clearInput(selectors.ticketsIndex.searchTicketInput) .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 summary`, async() => { const url = await nightmare .waitForTextInElement(selectors.ticketsIndex.searchResult, 'Many Places') .waitToClick(selectors.ticketsIndex.searchResult) .waitForURL('/summary') .parsedUrl(); expect(url.hash).toContain('/summary'); }); it('should open the add stowaway dialog', async() => { const isVisible = await nightmare .waitForSpinnerLoad() .waitToClick(selectors.ticketDescriptor.moreMenu) .waitToClick(selectors.ticketDescriptor.moreMenuAddStowaway) .wait(selectors.ticketDescriptor.addStowawayDialogFirstTicket) .visible(selectors.ticketDescriptor.addStowawayDialogFirstTicket); expect(isVisible).toBeTruthy(); }); it('should add a ticket as stowaway', async() => { const result = await nightmare .waitToClick(selectors.ticketDescriptor.addStowawayDialogFirstTicket) .waitForLastSnackbar(); expect(result).toEqual('Data saved!'); }); it(`should navigate to the added ticket using the descriptors ship button`, async() => { const url = await nightmare .waitToClick(selectors.ticketDescriptor.closeStowawayDialog) .waitToClick(selectors.ticketDescriptor.shipButton) .waitForURL('#!/ticket/17/summary') .parsedUrl(); expect(url.hash).toContain('#!/ticket/17/summary'); }); it(`should check the state of the stowaway ticket is embarked`, async() => { const state = await nightmare .waitToGetProperty(selectors.ticketDescriptor.stateLabelValue, 'innerText'); expect(state).toEqual('State Embarcando'); }); it(`should navigate to the ship ticket using the descriptors ship button`, async() => { const url = await nightmare .waitToClick(selectors.ticketDescriptor.shipButton) .waitForURL('#!/ticket/16/summary') .parsedUrl(); expect(url.hash).toContain('#!/ticket/16/summary'); }); it(`should navigate back to the added ticket using the descriptors ship button`, async() => { const url = await nightmare .waitToClick(selectors.ticketDescriptor.closeStowawayDialog) .waitToClick(selectors.ticketDescriptor.shipButton) .waitForURL('#!/ticket/17/summary') .parsedUrl(); expect(url.hash).toContain('#!/ticket/17/summary'); }); it('should delete the stowaway', async() => { const result = await nightmare .waitToClick(selectors.ticketDescriptor.moreMenu) .waitToClick(selectors.ticketDescriptor.moreMenuDeleteStowawayButton) .waitToClick(selectors.ticketDescriptor.acceptDeleteStowawayButton) .waitForLastSnackbar(); expect(result).toEqual('Data saved!'); }); it(`should confirm the ship buton doesn't exisist any more`, async() => { const exists = await nightmare .exists(selectors.ticketDescriptor.shipButton); expect(exists).toBeFalsy(); }); }); describe('Make invoice', () => { it('should login as adminBoss role then search for a ticket', async() => { const invoiceableTicketId = 14; const url = await nightmare .loginAndModule('adminBoss', 'ticket') .accessToSearchResult(invoiceableTicketId) .waitForURL('/summary') .parsedUrl(); expect(url.hash).toContain(`ticket/${invoiceableTicketId}/summary`); }); it(`should make sure the ticket doesn't have an invoiceOutFk yet`, async() => { const result = await nightmare .waitToGetProperty(selectors.ticketSummary.invoiceOutRef, 'innerText'); expect(result).toEqual('-'); }); it('should invoice the ticket using the descriptor more menu', async() => { const result = await nightmare .waitToClick(selectors.ticketDescriptor.moreMenu) .waitToClick(selectors.ticketDescriptor.moreMenuMakeInvoice) .waitToClick(selectors.ticketDescriptor.acceptInvoiceOutButton) .waitForLastSnackbar(); expect(result).toEqual('Ticket invoiced'); }); it(`should make sure the ticket summary have an invoiceOutFk`, async() => { const result = await nightmare .waitForTextInElement(selectors.ticketSummary.invoiceOutRef, 'T4444445') .waitToGetProperty(selectors.ticketSummary.invoiceOutRef, 'innerText'); expect(result).toEqual('T4444445'); }); }); });