From 8417411efcbcb1170c72943e3178e4783640c9fe Mon Sep 17 00:00:00 2001 From: Javier Segarra Date: Sun, 16 Mar 2025 10:44:04 +0100 Subject: [PATCH 01/12] test: ctrl click --- .../integration/monitor/monitorTicket.spec.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/test/cypress/integration/monitor/monitorTicket.spec.js b/test/cypress/integration/monitor/monitorTicket.spec.js index f887293a5..c5d2c30a8 100644 --- a/test/cypress/integration/monitor/monitorTicket.spec.js +++ b/test/cypress/integration/monitor/monitorTicket.spec.js @@ -10,8 +10,21 @@ describe('Monitor Tickets Table', () => { cy.intercept('GET', '**/SalesMonitors/salesFilter*').as('filterRequest'); cy.openFilterPanel(); }); + it.only('should open new tab when ctrl+click on client link', () => { + cy.intercept('GET', '**/SalesMonitors/salesFilter*').as('filterRequest'); - it.only('should filter by column headers and update URL params', () => { + // Mock window.open behavior since Cypress doesn't support multiple tabs + cy.window().then((win) => { + cy.stub(win, 'open').as('windowOpen'); + }); + + // Find and ctrl+click the client link in first row + cy.get(firstRow('provinceFk')).click({ ctrlKey: true }); + + // Verify window.open was called with correct URL + cy.get('@windowOpen').should('be.calledWithMatch', /\/ticket\/\d+\/sale/); + }); + it('should filter by column headers and update URL params', () => { cy.intercept('GET', '**/SalesMonitors/salesFilter*').as('filterRequest'); cy.dataCy('column-filter-id').find(' [data-cy="_input"]').type('13'); From ee4eafc639e68fe99f7e44e5454991cda8a3d03e Mon Sep 17 00:00:00 2001 From: Javier Segarra Date: Sun, 16 Mar 2025 10:57:04 +0100 Subject: [PATCH 02/12] test: validate scopeDays --- .../cypress/integration/monitor/monitorTicket.spec.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/test/cypress/integration/monitor/monitorTicket.spec.js b/test/cypress/integration/monitor/monitorTicket.spec.js index c5d2c30a8..db94227c6 100644 --- a/test/cypress/integration/monitor/monitorTicket.spec.js +++ b/test/cypress/integration/monitor/monitorTicket.spec.js @@ -10,7 +10,7 @@ describe('Monitor Tickets Table', () => { cy.intercept('GET', '**/SalesMonitors/salesFilter*').as('filterRequest'); cy.openFilterPanel(); }); - it.only('should open new tab when ctrl+click on client link', () => { + it('should open new tab when ctrl+click on client link', () => { cy.intercept('GET', '**/SalesMonitors/salesFilter*').as('filterRequest'); // Mock window.open behavior since Cypress doesn't support multiple tabs @@ -228,6 +228,15 @@ describe('Monitor Tickets Table', () => { ).click(); cy.get('.summaryHeader').should('exist'); }); + + it.only('clear scopeDays', function () { + cy.get('[data-cy="Days onward_input"]').clear().type('2'); + cy.searchInFilterPanel(); + cy.get('.q-chip__content > span').should('have.text', '"2"'); + cy.get('[data-cy="Days onward_input"]').clear(); + cy.get('[data-cy="Nickname_input"]').clear(); + cy.get('.q-chip__content > span').should('have.text', '"0"'); + }); }); function requestParams(key, value, options = { inWhere: false, like: false }) { cy.wait('@filterRequest').then((interception) => { From 4c4d7c9dbe0f2826c2483918f75b5edad1b2490e Mon Sep 17 00:00:00 2001 From: Javier Segarra Date: Sun, 16 Mar 2025 11:08:18 +0100 Subject: [PATCH 03/12] test: check url scopeDays para value --- .../integration/monitor/monitorTicket.spec.js | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/test/cypress/integration/monitor/monitorTicket.spec.js b/test/cypress/integration/monitor/monitorTicket.spec.js index db94227c6..b39517dbc 100644 --- a/test/cypress/integration/monitor/monitorTicket.spec.js +++ b/test/cypress/integration/monitor/monitorTicket.spec.js @@ -233,9 +233,27 @@ describe('Monitor Tickets Table', () => { cy.get('[data-cy="Days onward_input"]').clear().type('2'); cy.searchInFilterPanel(); cy.get('.q-chip__content > span').should('have.text', '"2"'); + cy.waitSpinner(); + // Verify URL contains correct scopeDays value + cy.url().then((url) => { + const urlParams = new URLSearchParams(url.split('?')[1]); + const saleMonitorTickets = JSON.parse( + decodeURIComponent(urlParams.get('saleMonitorTickets')), + ); + expect(saleMonitorTickets.scopeDays).to.equal(2); + }); cy.get('[data-cy="Days onward_input"]').clear(); - cy.get('[data-cy="Nickname_input"]').clear(); + cy.searchInFilterPanel(); cy.get('.q-chip__content > span').should('have.text', '"0"'); + cy.waitSpinner(); + // Verify URL after clearing + cy.url().then((url) => { + const urlParams = new URLSearchParams(url.split('?')[1]); + const saleMonitorTickets = JSON.parse( + decodeURIComponent(urlParams.get('saleMonitorTickets')), + ); + expect(saleMonitorTickets.scopeDays).to.equal(0); + }); }); }); function requestParams(key, value, options = { inWhere: false, like: false }) { From cfccc747102a2ad00f8136090f6acbe2ba6a886a Mon Sep 17 00:00:00 2001 From: Javier Segarra Date: Sun, 16 Mar 2025 12:19:26 +0100 Subject: [PATCH 04/12] test: improve monitorTest --- .../integration/monitor/monitorTicket.spec.js | 360 +++++++----------- test/cypress/support/commands.js | 8 + 2 files changed, 155 insertions(+), 213 deletions(-) diff --git a/test/cypress/integration/monitor/monitorTicket.spec.js b/test/cypress/integration/monitor/monitorTicket.spec.js index b39517dbc..766dfddda 100644 --- a/test/cypress/integration/monitor/monitorTicket.spec.js +++ b/test/cypress/integration/monitor/monitorTicket.spec.js @@ -38,222 +38,156 @@ describe('Monitor Tickets Table', () => { .find('.q-item__label') .contains('Bruce Wayne') .click(); - - cy.get( - '[data-cy="column-filter-clientFk"] > [data-v-532139db=""] > .column > .q-field > .q-field__inner > .q-field__control > :nth-child(2) > .q-icon', - ).click(); - cy.get( - '[data-cy="column-filter-id"] > [data-v-532139db=""] > .column > [dense="true"] > .q-field > .q-field__inner > .q-field__control > .q-field__control-container > [data-cy="_input"]', - ).clear('1'); - - cy.get( - '[data-cy="column-filter-clientFk"] > [data-v-532139db=""] > .column > .q-field > .q-field__inner > .q-field__control > .q-field__control-container > .q-field__native > [data-cy="_select"]', - ).clear('1'); - cy.get( - '[data-cy="column-filter-clientFk"] > [data-v-532139db=""] > .column > .q-field > .q-field__inner > .q-field__control > .q-field__control-container > .q-field__native > [data-cy="_select"]', - { timeout: 3000 }, - ).type('1101'); - cy.get('.q-item__label--caption').click(); - cy.get( - '[data-cy="column-filter-salesPersonFk"] > [data-v-532139db=""] > .column > .q-field > .q-field__inner > .q-field__control > .q-field__control-container > .q-field__native > [data-cy="_select"]', - ).click(); - cy.get( - '#f_0ab28e51-61ef-42fd-98cf-5c145672132a_1 > .q-item__section > :nth-child(1)', - ).click(); - cy.get( - '[data-cy="column-filter-provinceFk"] > [data-v-532139db=""] > .column > .q-field > .q-field__inner > .q-field__control > .q-field__control-container > .q-field__native > [data-cy="_select"]', - ).click(); - cy.get('#f_7e2e6ebc-5a8e-40e6-a436-b301a249090e_2 > .q-item__section').click(); - cy.get( - '[data-cy="column-filter-state"] > [data-v-532139db=""] > .column > .q-field > .q-field__inner > .q-field__control > .q-field__control-container > .q-field__native > [data-cy="_select"]', - ).click(); - cy.get('.q-table__top').click(); - cy.get( - '[data-cy="column-filter-state"] > [data-v-532139db=""] > .column > .q-field > .q-field__inner > .q-field__control > .q-field__control-container > .q-field__native > [data-cy="_select"]', - ).click(); - cy.get( - '#f_e05db3bc-1bae-4398-8e06-a9395e8f9e30_13 > .q-item__section > :nth-child(1)', - ).click(); - cy.get('.q-ml-sm > .q-btn__content > .q-icon').click(); - /* ==== End Cypress Studio ==== */ }); - describe('should filter by filter panel', () => { - it('clientFk', () => { - // Client id - clientFk - cy.get('[data-cy="Client id_input"]').type('1101'); - cy.searchInFilterPanel(); - requestParams('clientFk', '1101'); - countRows('eq', 7); - }); - - it('orderFk', () => { - // order id - cy.get('[data-cy="Order id_input"]').type(7); - cy.searchInFilterPanel(); - requestParams('orderFk', '7'); - countRows('eq', 1); - }); - - it('scopeDays', () => { - // Scope days - cy.get('[data-cy="Days onward_input"]').type(2); - cy.searchInFilterPanel(); - requestParams('scopeDays', '2'); - countRows('eq', 27); - }); - - it('salesPersonFk', () => { - // SalesPerson - cy.get('[data-cy="vnWorkerSelect"]').click(); - cy.get('.q-item__label').contains('salesPersonNick').click(); - cy.searchInFilterPanel(); - requestParams('c.salesPersonFk', 18, { inWhere: true }); - countRows('eq', 21); - }); - - // it('', () => { - // cy.get('.q-mt-xs > .q-item__section--side').click(); - // requestParams(null); - // }); - - it('nickname', () => { - // Nickname - cy.get('[data-cy="Nickname_input"]').type('test'); - cy.searchInFilterPanel(); - requestParams('t.nickname', 'test', { inWhere: true, like: true }); - countRows('eq', 2); - }); - - it('refFk', () => { - // Invoice - cy.get('[data-cy="Invoice_input"]').type('test'); - cy.searchInFilterPanel(); - requestParams('refFk', 'test'); - countRows('eq', 0); - }); - - it('agencyModeFk', () => { - // Agency - cy.get('[data-cy="Agency_select"]').click(); - cy.get('.q-item__label').contains('inhouse pickup').click(); - cy.searchInFilterPanel(); - requestParams('agencyModeFk', '1'); - countRows('eq', 6); - }); - - // it('', () => { - // cy.get('.q-mt-xs > .q-item__section--side').click(); - // requestParams(null); - // }); - - it('state', () => { - // State - cy.get('[data-cy="State_select"]').click(); - cy.get('.q-item__label').contains('Libre').click(); - cy.searchInFilterPanel(); - requestParams('ts.stateFk', 2, { inWhere: true }); - countRows('eq', 11); - }); - - it('alertLevel', () => { - // AlertLevel - cy.get('[data-cy="Grouped State_select"]').click(); - cy.get('.q-item__label').contains('Free').click(); - cy.searchInFilterPanel(); - requestParams('alertLevel', '0'); - countRows('eq', 16); - }); - - // it('', () => { - // cy.get('.q-mt-xs > .q-item__section--side').click(); - // requestParams(null); - // }); - - it('countryFk', () => { - // Country - cy.get('[data-cy="Country_select"]').click(); - cy.get('.q-item__label').contains('España').click(); - cy.searchInFilterPanel(); - requestParams('countryFk', '1'); - countRows('eq', 26); - }); - - it('warehouseFk', () => { - // Province - cy.get('[data-cy="Province_select"]').click(); - cy.get('.q-item__label').contains('Province one').click(); - cy.searchInFilterPanel(); - requestParams('warehouseFk', 1); - countRows('eq', 2); - }); - - it('department', () => { - // Department - cy.get('[data-cy="Department_select"]').click(); - cy.get('.q-item__label').contains('VENTAS').click(); - cy.searchInFilterPanel(); - requestParams('d.name', 'VENTAS', { inWhere: true }); - countRows('eq', 24); - }); - - it('packing', () => { - // ITP - cy.get('[data-cy="ITP_select"]').click(); - cy.get('.q-item__label').contains('H').click(); - cy.searchInFilterPanel(); - requestParams('packing', 'H'); - countRows('eq', 5); - }); - }); - it('Cols', () => { - cy.get(firstRow('totalProblems')); - cy.get(firstRow('id')).find('span').should('have.class', 'link').click(); - cy.dataCy('TicketDescriptor').should('exist'); - cy.get(firstRow('clientFk')).find('span').should('have.class', 'link').click(); - cy.dataCy('CustomerDescriptor').should('exist'); - - cy.get(firstRow('salesPersonFk')) - .find('span') - .should('have.class', 'link') - .click(); - cy.dataCy('WorkerDescriptor').should('exist'); - cy.get(firstRow('zoneFk')).find('span').should('have.class', 'link').click(); - cy.dataCy('ZoneDescriptor').should('exist'); - cy.get(firstRow('shippedDate')).find('.q-badge'); - cy.get( - ':nth-child(1) > .q-table--col-auto-width > [data-cy="tableAction-0"] > .q-btn__content > .q-icon', - ).click({ ctrlKey: true }); - cy.get( - ':nth-child(1) > .q-table--col-auto-width > [data-cy="tableAction-1"] > .q-btn__content > .q-icon', - ).click(); - cy.get('.summaryHeader').should('exist'); - }); - - it.only('clear scopeDays', function () { - cy.get('[data-cy="Days onward_input"]').clear().type('2'); + it('should filter by filter panel', () => { + // Client id - clientFk + cy.get('[data-cy="Client id_input"]').type('1101'); cy.searchInFilterPanel(); - cy.get('.q-chip__content > span').should('have.text', '"2"'); - cy.waitSpinner(); - // Verify URL contains correct scopeDays value - cy.url().then((url) => { - const urlParams = new URLSearchParams(url.split('?')[1]); - const saleMonitorTickets = JSON.parse( - decodeURIComponent(urlParams.get('saleMonitorTickets')), - ); - expect(saleMonitorTickets.scopeDays).to.equal(2); - }); - cy.get('[data-cy="Days onward_input"]').clear(); + requestParams('clientFk', '1101'); + countRows('eq', 7); + // + cy.cleanFilterPanel(); + // TODO: order id + cy.get('[data-cy="Order id_input"]').type(7); cy.searchInFilterPanel(); - cy.get('.q-chip__content > span').should('have.text', '"0"'); - cy.waitSpinner(); - // Verify URL after clearing - cy.url().then((url) => { - const urlParams = new URLSearchParams(url.split('?')[1]); - const saleMonitorTickets = JSON.parse( - decodeURIComponent(urlParams.get('saleMonitorTickets')), - ); - expect(saleMonitorTickets.scopeDays).to.equal(0); - }); + // requestParams('orderFk', '7'); + cy.url().should('include', 'orderFk'); + countRows('eq', 1); + // + cy.cleanFilterPanel(); + // TODO: Scope days + // cy.get('[data-cy="Days onward_input"]').type(2); + // cy.searchInFilterPanel(); + // requestParams('scopeDays', '2'); + // countRows('eq', 27); + // + cy.cleanFilterPanel(); + // Nickname + cy.get('[data-cy="Nickname_input"]').type('test'); + cy.searchInFilterPanel(); + // requestParams('nickname', 'test', { inWhere: true, like: false }); + cy.url().should('include', 'nickname'); + countRows('eq', 2); + // + cy.cleanFilterPanel(); + // Invoice + cy.get('[data-cy="Invoice_input"]').type('test'); + cy.searchInFilterPanel(); + // requestParams('refFk', 'test'); + cy.url().should('include', 'refFk'); + countRows('eq', 0); + // + cy.cleanFilterPanel(); + // Agency + cy.get('[data-cy="Agency_select"]').click(); + cy.get('.q-item__label').contains('inhouse pickup').click(); + cy.searchInFilterPanel(); + // requestParams('agencyModeFk', '1'); + cy.url().should('include', 'agencyModeFk'); + countRows('eq', 6); + // + cy.cleanFilterPanel(); + // State + cy.get('[data-cy="State_select"]').click(); + cy.get('.q-item__label').contains('Libre').click(); + cy.searchInFilterPanel(); + // requestParams('ts.stateFk', 2, { inWhere: true }); + cy.url().should('include', 'stateFk'); + countRows('eq', 11); + // + cy.cleanFilterPanel(); + // AlertLevel + cy.get('[data-cy="Grouped State_select"]').click(); + cy.get('.q-item__label').contains('Free').click(); + cy.searchInFilterPanel(); + // requestParams('alertLevel', '0'); + cy.url().should('include', 'alertLevel'); + countRows('eq', 16); + // + cy.cleanFilterPanel(); + // Country + cy.get('[data-cy="Country_select"]').click(); + cy.get('.q-item__label').contains('España').click(); + cy.searchInFilterPanel(); + // requestParams('countryFk', '1'); + cy.url().should('include', 'countryFk'); + countRows('eq', 26); + // + cy.cleanFilterPanel(); + // Province + cy.get('[data-cy="Warehouse_select"]').click(); + cy.get('.q-item__label').contains('Warehouse Two').click(); + cy.searchInFilterPanel(); + // requestParams('warehouseFk', '2'); + cy.url().should('include', 'warehouseFk'); + countRows('eq', 1); + // + cy.cleanFilterPanel(); + // Department + cy.selectOption('[data-cy="Department_select"]', 'EQUIPO ESPAÑA LEVANTE'); + cy.searchInFilterPanel(); + // requestParams('departmentFk', '150'); + cy.url().should('include', 'departmentFk'); + // countRows('eq', 27); + // + cy.cleanFilterPanel(); + // ITP + cy.get('[data-cy="ITP_select"]').click(); + cy.get('.q-item__label').contains('H').click(); + cy.searchInFilterPanel(); + // requestParams('packing', 'H'); + cy.url().should('include', 'packing'); + countRows('eq', 5); + }); +}); +it('Cols', () => { + cy.get(firstRow('totalProblems')); + + cy.get(firstRow('id')).find('span').should('have.class', 'link').click(); + cy.dataCy('TicketDescriptor').should('exist'); + + cy.get(firstRow('zoneFk')).find('span').should('have.class', 'link').click(); + cy.dataCy('ZoneDescriptor').should('exist'); + + cy.get(firstRow('clientFk')).find('span').should('have.class', 'link').click(); + cy.dataCy('CustomerDescriptor').should('exist'); + + cy.get(firstRow('departmentFk')).find('span').should('have.class', 'link').click(); + cy.dataCy('DepartmentDescriptor').should('exist'); + cy.get(firstRow('shippedDate')).find('.q-badge'); + cy.get( + ':nth-child(1) > .q-table--col-auto-width > [data-cy="tableAction-0"] > .q-btn__content > .q-icon', + ).click({ ctrlKey: true }); + cy.get( + ':nth-child(1) > .q-table--col-auto-width > [data-cy="tableAction-1"] > .q-btn__content > .q-icon', + ).click(); + cy.get('.summaryHeader').should('exist'); +}); + +it('clear scopeDays', function () { + cy.get('[data-cy="Days onward_input"]').clear().type('2'); + cy.searchInFilterPanel(); + cy.get('.q-chip__content > span').should('have.text', '"2"'); + cy.waitSpinner(); + // Verify URL contains correct scopeDays value + cy.url().then((url) => { + const urlParams = new URLSearchParams(url.split('?')[1]); + const saleMonitorTickets = JSON.parse( + decodeURIComponent(urlParams.get('saleMonitorTickets')), + ); + expect(saleMonitorTickets.scopeDays).to.equal(2); + }); + cy.get('[data-cy="Days onward_input"]').clear(); + cy.searchInFilterPanel(); + cy.get('.q-chip__content > span').should('have.text', '"0"'); + cy.waitSpinner(); + // Verify URL after clearing + cy.url().then((url) => { + const urlParams = new URLSearchParams(url.split('?')[1]); + const saleMonitorTickets = JSON.parse( + decodeURIComponent(urlParams.get('saleMonitorTickets')), + ); + expect(saleMonitorTickets.scopeDays).to.equal(0); }); }); function requestParams(key, value, options = { inWhere: false, like: false }) { diff --git a/test/cypress/support/commands.js b/test/cypress/support/commands.js index 15e51d8c4..3de0591e7 100755 --- a/test/cypress/support/commands.js +++ b/test/cypress/support/commands.js @@ -101,6 +101,13 @@ Cypress.Commands.add('waitSpinner', () => { } }); }); +// Cypress.Commands.add('waitRightSpinner', () => { +// cy.get('body').then(($body) => { +// if ($body.find('.q-inner-loading').length) { +// cy.get('.q-inner-loading').should('not.be.visible'); +// } +// }); +// }); // Fill Inputs Cypress.Commands.add('selectOption', (selector, option, timeout = 2500) => { @@ -306,6 +313,7 @@ Cypress.Commands.add('openRightMenu', (element) => { Cypress.Commands.add('cleanFilterPanel', () => { const element = 'clearFilters'; + cy.get('#filterPanelForm').scrollIntoView(); if (element) cy.waitForElement(`[data-cy="${element}"]`); cy.dataCy(element).click(); }); From 23eff4937c871fa36a78d7b29a7d0e43c5ac44e4 Mon Sep 17 00:00:00 2001 From: Javier Segarra Date: Sun, 16 Mar 2025 12:22:55 +0100 Subject: [PATCH 05/12] feat: add data-cy --- src/pages/Worker/Department/Card/DepartmentDescriptorProxy.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/Worker/Department/Card/DepartmentDescriptorProxy.vue b/src/pages/Worker/Department/Card/DepartmentDescriptorProxy.vue index 5b556f655..ac8f55f55 100644 --- a/src/pages/Worker/Department/Card/DepartmentDescriptorProxy.vue +++ b/src/pages/Worker/Department/Card/DepartmentDescriptorProxy.vue @@ -11,7 +11,7 @@ const $props = defineProps({ diff --git a/test/cypress/integration/monitor/clientActions.spec.js b/test/cypress/integration/monitor/clientActions.spec.js new file mode 100644 index 000000000..f413332f3 --- /dev/null +++ b/test/cypress/integration/monitor/clientActions.spec.js @@ -0,0 +1,61 @@ +describe('Monitor Clients actions', () => { + beforeEach(() => { + cy.login('developer'); + cy.visit('/#/monitor/clients-actions'); + cy.waitForElement('.q-page'); + cy.intercept('GET', '**/SalesMonitors/ordersFilter*').as('ordersFilter'); + cy.intercept('GET', '**/SalesMonitors/clientsFilter*').as('clientsFilter'); + }); + it.only('Should load layout', () => { + cy.get('.q-page').should('be.visible'); + + cy.firstRow('clientFk').find('span').should('have.class', 'link').click(); + cy.dataCy('CustomerDescriptor').should('exist'); + cy.firstRow('departmentFk', 2).find('span').should('have.class', 'link').click(); + cy.dataCy('DepartmentDescriptor').should('exist'); + + cy.dataCy('clientsOnWebsite') + .find(' .q-ml-md') + .should('have.text', 'Clients on website'); + cy.dataCy('recentOrderActions') + .find('.q-ml-md') + .should('have.text', 'Recent order actions'); + cy.get('[data-cy="From_inputDate"]').should('have.value', '01/01/2001'); + cy.get('[data-cy="To_inputDate"]').should('have.value', '01/01/2001'); + cy.get('[data-cy="recentOrderActions"]') + .find('[data-cy="column-filter-clientFk"]') + .find(' [data-cy="_select"]') + .click(); + cy.get('.q-menu :nth-child(1) >.q-item__section').click(); + cy.countTableRows('eq', 0); + + cy.get('[data-cy="recentOrderActions"]') + .find( + '[data-cy="column-filter-clientFk"] .q-field .q-field__control > :nth-child(2)', + ) + .click(); + cy.get('[data-cy="recentOrderActions"]') + .find('[data-cy="column-filter-departmentFk"]') + .find(' [data-cy="_select"]') + .click(); + cy.get('[data-cy="recentOrderActions"]') + .find('[data-cy="column-filter-departmentFk"]') + .find(' [data-cy="_select"]') + .type('VIP'); + cy.wait(1000); + cy.get('.q-menu :nth-child(1) >.q-item__section').click(); + cy.countTableRows('eq', 13); + + cy.get('[data-cy="recentOrderActions"]') + .find('[data-cy="column-filter-clientFk"]') + .find(' [data-cy="_select"]') + .click(); + cy.get('[data-cy="recentOrderActions"]') + .find('[data-cy="column-filter-clientFk"]') + .find(' [data-cy="_select"]') + .type('bru'); + cy.wait(1000); + cy.get('.q-menu :nth-child(1) >.q-item__section').click(); + cy.countTableRows('eq', 3); + }); +}); diff --git a/test/cypress/integration/monitor/monitorTicket.spec.js b/test/cypress/integration/monitor/monitorTicket.spec.js index a8e125368..0955679b1 100644 --- a/test/cypress/integration/monitor/monitorTicket.spec.js +++ b/test/cypress/integration/monitor/monitorTicket.spec.js @@ -12,15 +12,11 @@ describe('Monitor Tickets Table', () => { it('should open new tab when ctrl+click on client link', () => { cy.intercept('GET', '**/SalesMonitors/salesFilter*').as('filterRequest'); - // Mock window.open behavior since Cypress doesn't support multiple tabs cy.window().then((win) => { cy.stub(win, 'open').as('windowOpen'); }); - // Find and ctrl+click the client link in first row cy.get(firstRow('provinceFk')).click({ ctrlKey: true }); - - // Verify window.open was called with correct URL cy.get('@windowOpen').should('be.calledWithMatch', /\/ticket\/\d+\/sale/); }); it('should filter by column headers and update URL params', () => { @@ -42,101 +38,88 @@ describe('Monitor Tickets Table', () => { // Client id - clientFk cy.get('[data-cy="Client id_input"]').type('1101'); cy.searchInFilterPanel(); - requestParams('clientFk', '1101'); - countRows('eq', 7); + cy.url().should('include', 'clientFk'); + cy.countTableRows('eq', 7); // cy.cleanFilterPanel(); - // TODO: order id cy.get('[data-cy="Order id_input"]').type(7); cy.searchInFilterPanel(); - // requestParams('orderFk', '7'); cy.url().should('include', 'orderFk'); - countRows('eq', 1); + cy.countTableRows('eq', 1); // cy.cleanFilterPanel(); - // TODO: Scope days - // cy.get('[data-cy="Days onward_input"]').type(2); - // cy.searchInFilterPanel(); - // requestParams('scopeDays', '2'); - // countRows('eq', 27); + cy.get('[data-cy="Days onward_input"]').type(2); + cy.searchInFilterPanel(); + cy.url().should('include', 'scopeDays'); + cy.countTableRows('eq', 27); // cy.cleanFilterPanel(); // Nickname cy.get('[data-cy="Nickname_input"]').type('test'); cy.searchInFilterPanel(); - // requestParams('nickname', 'test', { inWhere: true, like: false }); cy.url().should('include', 'nickname'); - countRows('eq', 2); + cy.countTableRows('eq', 2); // cy.cleanFilterPanel(); // Invoice cy.get('[data-cy="Invoice_input"]').type('test'); cy.searchInFilterPanel(); - // requestParams('refFk', 'test'); cy.url().should('include', 'refFk'); - countRows('eq', 0); + cy.countTableRows('eq', 0); // cy.cleanFilterPanel(); // Agency cy.get('[data-cy="Agency_select"]').click(); cy.get('.q-item__label').contains('inhouse pickup').click(); cy.searchInFilterPanel(); - // requestParams('agencyModeFk', '1'); cy.url().should('include', 'agencyModeFk'); - countRows('eq', 6); + cy.countTableRows('eq', 6); // cy.cleanFilterPanel(); // State cy.get('[data-cy="State_select"]').click(); cy.get('.q-item__label').contains('Libre').click(); cy.searchInFilterPanel(); - // requestParams('ts.stateFk', 2, { inWhere: true }); cy.url().should('include', 'stateFk'); - countRows('eq', 11); + cy.countTableRows('eq', 13); // cy.cleanFilterPanel(); // AlertLevel cy.get('[data-cy="Grouped State_select"]').click(); cy.get('.q-item__label').contains('Free').click(); cy.searchInFilterPanel(); - // requestParams('alertLevel', '0'); cy.url().should('include', 'alertLevel'); - countRows('eq', 16); + cy.countTableRows('eq', 18); // cy.cleanFilterPanel(); // Country cy.get('[data-cy="Country_select"]').click(); cy.get('.q-item__label').contains('España').click(); cy.searchInFilterPanel(); - // requestParams('countryFk', '1'); cy.url().should('include', 'countryFk'); - countRows('eq', 26); + cy.countTableRows('eq', 28); // cy.cleanFilterPanel(); // Province cy.get('[data-cy="Warehouse_select"]').click(); cy.get('.q-item__label').contains('Warehouse Two').click(); cy.searchInFilterPanel(); - // requestParams('warehouseFk', '2'); cy.url().should('include', 'warehouseFk'); - countRows('eq', 1); + cy.countTableRows('eq', 1); // cy.cleanFilterPanel(); // Department cy.selectOption('[data-cy="Department_select"]', 'EQUIPO ESPAÑA LEVANTE'); cy.searchInFilterPanel(); - // requestParams('departmentFk', '150'); cy.url().should('include', 'departmentFk'); - // countRows('eq', 27); // cy.cleanFilterPanel(); // ITP cy.get('[data-cy="ITP_select"]').click(); cy.get('.q-item__label').contains('H').click(); cy.searchInFilterPanel(); - // requestParams('packing', 'H'); cy.url().should('include', 'packing'); - countRows('eq', 5); + cy.countTableRows('eq', 5); }); it('Cols', () => { @@ -194,36 +177,3 @@ function checkScopeDays(scopeDays) { ); }); } -function requestParams(key, value, options = { inWhere: false, like: false }) { - cy.wait('@filterRequest').then((interception) => { - if (!key) return; - const { query } = interception.request; - if (!options.inWhere) expect(query).to.have.property(key, value); - else { - const filter = JSON.parse(query.filter); - if (options.like) - expect(filter.where).to.have.deep.property(key, { - like: `%${value}%`, - }); - else { - expect(filter).to.have.property('where'); - expect(filter.where).to.have.property(key, value); - } - } - }); -} -function countRows(operator = 'gt', value = 0) { - const element = 'data-row-index'; - cy.get('body').then(($body) => { - const hasRows = $body.find(`td[${element}]`).length > 0; - if (!hasRows) expect(0).to.be[operator](value); - else - cy.get(`td[${element}]`) - .last() - .invoke('attr', element) - .then((lastIndex) => { - const totalRows = parseInt(lastIndex) + 1; - expect(totalRows).to.be[operator](value); - }); - }); -} From 351f291086fdc09879410037e119bf76bf012a69 Mon Sep 17 00:00:00 2001 From: Javier Segarra Date: Mon, 24 Mar 2025 11:15:25 +0100 Subject: [PATCH 12/12] test: remove timeout --- .../integration/monitor/clientActions.spec.js | 62 ++++++++----------- .../integration/monitor/monitorTicket.spec.js | 17 +++-- .../vnComponent/vnSelect.commands.js | 3 + 3 files changed, 37 insertions(+), 45 deletions(-) create mode 100644 test/cypress/integration/vnComponent/vnSelect.commands.js diff --git a/test/cypress/integration/monitor/clientActions.spec.js b/test/cypress/integration/monitor/clientActions.spec.js index f413332f3..5208c6410 100644 --- a/test/cypress/integration/monitor/clientActions.spec.js +++ b/test/cypress/integration/monitor/clientActions.spec.js @@ -1,3 +1,5 @@ +const clientFk = `[data-cy="recentOrderActions"] [data-cy="column-filter-clientFk"]`; +const departmentFk = `[data-cy="recentOrderActions"] [data-cy="column-filter-departmentFk"]`; describe('Monitor Clients actions', () => { beforeEach(() => { cy.login('developer'); @@ -6,12 +8,19 @@ describe('Monitor Clients actions', () => { cy.intercept('GET', '**/SalesMonitors/ordersFilter*').as('ordersFilter'); cy.intercept('GET', '**/SalesMonitors/clientsFilter*').as('clientsFilter'); }); - it.only('Should load layout', () => { + it('Should load layout', () => { cy.get('.q-page').should('be.visible'); - cy.firstRow('clientFk').find('span').should('have.class', 'link').click(); + cy.dataCy('recentOrderActions').within(() => { + cy.firstRow('clientFk').find('span').should('have.class', 'link').click(); + }); cy.dataCy('CustomerDescriptor').should('exist'); - cy.firstRow('departmentFk', 2).find('span').should('have.class', 'link').click(); + cy.dataCy('recentOrderActions').within(() => { + cy.firstRow('departmentFk', 2) + .find('span') + .should('have.class', 'link') + .click(); + }); cy.dataCy('DepartmentDescriptor').should('exist'); cy.dataCy('clientsOnWebsite') @@ -22,40 +31,23 @@ describe('Monitor Clients actions', () => { .should('have.text', 'Recent order actions'); cy.get('[data-cy="From_inputDate"]').should('have.value', '01/01/2001'); cy.get('[data-cy="To_inputDate"]').should('have.value', '01/01/2001'); - cy.get('[data-cy="recentOrderActions"]') - .find('[data-cy="column-filter-clientFk"]') - .find(' [data-cy="_select"]') - .click(); - cy.get('.q-menu :nth-child(1) >.q-item__section').click(); + cy.get(`${clientFk} [data-cy="_select"]`).click(); + cy.clickOption(); cy.countTableRows('eq', 0); - cy.get('[data-cy="recentOrderActions"]') - .find( - '[data-cy="column-filter-clientFk"] .q-field .q-field__control > :nth-child(2)', - ) - .click(); - cy.get('[data-cy="recentOrderActions"]') - .find('[data-cy="column-filter-departmentFk"]') - .find(' [data-cy="_select"]') - .click(); - cy.get('[data-cy="recentOrderActions"]') - .find('[data-cy="column-filter-departmentFk"]') - .find(' [data-cy="_select"]') - .type('VIP'); - cy.wait(1000); - cy.get('.q-menu :nth-child(1) >.q-item__section').click(); - cy.countTableRows('eq', 13); + cy.get(`${clientFk} .q-field .q-field__control > :nth-child(2)`).click(); + cy.get(`${departmentFk} [data-cy="_select"]`).type('VIP').trigger('enter'); + cy.intercept('GET', '**/Departments*').as('filterDepartment'); + cy.wait('@filterDepartment').then(() => { + cy.clickOption(); + cy.countTableRows('eq', 13); + }); - cy.get('[data-cy="recentOrderActions"]') - .find('[data-cy="column-filter-clientFk"]') - .find(' [data-cy="_select"]') - .click(); - cy.get('[data-cy="recentOrderActions"]') - .find('[data-cy="column-filter-clientFk"]') - .find(' [data-cy="_select"]') - .type('bru'); - cy.wait(1000); - cy.get('.q-menu :nth-child(1) >.q-item__section').click(); - cy.countTableRows('eq', 3); + cy.get(`${clientFk} [data-cy="_select"]`).type('Bruce Banner'); + cy.intercept('GET', '**/Clients*').as('filterClient'); + cy.wait('@filterClient').then(() => { + cy.clickOption(); + cy.countTableRows('eq', 3); + }); }); }); diff --git a/test/cypress/integration/monitor/monitorTicket.spec.js b/test/cypress/integration/monitor/monitorTicket.spec.js index 0955679b1..d34561271 100644 --- a/test/cypress/integration/monitor/monitorTicket.spec.js +++ b/test/cypress/integration/monitor/monitorTicket.spec.js @@ -19,20 +19,17 @@ describe('Monitor Tickets Table', () => { cy.get(firstRow('provinceFk')).click({ ctrlKey: true }); cy.get('@windowOpen').should('be.calledWithMatch', /\/ticket\/\d+\/sale/); }); - it('should filter by column headers and update URL params', () => { + it.only('should filter by column headers and update URL params', () => { cy.intercept('GET', '**/SalesMonitors/salesFilter*').as('filterRequest'); - cy.dataCy('column-filter-id').find(' [data-cy="_input"]').type('13'); + cy.dataCy('column-filter-id').find('[data-cy="_input"]').type('13'); cy.dataCy('column-filter-id').find(' .q-icon').click(); cy.openRightMenu(); - cy.dataCy('column-filter-clientFk') - .find('[data-cy="_select"]', { timeout: 3000 }) - .type('1101', { timeout: 3000, force: true }); - cy.get('[role="listbox"]') - .find('.q-item') - .find('.q-item__label') - .contains('Bruce Wayne') - .click(); + cy.dataCy('column-filter-clientFk').find('[data-cy="_select"]').type('1101'); + cy.intercept('GET', '**/Clients*').as('filterClient'); + cy.wait('@filterClient').then(() => { + cy.clickOption(); + }); }); it('should filter by filter panel', () => { // Client id - clientFk diff --git a/test/cypress/integration/vnComponent/vnSelect.commands.js b/test/cypress/integration/vnComponent/vnSelect.commands.js new file mode 100644 index 000000000..017b6e7ea --- /dev/null +++ b/test/cypress/integration/vnComponent/vnSelect.commands.js @@ -0,0 +1,3 @@ +Cypress.Commands.add('clickOption', (index = 1) => + cy.get(`.q-menu :nth-child(${index}) >.q-item__section`).click(), +);