From 9a0211787a922e8733095ff5f390778ee04e6c64 Mon Sep 17 00:00:00 2001 From: jtubau Date: Fri, 11 Apr 2025 09:01:47 +0200 Subject: [PATCH] refactor: refs #8422 implement checkRedirectionFromPopup command and refactor tests for improved readability --- src/components/common/VnDms.vue | 2 +- src/components/common/VnDmsList.vue | 2 +- .../Vehicle/Card/VehicleDmsImportForm.vue | 2 +- src/pages/Ticket/Card/TicketDmsImportForm.vue | 2 +- .../integration/route/routeAutonomous.spec.js | 167 +++++++----------- .../route/vehicle/vehicleDms.spec.js | 31 +++- test/cypress/support/commands.js | 19 ++ 7 files changed, 110 insertions(+), 115 deletions(-) diff --git a/src/components/common/VnDms.vue b/src/components/common/VnDms.vue index f5391c041..e26490933 100644 --- a/src/components/common/VnDms.vue +++ b/src/components/common/VnDms.vue @@ -93,7 +93,7 @@ async function save() { delete dms.value.files; return response; } catch (e) { - throw new Error(e.message); + throw e; } } diff --git a/src/components/common/VnDmsList.vue b/src/components/common/VnDmsList.vue index 05d837032..a5834d067 100644 --- a/src/components/common/VnDmsList.vue +++ b/src/components/common/VnDmsList.vue @@ -267,7 +267,7 @@ function deleteDms(dmsFk) { rows.value.splice(index, 1); notify(t('globals.dataDeleted'), 'positive'); } catch (e) { - throw new Error(e.message); + throw e; } }); } diff --git a/src/pages/Route/Vehicle/Card/VehicleDmsImportForm.vue b/src/pages/Route/Vehicle/Card/VehicleDmsImportForm.vue index 2be7f01e0..28c0aa45e 100644 --- a/src/pages/Route/Vehicle/Card/VehicleDmsImportForm.vue +++ b/src/pages/Route/Vehicle/Card/VehicleDmsImportForm.vue @@ -33,7 +33,7 @@ const importDms = async () => { dmsId.value = null; emit('onDataSaved'); } catch (e) { - throw new Error(e.message); + throw e; } }; diff --git a/src/pages/Ticket/Card/TicketDmsImportForm.vue b/src/pages/Ticket/Card/TicketDmsImportForm.vue index 4ced5b681..04cb3d75e 100644 --- a/src/pages/Ticket/Card/TicketDmsImportForm.vue +++ b/src/pages/Ticket/Card/TicketDmsImportForm.vue @@ -34,7 +34,7 @@ const importDms = async () => { dmsId.value = null; emit('onDataSaved'); } catch (e) { - throw new Error(e.message); + throw e; } }; diff --git a/test/cypress/integration/route/routeAutonomous.spec.js b/test/cypress/integration/route/routeAutonomous.spec.js index 4bf9178d5..f7abb50a5 100644 --- a/test/cypress/integration/route/routeAutonomous.spec.js +++ b/test/cypress/integration/route/routeAutonomous.spec.js @@ -73,139 +73,102 @@ describe('RouteAutonomous', () => { }); it('Should redirect to the summary when clicking a route', () => { - cy.get(selectors.routeId) - .click() - .invoke('text') - .then((routeId) => { - routeId = routeId.trim(); - cy.url().should('match', urls.summaryRouteUrlRegex); - cy.containContent(selectors.descriptorRouteSubtitle, routeId); - }); + cy.checkRedirectionFromPopUp({ + selectorToClick: selectors.routeId, + expectedUrlRegex: urls.summaryRouteUrlRegex, + expectedTextSelector: selectors.descriptorRouteSubtitle, + }); }); describe('Agency route pop-ups', () => { it('Should redirect to the agency route summary from the agency route descriptor pop-up', () => { - cy.get(selectors.agencyRoute) - .click() - .invoke('text') - .then((agencyName) => { - agencyName = agencyName.trim(); - cy.get(selectors.descriptorGoToSummaryBtn).click(); - cy.url().should('match', urls.summaryAgencyUrlRegex); - cy.containContent( - selectors.descriptorAgencyAndSupplierTitle, - agencyName, - ); - }); + cy.checkRedirectionFromPopUp({ + selectorToClick: selectors.agencyRoute, + steps: [selectors.descriptorGoToSummaryBtn], + expectedUrlRegex: urls.summaryAgencyUrlRegex, + expectedTextSelector: selectors.descriptorAgencyAndSupplierTitle, + }); }); it('Should redirect to the agency route summary from summary pop-up from the agency route descriptor pop-up', () => { - cy.get(selectors.agencyRoute) - .click() - .invoke('text') - .then((agencyName) => { - agencyName = agencyName.trim(); - cy.get(selectors.descriptorOpenSummaryBtn).click(); - cy.get(selectors.summaryGoToSummaryBtn).click(); - cy.url().should('match', urls.summaryAgencyUrlRegex); - cy.containContent( - selectors.descriptorAgencyAndSupplierTitle, - agencyName, - ); - }); + cy.checkRedirectionFromPopUp({ + selectorToClick: selectors.agencyRoute, + steps: [ + selectors.descriptorOpenSummaryBtn, + selectors.summaryGoToSummaryBtn, + ], + expectedUrlRegex: urls.summaryAgencyUrlRegex, + expectedTextSelector: selectors.descriptorAgencyAndSupplierTitle, + }); }); }); describe('Agency route pop-ups', () => { it('Should redirect to the agency agreement summary from the agency agreement descriptor pop-up', () => { - cy.get(selectors.agencyAgreement) - .click() - .invoke('text') - .then((agencyName) => { - agencyName = agencyName.trim(); - cy.get(selectors.descriptorGoToSummaryBtn).click(); - cy.url().should('match', urls.summaryAgencyUrlRegex); - cy.containContent( - selectors.descriptorAgencyAndSupplierTitle, - agencyName, - ); - }); + cy.checkRedirectionFromPopUp({ + selectorToClick: selectors.agencyAgreement, + steps: [selectors.descriptorGoToSummaryBtn], + expectedUrlRegex: urls.summaryAgencyUrlRegex, + expectedTextSelector: selectors.descriptorAgencyAndSupplierTitle, + }); }); it('Should redirect to the agency agreement summary from summary pop-up from the agency agreement descriptor pop-up', () => { - cy.get(selectors.agencyAgreement) - .click() - .invoke('text') - .then((agencyName) => { - agencyName = agencyName.trim(); - cy.get(selectors.descriptorOpenSummaryBtn).click(); - cy.get(selectors.summaryGoToSummaryBtn).click(); - cy.url().should('match', urls.summaryAgencyUrlRegex); - cy.containContent( - selectors.descriptorAgencyAndSupplierTitle, - agencyName, - ); - }); + cy.checkRedirectionFromPopUp({ + selectorToClick: selectors.agencyAgreement, + steps: [ + selectors.descriptorOpenSummaryBtn, + selectors.summaryGoToSummaryBtn, + ], + expectedUrlRegex: urls.summaryAgencyUrlRegex, + expectedTextSelector: selectors.descriptorAgencyAndSupplierTitle, + }); }); }); describe('Received pop-ups', () => { it('Should redirect to the invoice in summary from the received descriptor pop-up', () => { - cy.get(selectors.received) - .click() - .invoke('text') - .then((invoice) => { - invoice = invoice.trim(); - cy.get(selectors.descriptorGoToSummaryBtn).click(); - cy.url().should('match', urls.summaryInvoiceInUrlRegex); - cy.containContent(selectors.descriptorInvoiceInTitle, invoice); - }); + cy.checkRedirectionFromPopUp({ + selectorToClick: selectors.received, + steps: [selectors.descriptorGoToSummaryBtn], + expectedUrlRegex: urls.summaryInvoiceInUrlRegex, + expectedTextSelector: selectors.descriptorInvoiceInTitle, + }); }); it('Should redirect to the invoiceIn summary from summary pop-up from the received descriptor pop-up', () => { - cy.get(selectors.received) - .click() - .invoke('text') - .then((invoice) => { - invoice = invoice.trim(); - cy.get(selectors.descriptorOpenSummaryBtn).click(); - cy.get(selectors.summaryGoToSummaryBtn).click(); - cy.url().should('match', urls.summaryInvoiceInUrlRegex); - cy.containContent(selectors.descriptorInvoiceInTitle, invoice); - }); + cy.checkRedirectionFromPopUp({ + selectorToClick: selectors.received, + steps: [ + selectors.descriptorOpenSummaryBtn, + selectors.summaryGoToSummaryBtn, + ], + expectedUrlRegex: urls.summaryInvoiceInUrlRegex, + expectedTextSelector: selectors.descriptorInvoiceInTitle, + }); }); }); describe('Autonomous pop-ups', () => { it('Should redirect to the supplier summary from the received descriptor pop-up', () => { - cy.get(selectors.autonomous) - .click() - .invoke('text') - .then((supplier) => { - supplier = supplier.trim(); - cy.get(selectors.descriptorGoToSummaryBtn).click(); - cy.url().should('match', urls.summarySupplierUrlRegex); - cy.containContent( - selectors.descriptorAgencyAndSupplierTitle, - supplier, - ); - }); + cy.checkRedirectionFromPopUp({ + selectorToClick: selectors.autonomous, + steps: [selectors.descriptorGoToSummaryBtn], + expectedUrlRegex: urls.summarySupplierUrlRegex, + expectedTextSelector: selectors.descriptorAgencyAndSupplierTitle, + }); }); it('Should redirect to the supplier summary from summary pop-up from the autonomous descriptor pop-up', () => { - cy.get(selectors.autonomous) - .click() - .invoke('text') - .then((supplier) => { - supplier = supplier.trim(); - cy.get(selectors.descriptorOpenSummaryBtn).click(); - cy.get(selectors.summaryGoToSummaryBtn).click(); - cy.url().should('match', urls.summarySupplierUrlRegex); - cy.containContent( - selectors.descriptorAgencyAndSupplierTitle, - supplier, - ); - }); + cy.checkRedirectionFromPopUp({ + selectorToClick: selectors.autonomous, + steps: [ + selectors.descriptorOpenSummaryBtn, + selectors.summaryGoToSummaryBtn, + ], + expectedUrlRegex: urls.summarySupplierUrlRegex, + expectedTextSelector: selectors.descriptorAgencyAndSupplierTitle, + }); }); }); diff --git a/test/cypress/integration/route/vehicle/vehicleDms.spec.js b/test/cypress/integration/route/vehicle/vehicleDms.spec.js index f8b54d524..89b36ec9f 100644 --- a/test/cypress/integration/route/vehicle/vehicleDms.spec.js +++ b/test/cypress/integration/route/vehicle/vehicleDms.spec.js @@ -12,7 +12,9 @@ describe('Vehicle DMS', () => { firstRowId: 'tr:first-child > :nth-child(2) > .q-tr > :nth-child(1) > span', lastRowWorkerLink: 'tr:last-child > :nth-child(8) > .q-tr > .link', descriptorTitle: '.descriptor .title', + descriptorOpenSummaryBtn: '.q-menu .descriptor [data-cy="openSummaryBtn"]', descriptorGoToSummaryBtn: '.q-menu .descriptor [data-cy="goToSummaryBtn"]', + summaryGoToSummaryBtn: '.summaryHeader [data-cy="goToSummaryBtn"]', summaryTitle: '.summaryHeader', referenceInput: 'Reference_input', companySelect: 'Company_select', @@ -98,15 +100,26 @@ describe('Vehicle DMS', () => { cy.containContent(selectors.lastRowReference, 'Vehicle:3333-BAT'); }); - it('Should redirect to worker summary from worker descriptor pop-up', () => { - cy.get(selectors.lastRowWorkerLink) - .click() - .invoke('text') - .then((workerName) => { - workerName = workerName.trim(); - cy.get(selectors.descriptorGoToSummaryBtn).click(); - cy.url().should('match', workerSummaryUrlRegex); - cy.containContent(selectors.descriptorTitle, workerName); + describe('Worker pop-ups', () => { + it('Should redirect to worker summary from worker descriptor pop-up', () => { + cy.checkRedirectionFromPopUp({ + selectorToClick: selectors.lastRowWorkerLink, + steps: [selectors.descriptorGoToSummaryBtn], + expectedUrlRegex: workerSummaryUrlRegex, + expectedTextSelector: selectors.descriptorTitle, }); + }); + + it('Should redirect to worker summary from summary pop-up from worker descriptor pop-up', () => { + cy.checkRedirectionFromPopUp({ + selectorToClick: selectors.lastRowWorkerLink, + steps: [ + selectors.descriptorOpenSummaryBtn, + selectors.summaryGoToSummaryBtn, + ], + expectedUrlRegex: workerSummaryUrlRegex, + expectedTextSelector: selectors.descriptorTitle, + }); + }); }); }); diff --git a/test/cypress/support/commands.js b/test/cypress/support/commands.js index 41f91e855..ed699ac46 100755 --- a/test/cypress/support/commands.js +++ b/test/cypress/support/commands.js @@ -619,3 +619,22 @@ Cypress.Commands.add('validateScrollContent', (validations) => { ); }); }); + +Cypress.Commands.add( + 'checkRedirectionFromPopup', + ({ selectorToClick, steps = [], expectedUrlRegex, expectedTextSelector }) => { + cy.get(selectorToClick) + .click() + .invoke('text') + .then((label) => { + label = label.trim(); + + steps.forEach((stepSelector) => { + cy.get(stepSelector).should('be.visible').click(); + }); + + cy.location().should('match', expectedUrlRegex); + cy.containContent(expectedTextSelector, label); + }); + }, +);