From 6c29a5ed671b07813bd4e0aca55304c73990af0a Mon Sep 17 00:00:00 2001 From: jtubau Date: Mon, 24 Feb 2025 12:07:22 +0100 Subject: [PATCH 1/5] fix: refs #8619 update route descriptor to handle empty ticket records and adjust test cases --- src/pages/Route/Card/RouteDescriptor.vue | 6 +- .../route/routeExtendedList.spec.js | 55 +++++++++---------- 2 files changed, 29 insertions(+), 32 deletions(-) diff --git a/src/pages/Route/Card/RouteDescriptor.vue b/src/pages/Route/Card/RouteDescriptor.vue index 503cd1941..28d042836 100644 --- a/src/pages/Route/Card/RouteDescriptor.vue +++ b/src/pages/Route/Card/RouteDescriptor.vue @@ -27,12 +27,14 @@ const getZone = async () => { const filter = { where: { routeFk: $props.id ? $props.id : route.params.id }, }; - const { data } = await axios.get('Tickets/findOne', { + const { data: [firstRecord] = [] } = await axios.get('Tickets/filter', { params: { filter: JSON.stringify(filter), }, }); - zoneId.value = data.zoneFk; + if (!firstRecord) return; + + zoneId.value = firstRecord.zoneFk; const { data: zoneData } = await axios.get(`Zones/${zoneId.value}`); zone.value = zoneData.name; }; diff --git a/test/cypress/integration/route/routeExtendedList.spec.js b/test/cypress/integration/route/routeExtendedList.spec.js index e3505ad60..96ff4528d 100644 --- a/test/cypress/integration/route/routeExtendedList.spec.js +++ b/test/cypress/integration/route/routeExtendedList.spec.js @@ -1,4 +1,4 @@ -describe.skip('Route extended list', () => { +describe('Route extended list', () => { const getSelector = (colField) => `tr:last-child > [data-col-field="${colField}"]`; const selectors = { @@ -32,18 +32,18 @@ describe.skip('Route extended list', () => { const originalFields = [ { selector: selectors.worker, type: 'select', value: 'logistic' }, - { selector: selectors.agency, type: 'select', value: 'Super-Man delivery' }, + { selector: selectors.agency, type: 'select', value: 'inhouse pickup' }, { selector: selectors.vehicle, type: 'select', value: '3333-IMK' }, - { selector: selectors.date, type: 'date', value: '01/02/2024' }, + { selector: selectors.date, type: 'date', value: '01/01/2001' }, { selector: selectors.description, type: 'input', value: 'Test route' }, { selector: selectors.served, type: 'checkbox', value: checkboxState.uncheck }, ]; const updateFields = [ { selector: selectors.worker, type: 'select', value: 'salesperson' }, - { selector: selectors.agency, type: 'select', value: 'inhouse pickup' }, + { selector: selectors.agency, type: 'select', value: 'Super-Man delivery' }, { selector: selectors.vehicle, type: 'select', value: '1111-IMK' }, - { selector: selectors.date, type: 'date', value: '01/01/2001' }, + { selector: selectors.date, type: 'date', value: '11/01/2001' }, { selector: selectors.description, type: 'input', value: 'Description updated' }, { selector: selectors.served, type: 'checkbox', value: checkboxState.check }, ]; @@ -57,11 +57,11 @@ describe.skip('Route extended list', () => { break; case 'input': cy.get(selector).should('be.visible').click(); - cy.dataCy('null_input').clear().type(`${value}{enter}`); + cy.dataCy('null_input').clear().type(`${value}`); break; case 'date': cy.get(selector).should('be.visible').click(); - cy.dataCy('null_inputDate').clear().type(`${value}{enter}`); + cy.dataCy('null_inputDate').clear().type(`${value}`); break; case 'checkbox': cy.get(selector).should('be.visible').click().click(); @@ -76,15 +76,6 @@ describe.skip('Route extended list', () => { cy.typeSearchbar('{enter}'); }); - after(() => { - cy.visit(url); - cy.typeSearchbar('{enter}'); - cy.get(selectors.lastRowSelectCheckBox).click(); - - cy.get(selectors.removeBtn).click(); - cy.dataCy(selectors.confirmBtn).click(); - }); - it('Should list routes', () => { cy.get('.q-table') .children() @@ -97,9 +88,9 @@ describe.skip('Route extended list', () => { const data = { Worker: { val: 'logistic', type: 'select' }, - Agency: { val: 'Super-Man delivery', type: 'select' }, + Agency: { val: 'inhouse pickup', type: 'select' }, Vehicle: { val: '3333-IMK', type: 'select' }, - Date: { val: '02-01-2024', type: 'date' }, + Date: { val: '01-01-2001', type: 'date' }, From: { val: '01-01-2024', type: 'date' }, To: { val: '10-01-2024', type: 'date' }, 'Km start': { val: 1000 }, @@ -129,7 +120,7 @@ describe.skip('Route extended list', () => { it('Should clone selected route', () => { cy.get(selectors.lastRowSelectCheckBox).click(); cy.get(selectors.cloneBtn).click(); - cy.dataCy('route.Starting date_inputDate').type('10-05-2001{enter}'); + cy.dataCy('route.Starting date_inputDate').type('10-05-2001').click(); cy.get('.q-card__actions > .q-btn--standard > .q-btn__content').click(); cy.validateContent(selectors.date, '05/10/2001'); }); @@ -143,9 +134,9 @@ describe.skip('Route extended list', () => { const fileName = 'download.zip'; cy.readFile(`${downloadsFolder}/${fileName}`).should('exist'); - cy.task('deleteFile', `${downloadsFolder}/${fileName}`).then((deleted) => { - expect(deleted).to.be.true; - }); + // cy.task('deleteFile', `${downloadsFolder}/${fileName}`).then((deleted) => { + // expect(deleted).to.be.true; + // }); }); it('Should mark as served the selected route', () => { @@ -165,6 +156,13 @@ describe.skip('Route extended list', () => { cy.checkNotification(dataSaved); }); + it('Should add ticket to route', () => { + cy.dataCy('tableAction-0').last().click(); + cy.get(selectors.firstTicketsRowSelectCheckBox).click(); + cy.get('.q-card__actions > .q-btn--standard > .q-btn__content').click(); + cy.checkNotification(dataSaved); + }); + it('Should save changes in route', () => { updateFields.forEach(({ selector, type, value }) => { fillField(selector, type, value); @@ -175,18 +173,15 @@ describe.skip('Route extended list', () => { cy.typeSearchbar('{enter}'); - updateFields.forEach(({ selector, value }) => { + updateFields.forEach(({ selector, value, type }) => { + if (type === 'date') { + const [month, day, year] = value.split('/'); + value = `${day}/${month}/${year}`; + } cy.validateContent(selector, value); }); }); - it('Should add ticket to route', () => { - cy.dataCy('tableAction-0').last().click(); - cy.get(selectors.firstTicketsRowSelectCheckBox).click(); - cy.get('.q-card__actions > .q-btn--standard > .q-btn__content').click(); - cy.checkNotification(dataSaved); - }); - it('Should open summary pop-up when click summuary icon', () => { cy.dataCy('tableAction-1').last().click(); cy.get('.summaryHeader > :nth-child(2').should('contain', updateFields[4].value); From 955d2dd5c43e1b0d30ecd477e0bd8bf314752cca Mon Sep 17 00:00:00 2001 From: jtubau Date: Wed, 26 Feb 2025 10:27:26 +0100 Subject: [PATCH 2/5] fix: refs #8619 handle empty ticket records in RouteDescriptor component --- src/pages/Route/Card/RouteDescriptor.vue | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/pages/Route/Card/RouteDescriptor.vue b/src/pages/Route/Card/RouteDescriptor.vue index 28d042836..b98d99724 100644 --- a/src/pages/Route/Card/RouteDescriptor.vue +++ b/src/pages/Route/Card/RouteDescriptor.vue @@ -27,12 +27,14 @@ const getZone = async () => { const filter = { where: { routeFk: $props.id ? $props.id : route.params.id }, }; - const { data: [firstRecord] = [] } = await axios.get('Tickets/filter', { + const { data } = await axios.get('Tickets/filter', { params: { filter: JSON.stringify(filter), }, }); - if (!firstRecord) return; + + if ( data.length == 0 ) return; + const firstRecord = data[0]; zoneId.value = firstRecord.zoneFk; const { data: zoneData } = await axios.get(`Zones/${zoneId.value}`); From b614cb2046d7e3de17497f8ffdf5cc44f7c61894 Mon Sep 17 00:00:00 2001 From: jtubau Date: Thu, 27 Feb 2025 11:53:49 +0100 Subject: [PATCH 3/5] refactor: refs #8619 simplify empty data check in RouteDescriptor component --- src/pages/Route/Card/RouteDescriptor.vue | 2 +- test/cypress/integration/route/routeExtendedList.spec.js | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/pages/Route/Card/RouteDescriptor.vue b/src/pages/Route/Card/RouteDescriptor.vue index b98d99724..01fb9c4ba 100644 --- a/src/pages/Route/Card/RouteDescriptor.vue +++ b/src/pages/Route/Card/RouteDescriptor.vue @@ -33,7 +33,7 @@ const getZone = async () => { }, }); - if ( data.length == 0 ) return; + if (!data.length) return; const firstRecord = data[0]; zoneId.value = firstRecord.zoneFk; diff --git a/test/cypress/integration/route/routeExtendedList.spec.js b/test/cypress/integration/route/routeExtendedList.spec.js index 96ff4528d..da35066c3 100644 --- a/test/cypress/integration/route/routeExtendedList.spec.js +++ b/test/cypress/integration/route/routeExtendedList.spec.js @@ -133,10 +133,6 @@ describe('Route extended list', () => { const fileName = 'download.zip'; cy.readFile(`${downloadsFolder}/${fileName}`).should('exist'); - - // cy.task('deleteFile', `${downloadsFolder}/${fileName}`).then((deleted) => { - // expect(deleted).to.be.true; - // }); }); it('Should mark as served the selected route', () => { From 145728996983400ee3c407d438832c600160cf89 Mon Sep 17 00:00:00 2001 From: alexm Date: Thu, 6 Mar 2025 11:34:43 +0100 Subject: [PATCH 4/5] feat: refs #6695 update Cypress parallel test execution to use 3 instances --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index dc5acc84e..bb608c93a 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -123,7 +123,7 @@ pipeline { sh "docker-compose ${env.COMPOSE_PARAMS} up -d" image.inside("--network ${env.COMPOSE_PROJECT}_default -e CI -e TZ") { - sh 'sh test/cypress/cypressParallel.sh 2' + sh 'sh test/cypress/cypressParallel.sh 3' } } } From a8a1fcea43580483d2ab82512dd5d01da365b091 Mon Sep 17 00:00:00 2001 From: alexm Date: Fri, 7 Mar 2025 08:06:58 +0100 Subject: [PATCH 5/5] test: fix orderList e2e, unestables --- .../integration/order/orderList.spec.js | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/test/cypress/integration/order/orderList.spec.js b/test/cypress/integration/order/orderList.spec.js index 649aa9ff8..8b8852a02 100644 --- a/test/cypress/integration/order/orderList.spec.js +++ b/test/cypress/integration/order/orderList.spec.js @@ -1,5 +1,9 @@ /// describe('OrderList', () => { + const clientCreateSelect = '#formModel [data-cy="Client_select"]'; + const addressCreateSelect = '#formModel [data-cy="Address_select"]'; + const agencyCreateSelect = '#formModel [data-cy="Agency_select"]'; + beforeEach(() => { cy.login('developer'); cy.viewport(1920, 1080); @@ -8,15 +12,14 @@ describe('OrderList', () => { it('create order', () => { cy.get('[data-cy="vnTableCreateBtn"]').click(); - cy.selectOption('[data-cy="Client_select"]', 1101); - cy.get('[data-cy="Address_select"]').click(); + cy.selectOption(clientCreateSelect, 1101); + cy.get(addressCreateSelect).click(); cy.get( '.q-menu > div> div.q-item:nth-child(1) >div.q-item__section--avatar > i', ).should('have.text', 'star'); - cy.get('.q-menu > div> .q-item:nth-child(1)').click(); cy.dataCy('landedDate').find('input').type('06/01/2001'); - cy.get('.q-card [data-cy="Agency_select"]').click(); - cy.get('.q-menu > div> .q-item:nth-child(1)').click(); + cy.selectOption(agencyCreateSelect, 1); + cy.intercept('GET', /\/api\/Orders\/\d/).as('orderSale'); cy.get('[data-cy="FormModelPopup_save"] > .q-btn__content > .block').click(); cy.wait('@orderSale'); @@ -31,7 +34,7 @@ describe('OrderList', () => { cy.dataCy('Customer ID_input').type('1101{enter}'); cy.dataCy('vnTableCreateBtn').click(); cy.dataCy('landedDate').find('input').type('06/01/2001'); - cy.get('.q-card [data-cy="Agency_select"]').click(); + cy.get(agencyCreateSelect).click(); cy.get('.q-menu > div> .q-item:nth-child(1)').click(); cy.intercept('GET', /\/api\/Orders\/\d/).as('orderSale'); cy.get('[data-cy="FormModelPopup_save"] > .q-btn__content > .block').click(); @@ -53,10 +56,11 @@ describe('OrderList', () => { `[href="#/order/list?createForm={%22clientFk%22:${clientId},%22addressId%22:1}"] > .q-btn__content > .q-icon`, ).click(); cy.dataCy('vnTableCreateBtn').click(); - cy.get('[data-cy="Client_select"]').should('have.value', 'Bruce Wayne'); - cy.get('[data-cy="Address_select"]').should('have.value', 'Bruce Wayne'); + + cy.get(clientCreateSelect).should('have.value', 'Bruce Wayne'); + cy.get(addressCreateSelect).should('have.value', 'Bruce Wayne'); cy.dataCy('landedDate').find('input').type('06/01/2001'); - cy.get('.q-card [data-cy="Agency_select"]').click(); + cy.get(agencyCreateSelect).click(); cy.get('.q-menu > div> .q-item:nth-child(1)').click(); cy.intercept('GET', /\/api\/Orders\/\d/).as('orderSale'); cy.get('[data-cy="FormModelPopup_save"] > .q-btn__content > .block').click();