From 4ee656e4aaecdaad86f1a0b972dd6d7f0e04146c Mon Sep 17 00:00:00 2001 From: Carlos Jimenez Ruiz Date: Fri, 28 Feb 2020 16:49:39 +0100 Subject: [PATCH 1/9] travel basic data and log e2e --- e2e/helpers/selectors.js | 15 +++ e2e/paths/02-client/08_add_notes.spec.js | 6 + .../10-travel/02_basic_data_and_log.spec.js | 103 ++++++++++++++++++ 3 files changed, 124 insertions(+) create mode 100644 e2e/paths/10-travel/02_basic_data_and_log.spec.js diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js index 7e3e726e42..28263f2ebf 100644 --- a/e2e/helpers/selectors.js +++ b/e2e/helpers/selectors.js @@ -783,6 +783,21 @@ export default { ticketOne: 'vn-invoice-out-summary > vn-card > vn-horizontal > vn-auto > vn-table > div > vn-tbody > vn-tr:nth-child(1)', ticketTwo: 'vn-invoice-out-summary > vn-card > vn-horizontal > vn-auto > vn-table > div > vn-tbody > vn-tr:nth-child(2)' }, + travelBasicDada: { + reference: 'vn-travel-basic-data vn-textfield[ng-model="$ctrl.travel.ref"]', + agency: 'vn-travel-basic-data vn-autocomplete[ng-model="$ctrl.travel.agencyModeFk"]', + shippingDate: 'vn-travel-basic-data vn-date-picker[ng-model="$ctrl.travel.shipped"]', + deliveryDate: 'vn-travel-basic-data vn-date-picker[ng-model="$ctrl.travel.landed"]', + outputWarehouse: 'vn-travel-basic-data vn-autocomplete[ng-model="$ctrl.travel.warehouseOutFk"]', + inputWarehouse: 'vn-travel-basic-data vn-autocomplete[ng-model="$ctrl.travel.warehouseInFk"]', + delivered: 'vn-travel-basic-data vn-check[ng-model="$ctrl.travel.isDelivered"]', + received: 'vn-travel-basic-data vn-check[ng-model="$ctrl.travel.isReceived"]', + save: 'vn-travel-basic-data vn-submit[label="Save"]', + undoChanges: 'vn-travel-basic-data vn-button[label="Undo changes"]' + }, + travelLog: { + firstLogFistTD: 'vn-travel-log vn-tbody > vn-tr > vn-td:nth-child(1) > div' + }, travelThermograph: { add: 'vn-travel-thermograph-index vn-float-button[icon="add"]', thermographID: 'vn-travel-thermograph-create vn-autocomplete[ng-model="$ctrl.dms.thermographId"]', diff --git a/e2e/paths/02-client/08_add_notes.spec.js b/e2e/paths/02-client/08_add_notes.spec.js index 8f1a9244d9..b759cbd078 100644 --- a/e2e/paths/02-client/08_add_notes.spec.js +++ b/e2e/paths/02-client/08_add_notes.spec.js @@ -16,6 +16,12 @@ describe('Client Add notes path', () => { await browser.close(); }); + it(`should reach the notes index`, async() => { + let url = await page.expectURL('/note'); + + expect(url).toBe(true); + }); + it(`should click on the add note button`, async() => { await page.waitToClick(selectors.clientNotes.addNoteFloatButton); let url = await page.expectURL('/note/create'); diff --git a/e2e/paths/10-travel/02_basic_data_and_log.spec.js b/e2e/paths/10-travel/02_basic_data_and_log.spec.js new file mode 100644 index 0000000000..491882f5e6 --- /dev/null +++ b/e2e/paths/10-travel/02_basic_data_and_log.spec.js @@ -0,0 +1,103 @@ +import selectors from '../../helpers/selectors.js'; +import getBrowser from '../../helpers/puppeteer'; + +describe('Travel basic data path', () => { + let browser; + let page; + + beforeAll(async() => { + browser = await getBrowser(); + page = browser.page; + await page.loginAndModule('buyer', 'travel'); + await page.accessToSearchResult('3'); + await page.accessToSection('travel.card.basicData'); + }); + + afterAll(async() => { + await browser.close(); + }); + + it('should reach the thermograph section', async() => { + const result = await page.expectURL('/basic-data'); + + expect(result).toBe(true); + }); + + it('should set a wrong delivery date then receive an error on submit', async() => { + await page.datePicker(selectors.travelBasicDada.deliveryDate, -1, null); + await page.waitToClick(selectors.travelBasicDada.save); + const result = await page.waitForLastSnackbar(); + + expect(result).toEqual('Landing cannot be lesser than shipment'); + }); + + it('should undo the changes', async() => { + await page.waitToClick(selectors.travelBasicDada.undoChanges); + await page.waitToClick(selectors.travelBasicDada.save); + const result = await page.waitForLastSnackbar(); + + expect(result).toEqual('No changes to save'); + }); + + it('should now edit the whole form then save', async() => { + await page.clearInput(selectors.travelBasicDada.reference); + await page.write(selectors.travelBasicDada.reference, 'new reference!'); + await page.autocompleteSearch(selectors.travelBasicDada.agency, 'Quantum break device'); + await page.datePicker(selectors.travelBasicDada.shippingDate, -1, null); + await page.datePicker(selectors.travelBasicDada.deliveryDate, 1, null); + await page.autocompleteSearch(selectors.travelBasicDada.outputWarehouse, 'Warehouse Three'); + await page.autocompleteSearch(selectors.travelBasicDada.inputWarehouse, 'Warehouse Four'); + await page.waitToClick(selectors.travelBasicDada.delivered); + await page.waitToClick(selectors.travelBasicDada.received); + await page.waitToClick(selectors.travelBasicDada.save); + const result = await page.waitForLastSnackbar(); + + expect(result).toEqual('Data saved!'); + }); + + it('should reload the section and check the reference was saved', async() => { + await page.reloadSection('travel.card.basicData'); + const result = await page.waitToGetProperty(selectors.travelBasicDada.reference, 'value'); + + expect(result).toEqual('new reference!'); + }); + + it('should check the agency was saved', async() => { + const result = await page.waitToGetProperty(selectors.travelBasicDada.agency, 'value'); + + expect(result).toEqual('Quantum break device'); + }); + + it('should check the output warehouse date was saved', async() => { + const result = await page.waitToGetProperty(selectors.travelBasicDada.outputWarehouse, 'value'); + + expect(result).toEqual('Warehouse Three'); + }); + + it('should check the input warehouse date was saved', async() => { + const result = await page.waitToGetProperty(selectors.travelBasicDada.inputWarehouse, 'value'); + + expect(result).toEqual('Warehouse Four'); + }); + + it(`should check the delivered checkbox was saved even tho it doesn't make sense`, async() => { + await page.waitForClassPresent(selectors.travelBasicDada.delivered, 'checked'); + }); + + it(`should check the received checkbox was saved even tho it doesn't make sense`, async() => { + await page.waitForClassPresent(selectors.travelBasicDada.received, 'checked'); + }); + + it('should navigate to the travel logs', async() => { + await page.accessToSection('travel.card.log'); + const result = await page.expectURL('/log'); + + expect(result).toBe(true); + }); + + it('should check the 1st log contains details from the changes made', async() => { + const result = await page.waitToGetProperty(selectors.travelLog.firstLogFistTD, 'innerText'); + + expect(result).toContain('new reference!'); + }); +}); From 5ba602f5eb0b9cb8d3e2378ac414d3c4acbeaa5c Mon Sep 17 00:00:00 2001 From: Carlos Jimenez Ruiz Date: Fri, 28 Feb 2020 16:58:21 +0100 Subject: [PATCH 2/9] small corrections --- e2e/helpers/selectors.js | 2 +- e2e/paths/10-travel/02_basic_data_and_log.spec.js | 8 +++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js index 28263f2ebf..46292a1705 100644 --- a/e2e/helpers/selectors.js +++ b/e2e/helpers/selectors.js @@ -796,7 +796,7 @@ export default { undoChanges: 'vn-travel-basic-data vn-button[label="Undo changes"]' }, travelLog: { - firstLogFistTD: 'vn-travel-log vn-tbody > vn-tr > vn-td:nth-child(1) > div' + firstLogFirstTD: 'vn-travel-log vn-tbody > vn-tr > vn-td:nth-child(1) > div' }, travelThermograph: { add: 'vn-travel-thermograph-index vn-float-button[icon="add"]', diff --git a/e2e/paths/10-travel/02_basic_data_and_log.spec.js b/e2e/paths/10-travel/02_basic_data_and_log.spec.js index 491882f5e6..20e0c0ac50 100644 --- a/e2e/paths/10-travel/02_basic_data_and_log.spec.js +++ b/e2e/paths/10-travel/02_basic_data_and_log.spec.js @@ -42,9 +42,7 @@ describe('Travel basic data path', () => { it('should now edit the whole form then save', async() => { await page.clearInput(selectors.travelBasicDada.reference); await page.write(selectors.travelBasicDada.reference, 'new reference!'); - await page.autocompleteSearch(selectors.travelBasicDada.agency, 'Quantum break device'); - await page.datePicker(selectors.travelBasicDada.shippingDate, -1, null); - await page.datePicker(selectors.travelBasicDada.deliveryDate, 1, null); + await page.autocompleteSearch(selectors.travelBasicDada.agency, 'Entanglement'); await page.autocompleteSearch(selectors.travelBasicDada.outputWarehouse, 'Warehouse Three'); await page.autocompleteSearch(selectors.travelBasicDada.inputWarehouse, 'Warehouse Four'); await page.waitToClick(selectors.travelBasicDada.delivered); @@ -65,7 +63,7 @@ describe('Travel basic data path', () => { it('should check the agency was saved', async() => { const result = await page.waitToGetProperty(selectors.travelBasicDada.agency, 'value'); - expect(result).toEqual('Quantum break device'); + expect(result).toEqual('Entanglement'); }); it('should check the output warehouse date was saved', async() => { @@ -96,7 +94,7 @@ describe('Travel basic data path', () => { }); it('should check the 1st log contains details from the changes made', async() => { - const result = await page.waitToGetProperty(selectors.travelLog.firstLogFistTD, 'innerText'); + const result = await page.waitToGetProperty(selectors.travelLog.firstLogFirstTD, 'innerText'); expect(result).toContain('new reference!'); }); From 7e694c3e803bc60eed403fe69004a0bf4d7deac3 Mon Sep 17 00:00:00 2001 From: Joan Sanchez Date: Mon, 2 Mar 2020 11:35:43 +0100 Subject: [PATCH 3/9] 2073 - Filter by pending tickets --- modules/ticket/back/methods/ticket/filter.js | 18 +++++++++-- .../back/methods/ticket/specs/filter.spec.js | 30 ++++++++++++++++++- modules/ticket/front/search-panel/index.html | 8 ++++- .../ticket/front/search-panel/locale/es.yml | 4 ++- 4 files changed, 55 insertions(+), 5 deletions(-) diff --git a/modules/ticket/back/methods/ticket/filter.js b/modules/ticket/back/methods/ticket/filter.js index fa3067c176..aff26c63ee 100644 --- a/modules/ticket/back/methods/ticket/filter.js +++ b/modules/ticket/back/methods/ticket/filter.js @@ -67,6 +67,10 @@ module.exports = Self => { arg: 'problems', type: 'Boolean', description: `Whether to show only tickets with problems` + }, { + arg: 'pending', + type: 'Boolean', + description: `Whether to show only tickets with state 'Pending'` }, { arg: 'mine', type: 'Boolean', @@ -130,7 +134,7 @@ module.exports = Self => { dateTo.setHours(23, 59, 0, 0); } - let where = buildFilter(ctx.args, (param, value) => { + const where = buildFilter(ctx.args, (param, value) => { switch (param) { case 'search': return /^\d+$/.test(value) @@ -155,6 +159,17 @@ module.exports = Self => { return {'c.salesPersonFk': {inq: teamIds}}; case 'alertLevel': return {'ts.alertLevel': value}; + case 'pending': + if (value) { + return {and: [ + {'st.alertLevel': 0}, + {'st.code': {neq: 'OK'}} + ]}; + } else { + return {and: [ + {'st.alertLevel': {gt: 0}} + ]}; + } case 'id': case 'clientFk': case 'agencyModeFk': @@ -244,7 +259,6 @@ module.exports = Self => { LEFT JOIN tmp.ticketProblems tp ON tp.ticketFk = f.id LEFT JOIN tmp.ticketTotal tt ON tt.ticketFk = f.id`); - let condition; let hasProblem; let range; diff --git a/modules/ticket/back/methods/ticket/specs/filter.spec.js b/modules/ticket/back/methods/ticket/specs/filter.spec.js index 656f99d65d..faaeb82c07 100644 --- a/modules/ticket/back/methods/ticket/specs/filter.spec.js +++ b/modules/ticket/back/methods/ticket/specs/filter.spec.js @@ -41,6 +41,34 @@ describe('ticket filter()', () => { const firstRow = result[0]; expect(result.length).toEqual(1); - expect(firstRow.ticketFk).toEqual(11); + expect(firstRow.id).toEqual(11); + }); + + it('should return the tickets with grouped state "Pending" and not "Ok"', async() => { + const ctx = {req: {accessToken: {userId: 9}}, args: {pending: true}}; + const filter = {}; + const result = await app.models.Ticket.filter(ctx, filter); + const firstRow = result[0]; + const secondRow = result[1]; + const thirdRow = result[2]; + + expect(result.length).toEqual(3); + expect(firstRow.state).toEqual('Arreglar'); + expect(secondRow.state).toEqual('Arreglar'); + expect(thirdRow.state).toEqual('Arreglar'); + }); + + it('should return the tickets that are not pending', async() => { + const ctx = {req: {accessToken: {userId: 9}}, args: {pending: false}}; + const filter = {}; + const result = await app.models.Ticket.filter(ctx, filter); + const firstRow = result[0]; + const secondRow = result[1]; + const thirdRow = result[2]; + + expect(result.length).toEqual(13); + expect(firstRow.state).toEqual('Entregado'); + expect(secondRow.state).toEqual('Entregado'); + expect(thirdRow.state).toEqual('Entregado'); }); }); diff --git a/modules/ticket/front/search-panel/index.html b/modules/ticket/front/search-panel/index.html index ae5e152c69..e2d831994a 100644 --- a/modules/ticket/front/search-panel/index.html +++ b/modules/ticket/front/search-panel/index.html @@ -113,10 +113,16 @@ + + diff --git a/modules/ticket/front/search-panel/locale/es.yml b/modules/ticket/front/search-panel/locale/es.yml index 0fcfdaa589..2f303ff2db 100644 --- a/modules/ticket/front/search-panel/locale/es.yml +++ b/modules/ticket/front/search-panel/locale/es.yml @@ -10,4 +10,6 @@ Province: Provincia My team: Mi equipo Order id: Id pedido Grouped States: Estado agrupado -Days onward: Días adelante \ No newline at end of file +Days onward: Días adelante +With problems: Con problemas +Pending: Pendientes \ No newline at end of file From 4cbd1b63dc90ceaaa67403264469755e0d625b33 Mon Sep 17 00:00:00 2001 From: Carlos Jimenez Ruiz Date: Mon, 2 Mar 2020 13:16:46 +0100 Subject: [PATCH 4/9] entry descriptor path --- e2e/helpers/selectors.js | 6 +++ e2e/paths/12-entry/02_descriptor.spec.js | 61 ++++++++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 e2e/paths/12-entry/02_descriptor.spec.js diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js index 4480759f40..3b7b0d1a53 100644 --- a/e2e/helpers/selectors.js +++ b/e2e/helpers/selectors.js @@ -9,6 +9,7 @@ export default { invoiceOutButton: '.modules-menu > li[ui-sref="invoiceOut.index"]', claimsButton: '.modules-menu > li[ui-sref="claim.index"]', returnToModuleIndexButton: 'a[ui-sref="order.index"]', + homeButton: 'vn-topbar > div.side.start > a', userMenuButton: '#user', userLocalWarehouse: '.user-popover vn-autocomplete[ng-model="$ctrl.localWarehouseFk"]', userLocalBank: '.user-popover vn-autocomplete[ng-model="$ctrl.localBankFk"]', @@ -806,5 +807,10 @@ export default { header: 'vn-entry-summary > vn-card > h5', reference: 'vn-entry-summary vn-label-value[label="Reference"]', confirmed: 'vn-entry-summary vn-check[label="Confirmed"]', + }, + entryDescriptor: { + agency: 'vn-entry-descriptor div.body vn-label-value:nth-child(3) span', + travelsQuicklink: 'vn-entry-descriptor vn-quick-links > a:nth-child(1)', + entriesQuicklink: 'vn-entry-descriptor vn-quick-links > a:nth-child(2)' } }; diff --git a/e2e/paths/12-entry/02_descriptor.spec.js b/e2e/paths/12-entry/02_descriptor.spec.js new file mode 100644 index 0000000000..8fa0d2a4fe --- /dev/null +++ b/e2e/paths/12-entry/02_descriptor.spec.js @@ -0,0 +1,61 @@ +import selectors from '../../helpers/selectors.js'; +import getBrowser from '../../helpers/puppeteer'; + +describe('Entry descriptor path', () => { + let browser; + let page; + + beforeAll(async() => { + browser = await getBrowser(); + page = browser.page; + await page.loginAndModule('buyer', 'entry'); + await page.accessToSearchResult('2'); + }); + + afterAll(async() => { + await browser.close(); + }); + + it('should reach the second entry summary section', async() => { + let url = await page.expectURL('#!/entry/2/summary'); + + expect(url).toBe(true); + }); + + it('should show some entry information', async() => { + const result = await page.waitToGetProperty(selectors.entryDescriptor.agency, 'innerText'); + + expect(result).toContain('inhouse pickup'); + }); + + it('should click the travels button to be redirected to the travels index filtered by the current agency', async() => { + await page.waitToClick(selectors.entryDescriptor.travelsQuicklink); + const url = await page.expectURL('/travel/index'); + const filter = await page.expectURL('agencyFk'); + + expect(url).toBe(true); + expect(filter).toBe(true); + }); + + it('should go back to the entry summary', async() => { + await page.waitToClick(selectors.globalItems.homeButton); + await page.selectModule('entry'); + await page.accessToSearchResult('2'); + let url = await page.expectURL('#!/entry/2/summary'); + + expect(url).toBe(true); + }); + + it('should click the entries button to be redirected to the entries index filtered by the current supplier', async() => { + await page.waitToClick(selectors.entryDescriptor.entriesQuicklink); + const url = await page.expectURL('/entry/index'); + const supplierFilter = await page.expectURL('supplierFk'); + const toFilter = await page.expectURL('to'); + const fromFilter = await page.expectURL('from'); + + expect(url).toBe(true); + expect(supplierFilter).toBe(true); + expect(toFilter).toBe(true); + expect(fromFilter).toBe(true); + }); +}); From c21594db4e6de50cdc7afc2e62a6a592f0784764 Mon Sep 17 00:00:00 2001 From: Carlos Jimenez Ruiz Date: Mon, 2 Mar 2020 15:37:17 +0100 Subject: [PATCH 5/9] worker summary path --- e2e/helpers/selectors.js | 11 +++ e2e/paths/03-worker/01_summary.spec.js | 71 +++++++++++++++++++ ...basicData.spec.js => 02_basicData.spec.js} | 0 ...ontrol.spec.js => 04_time_control.spec.js} | 0 4 files changed, 82 insertions(+) create mode 100644 e2e/paths/03-worker/01_summary.spec.js rename e2e/paths/03-worker/{01_basicData.spec.js => 02_basicData.spec.js} (100%) rename e2e/paths/03-worker/{02_time_control.spec.js => 04_time_control.spec.js} (100%) diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js index 44bd87da9b..ebb9bfa895 100644 --- a/e2e/helpers/selectors.js +++ b/e2e/helpers/selectors.js @@ -700,6 +700,17 @@ export default { firstTicketDeleteButton: 'vn-route-tickets vn-tr:nth-child(1) vn-icon[icon="delete"]', confirmButton: '.vn-confirm.shown button[response="accept"]' }, + workerSummary: { + header: 'vn-worker-summary h5', + id: 'vn-worker-summary vn-one:nth-child(1) > vn-label-value:nth-child(2) > section > span', + email: 'vn-worker-summary vn-one:nth-child(1) > vn-label-value:nth-child(3) > section > span', + department: 'vn-worker-summary vn-one:nth-child(1) > vn-label-value:nth-child(4) > section > span', + userId: 'vn-worker-summary vn-one:nth-child(2) > vn-label-value:nth-child(2) > section > span', + userName: 'vn-worker-summary vn-one:nth-child(2) > vn-label-value:nth-child(3) > section > span', + role: 'vn-worker-summary vn-one:nth-child(2) > vn-label-value:nth-child(4) > section > span', + extension: 'vn-worker-summary vn-one:nth-child(2) > vn-label-value:nth-child(5) > section > span', + + }, workerBasicData: { name: 'vn-worker-basic-data vn-textfield[ng-model="$ctrl.worker.firstName"]', surname: 'vn-worker-basic-data vn-textfield[ng-model="$ctrl.worker.lastName"]', diff --git a/e2e/paths/03-worker/01_summary.spec.js b/e2e/paths/03-worker/01_summary.spec.js new file mode 100644 index 0000000000..86a95eee38 --- /dev/null +++ b/e2e/paths/03-worker/01_summary.spec.js @@ -0,0 +1,71 @@ +import selectors from '../../helpers/selectors.js'; +import getBrowser from '../../helpers/puppeteer'; + +describe('Worker summary path', () => { + let browser; + let page; + beforeAll(async() => { + browser = await getBrowser(); + page = browser.page; + await page.loginAndModule('employee', 'worker'); + await page.accessToSearchResult('agencyNick'); + }); + + afterAll(async() => { + await browser.close(); + }); + + it('should reach the employee summary section', async() => { + const url = await page.expectURL('#!/worker/3/summary'); + + expect(url).toBe(true); + }); + + it('should check the summary contains the name and userName on the header', async() => { + const result = await page.waitToGetProperty(selectors.workerSummary.header, 'innerText'); + + expect(result).toEqual('agency agency'); + }); + + it('should check the summary contains the basic data id', async() => { + const result = await page.waitToGetProperty(selectors.workerSummary.id, 'innerText'); + + expect(result).toEqual('3'); + }); + + it('should check the summary contains the basic data email', async() => { + const result = await page.waitToGetProperty(selectors.workerSummary.email, 'innerText'); + + expect(result).toEqual('agency@verdnatura.es'); + }); + + it('should check the summary contains the basic data department', async() => { + const result = await page.waitToGetProperty(selectors.workerSummary.department, 'innerText'); + + expect(result).toEqual('CAMARA'); + }); + + it('should check the summary contains the user data id', async() => { + const result = await page.waitToGetProperty(selectors.workerSummary.userId, 'innerText'); + + expect(result).toEqual('3'); + }); + + it('should check the summary contains the user data name', async() => { + const result = await page.waitToGetProperty(selectors.workerSummary.userName, 'innerText'); + + expect(result).toEqual('agency'); + }); + + it('should check the summary contains the user data role', async() => { + const result = await page.waitToGetProperty(selectors.workerSummary.role, 'innerText'); + + expect(result).toEqual('agency'); + }); + + it('should check the summary contains the user data extension', async() => { + const result = await page.waitToGetProperty(selectors.workerSummary.extension, 'innerText'); + + expect(result).toEqual('1101'); + }); +}); diff --git a/e2e/paths/03-worker/01_basicData.spec.js b/e2e/paths/03-worker/02_basicData.spec.js similarity index 100% rename from e2e/paths/03-worker/01_basicData.spec.js rename to e2e/paths/03-worker/02_basicData.spec.js diff --git a/e2e/paths/03-worker/02_time_control.spec.js b/e2e/paths/03-worker/04_time_control.spec.js similarity index 100% rename from e2e/paths/03-worker/02_time_control.spec.js rename to e2e/paths/03-worker/04_time_control.spec.js From 9e7f111b5ddbe6de2abf43de48b1cb4b435c0a16 Mon Sep 17 00:00:00 2001 From: Carlos Jimenez Ruiz Date: Mon, 2 Mar 2020 16:40:30 +0100 Subject: [PATCH 6/9] worker summary --- e2e/paths/10-travel/02_basic_data_and_log.spec.js | 1 + 1 file changed, 1 insertion(+) diff --git a/e2e/paths/10-travel/02_basic_data_and_log.spec.js b/e2e/paths/10-travel/02_basic_data_and_log.spec.js index 20e0c0ac50..2b3395e857 100644 --- a/e2e/paths/10-travel/02_basic_data_and_log.spec.js +++ b/e2e/paths/10-travel/02_basic_data_and_log.spec.js @@ -42,6 +42,7 @@ describe('Travel basic data path', () => { it('should now edit the whole form then save', async() => { await page.clearInput(selectors.travelBasicDada.reference); await page.write(selectors.travelBasicDada.reference, 'new reference!'); + await page.waitForContentLoaded(); // this test fails some times to autocomplete the agency underneath await page.autocompleteSearch(selectors.travelBasicDada.agency, 'Entanglement'); await page.autocompleteSearch(selectors.travelBasicDada.outputWarehouse, 'Warehouse Three'); await page.autocompleteSearch(selectors.travelBasicDada.inputWarehouse, 'Warehouse Four'); From 4c1443192817de74b18c9e5e906c91739a28459f Mon Sep 17 00:00:00 2001 From: Carlos Jimenez Ruiz Date: Tue, 3 Mar 2020 10:26:16 +0100 Subject: [PATCH 7/9] order summary e2e path --- e2e/helpers/selectors.js | 10 +++ e2e/paths/07-order/01_summary.spec.js | 65 +++++++++++++++++++ ...sic_data.spec.js => 02_basic_data.spec.js} | 0 ...{02_catalog.spec.js => 04_catalog.spec.js} | 0 4 files changed, 75 insertions(+) create mode 100644 e2e/paths/07-order/01_summary.spec.js rename e2e/paths/07-order/{01_edit_basic_data.spec.js => 02_basic_data.spec.js} (100%) rename e2e/paths/07-order/{02_catalog.spec.js => 04_catalog.spec.js} (100%) diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js index 107cd1a033..cd587c8736 100644 --- a/e2e/helpers/selectors.js +++ b/e2e/helpers/selectors.js @@ -631,6 +631,16 @@ export default { createButton: 'button[type=submit]', cancelButton: 'vn-button[href="#!/client/index"]' }, + orderSummary: { + header: 'vn-order-summary h5', + id: 'vn-order-summary vn-one:nth-child(1) > vn-label-value:nth-child(1) span', + alias: 'vn-order-summary vn-one:nth-child(1) > vn-label-value:nth-child(2) span', + consignee: 'vn-order-summary vn-one:nth-child(2) > vn-label-value:nth-child(3) span', + subtotal: 'vn-order-summary vn-one.taxes > p:nth-child(1)', + vat: 'vn-order-summary vn-one.taxes > p:nth-child(2)', + total: 'vn-order-summary vn-one.taxes > p:nth-child(3)', + sale: 'vn-order-summary vn-tbody > vn-tr', + }, orderCatalog: { plantRealmButton: 'vn-order-catalog > vn-side-menu vn-icon[icon="icon-plant"]', type: 'vn-autocomplete[data="$ctrl.itemTypes"]', diff --git a/e2e/paths/07-order/01_summary.spec.js b/e2e/paths/07-order/01_summary.spec.js new file mode 100644 index 0000000000..cba56bf709 --- /dev/null +++ b/e2e/paths/07-order/01_summary.spec.js @@ -0,0 +1,65 @@ +import selectors from '../../helpers/selectors.js'; +import getBrowser from '../../helpers/puppeteer'; + +describe('Order summary path', () => { + let browser; + let page; + beforeAll(async() => { + browser = await getBrowser(); + page = browser.page; + await page.loginAndModule('employee', 'order'); + await page.accessToSearchResult('16'); + }); + + afterAll(async() => { + await browser.close(); + }); + + it('should reach the order summary section', async() => { + const url = await page.expectURL('#!/order/16/summary'); + + expect(url).toBe(true); + }); + + it('should check the summary contains the order id', async() => { + const result = await page.waitToGetProperty(selectors.orderSummary.id, 'innerText'); + + expect(result).toEqual('16'); + }); + + it('should check the summary contains the order alias', async() => { + const result = await page.waitToGetProperty(selectors.orderSummary.alias, 'innerText'); + + expect(result).toEqual('address 26'); + }); + + it('should check the summary contains the order consignee', async() => { + const result = await page.waitToGetProperty(selectors.orderSummary.consignee, 'innerText'); + + expect(result).toEqual('Many places - Silla (Province one)'); + }); + + it('should check the summary contains the order subtotal', async() => { + const result = await page.waitToGetProperty(selectors.orderSummary.subtotal, 'innerText'); + + expect(result.length).toBeGreaterThan(1); + }); + + it('should check the summary contains the order vat', async() => { + const result = await page.waitToGetProperty(selectors.orderSummary.vat, 'innerText'); + + expect(result.length).toBeGreaterThan(1); + }); + + it('should check the summary contains the order total', async() => { + const result = await page.waitToGetProperty(selectors.orderSummary.total, 'innerText'); + + expect(result.length).toBeGreaterThan(1); + }); + + it('should check the summary contains the order sales', async() => { + const result = await page.countElement(selectors.orderSummary.sale); + + expect(result).toBeGreaterThan(0); + }); +}); diff --git a/e2e/paths/07-order/01_edit_basic_data.spec.js b/e2e/paths/07-order/02_basic_data.spec.js similarity index 100% rename from e2e/paths/07-order/01_edit_basic_data.spec.js rename to e2e/paths/07-order/02_basic_data.spec.js diff --git a/e2e/paths/07-order/02_catalog.spec.js b/e2e/paths/07-order/04_catalog.spec.js similarity index 100% rename from e2e/paths/07-order/02_catalog.spec.js rename to e2e/paths/07-order/04_catalog.spec.js From 758f9c554cc35d9f4ec68935b4f6ff6d40e615f0 Mon Sep 17 00:00:00 2001 From: Carlos Jimenez Ruiz Date: Tue, 3 Mar 2020 12:03:06 +0100 Subject: [PATCH 8/9] increased wait time for autocomplete --- e2e/paths/10-travel/02_basic_data_and_log.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/paths/10-travel/02_basic_data_and_log.spec.js b/e2e/paths/10-travel/02_basic_data_and_log.spec.js index 2b3395e857..a835df2a2b 100644 --- a/e2e/paths/10-travel/02_basic_data_and_log.spec.js +++ b/e2e/paths/10-travel/02_basic_data_and_log.spec.js @@ -42,7 +42,7 @@ describe('Travel basic data path', () => { it('should now edit the whole form then save', async() => { await page.clearInput(selectors.travelBasicDada.reference); await page.write(selectors.travelBasicDada.reference, 'new reference!'); - await page.waitForContentLoaded(); // this test fails some times to autocomplete the agency underneath + await page.waitFor(2000); await page.autocompleteSearch(selectors.travelBasicDada.agency, 'Entanglement'); await page.autocompleteSearch(selectors.travelBasicDada.outputWarehouse, 'Warehouse Three'); await page.autocompleteSearch(selectors.travelBasicDada.inputWarehouse, 'Warehouse Four'); From b736303610b852186c220295badf4340eb8b4ac1 Mon Sep 17 00:00:00 2001 From: Joan Sanchez Date: Tue, 3 Mar 2020 13:22:36 +0100 Subject: [PATCH 9/9] 2144 - Prevent page break on data tables --- print/common/css/layout.css | 21 +++- print/common/css/misc.css | 3 +- .../campaign-metrics/campaign-metrics.html | 56 +++++----- .../claim-pickup-order.html | 4 +- .../reports/delivery-note/delivery-note.html | 103 +++++++++--------- .../reports/driver-route/driver-route.html | 8 +- .../reports/entry-order/entry-order.html | 66 ++++++----- .../reports/letter-debtor/letter-debtor.html | 6 +- .../reports/letter-debtor/locale/es.yml | 2 +- 9 files changed, 143 insertions(+), 126 deletions(-) diff --git a/print/common/css/layout.css b/print/common/css/layout.css index 6be065a143..b85589a816 100644 --- a/print/common/css/layout.css +++ b/print/common/css/layout.css @@ -157,6 +157,22 @@ table { border-spacing: 0; } +/** + * Prevent page break fix + */ +tbody { + page-break-inside: avoid; + break-inside: avoid; + display: block; + width: 100% +} + +thead, tbody tr { + table-layout: fixed; + display: table; + width: 100%; +} + .row-oriented, .column-oriented { text-align: left; width: 100% @@ -181,6 +197,10 @@ table { background-color: #e5e5e5 } +.column-oriented tbody { + border-bottom: 1px solid #DDD; +} + .column-oriented tfoot { border-top: 2px solid #808080; } @@ -190,7 +210,6 @@ table { } .column-oriented .description { - border-bottom: 1px solid #DDD; font-size: 0.8em } diff --git a/print/common/css/misc.css b/print/common/css/misc.css index 093d5a974e..09d7706b32 100644 --- a/print/common/css/misc.css +++ b/print/common/css/misc.css @@ -42,6 +42,7 @@ font-weight: bold } -.non-page-break { +.no-page-break { page-break-inside: avoid; + break-inside: avoid } \ No newline at end of file diff --git a/print/templates/reports/campaign-metrics/campaign-metrics.html b/print/templates/reports/campaign-metrics/campaign-metrics.html index 7a0f30948f..ee1908164c 100644 --- a/print/templates/reports/campaign-metrics/campaign-metrics.html +++ b/print/templates/reports/campaign-metrics/campaign-metrics.html @@ -59,37 +59,35 @@ {{$t('Code')}} {{$t('Quantity')}} - {{$t('Concept')}} + {{$t('Concept')}} - - + + + {{sale.itemFk}} + {{Math.trunc(sale.subtotal)}} + {{sale.concept}} + + + +
+ {{sale.tag5}} + {{sale.value5}} +
+ + +
+ {{sale.tag6}} + {{sale.value6}} +
+ + +
+ {{sale.tag7}} + {{sale.value7}} +
+ + diff --git a/print/templates/reports/claim-pickup-order/claim-pickup-order.html b/print/templates/reports/claim-pickup-order/claim-pickup-order.html index 9c6b0fa4e1..c5e2d05f30 100644 --- a/print/templates/reports/claim-pickup-order/claim-pickup-order.html +++ b/print/templates/reports/claim-pickup-order/claim-pickup-order.html @@ -64,8 +64,8 @@ {{$t('concept')}} - - + + {{sale.id}} {{sale.quantity}} {{sale.claimQuantity}} diff --git a/print/templates/reports/delivery-note/delivery-note.html b/print/templates/reports/delivery-note/delivery-note.html index 77f214c07b..719397c085 100644 --- a/print/templates/reports/delivery-note/delivery-note.html +++ b/print/templates/reports/delivery-note/delivery-note.html @@ -76,53 +76,48 @@ {{$t('reference')}} {{$t('quantity')}} - {{$t('concept')}} + {{$t('concept')}} {{$t('price')}} {{$t('discount')}} {{$t('vat')}} {{$t('amount')}} - - - - + + + {{sale.itemFk}} + {{sale.quantity}} + {{sale.concept}} + {{sale.price | currency('EUR', locale)}} + {{(sale.discount / 100) | percentage}} + {{sale.vatType}} + {{sale.price * sale.quantity * (1 - sale.discount / 100) | currency('EUR', locale)}} + + + +
+ {{sale.tag5}} + {{sale.value5}} +
+ + +
+ {{sale.tag6}} + {{sale.value6}} +
+ + +
+ {{sale.tag7}} + {{sale.value7}} +
+ + + + + {{sale.ediBotanic}} {{sale.denomination}} {{sale.countryCode}}-{{sale.passportNumber}} + ZP + @@ -138,7 +133,7 @@
-
+

{{$t('services')}}

@@ -168,29 +163,35 @@ -
+

{{$t('taxBreakdown')}}

- - + + - - + + - - + + @@ -204,7 +205,7 @@ -
+

{{$t('packagings')}}

{{$t('type')}}{{$t('taxBase')}}{{$t('type')}} + {{$t('taxBase')}} + {{$t('tax')}} {{$t('fee')}}
{{tax.name}}{{tax.Base | currency('EUR', locale)}}{{tax.name}} + {{tax.Base | currency('EUR', locale)}} + {{tax.vatPercent | percentage}} {{tax.tax | currency('EUR', locale)}}
{{$t('subtotal')}}{{getTotalBase() | currency('EUR', locale)}}{{$t('subtotal')}} + {{getTotalBase() | currency('EUR', locale)}} + {{getTotalTax()| currency('EUR', locale)}}
@@ -226,7 +227,7 @@ -
+
{{$t('digitalSignature')}}
diff --git a/print/templates/reports/driver-route/driver-route.html b/print/templates/reports/driver-route/driver-route.html index 6d3b840dfb..ba9a339da0 100644 --- a/print/templates/reports/driver-route/driver-route.html +++ b/print/templates/reports/driver-route/driver-route.html @@ -84,14 +84,14 @@
-
+
- + @@ -100,7 +100,7 @@ - + - +
{{$t('order')}} {{$t('ticket')}}{{$t('client')}}{{$t('client')}} {{$t('address')}} {{$t('packages')}}
{{ticket.priority}} {{ticket.id}}{{ticket.clientFk}} {{ticket.addressName}}{{ticket.clientFk}} {{ticket.addressName}} {{ticket.addressFk.toString().substr(0, ticket.addressFk.toString().length - 3)}} @@ -141,7 +141,7 @@
{{$t('import')}}{{ticket.import}}{{ticket.import | currency('EUR', locale)}}
diff --git a/print/templates/reports/entry-order/entry-order.html b/print/templates/reports/entry-order/entry-order.html index cbb0de0d5c..094936fd07 100644 --- a/print/templates/reports/entry-order/entry-order.html +++ b/print/templates/reports/entry-order/entry-order.html @@ -63,45 +63,43 @@ - + - + - - + + + + + + + + + + + + + + @@ -115,7 +113,7 @@
-
+

{{$t('notes')}}

diff --git a/print/templates/reports/letter-debtor/letter-debtor.html b/print/templates/reports/letter-debtor/letter-debtor.html index 93e59bba12..534798f5e4 100644 --- a/print/templates/reports/letter-debtor/letter-debtor.html +++ b/print/templates/reports/letter-debtor/letter-debtor.html @@ -25,7 +25,7 @@
- + @@ -61,8 +61,8 @@ - - + + diff --git a/print/templates/reports/letter-debtor/locale/es.yml b/print/templates/reports/letter-debtor/locale/es.yml index 09a31ee5bc..a9bd8c7968 100644 --- a/print/templates/reports/letter-debtor/locale/es.yml +++ b/print/templates/reports/letter-debtor/locale/es.yml @@ -2,7 +2,7 @@ title: Extracto claimId: Reclamación clientId: Cliente clientData: Datos del cliente -dated: Fecha +date: Fecha concept: Concepto invoiced: Facturado payed: Pagado
{{$t('boxes')}}{{$t('boxes')}} {{$t('packing')}}{{$t('concept')}}{{$t('concept')}} {{$t('quantity')}} {{$t('price')}} {{$t('amount')}}
{{buy.box}}{{buy.packing}}{{buy.itemName}}{{buy.quantity}}{{buy.buyingValue | currency('EUR', locale)}}{{buy.buyingValue * buy.quantity | currency('EUR', locale)}}
+
+ {{buy.tag5}} + {{buy.value5}} +
+
+
+ {{buy.tag6}} + {{buy.value6}} +
+
+
+ {{buy.tag7}} + {{buy.value7}} +
+
{{client.id}}
{{$t('dated')}}{{$t('date')}} {{dated}}
{{$t('balance')}}
{{sale.issued | date('%d-%m-%Y')}} {{sale.ref}} {{sale.debtOut}}