diff --git a/test/cypress/integration/ticket/ticketBasicData.spec.js b/test/cypress/integration/ticket/ticketBasicData.spec.js index b029e0229..4a0ddce7d 100644 --- a/test/cypress/integration/ticket/ticketBasicData.spec.js +++ b/test/cypress/integration/ticket/ticketBasicData.spec.js @@ -9,7 +9,7 @@ describe('TicketBasicData', () => { it('Should redirect to customer basic data', () => { cy.get('.q-page').should('be.visible'); cy.get(':nth-child(2) > div > .text-primary').click(); - cy.get('[data-cy="Address_select"]').click(); + cy.dataCy('Address_select').click(); cy.get('.q-btn-group > [data-v-d4506789=""] > .q-btn__content > .q-icon').click(); cy.get( '[data-cy="CustomerBasicData-menu-item"] > .q-item__section--main', @@ -25,16 +25,16 @@ describe('TicketBasicData', () => { cy.get('tr:nth-child(1)>:nth-child(1)>span').should('have.class', 'link').click(); cy.dataCy('ItemDescriptor').should('exist'); cy.get('.q-drawer__content > :nth-child(1) > :nth-child(2) > span').should( - 'have.text', - 'Price: €34.40', + 'contain.text', + 'Price: €', ); cy.get('.q-drawer__content > :nth-child(1) > :nth-child(3) > span').should( - 'have.text', - 'New price: €34.20', + 'contain.text', + 'New price: €', ); cy.get('.q-drawer__content > :nth-child(1) > :nth-child(4) > span').should( - 'have.text', - 'Difference: €0.20', + 'contain.text', + 'Difference: €', ); cy.get( ':nth-child(3) > .q-radio > .q-radio__inner > .q-radio__bg > .q-radio__check', diff --git a/test/cypress/integration/ticket/ticketComponents.spec.js b/test/cypress/integration/ticket/ticketComponents.spec.js index f5bfd144d..23dbf8bcd 100644 --- a/test/cypress/integration/ticket/ticketComponents.spec.js +++ b/test/cypress/integration/ticket/ticketComponents.spec.js @@ -1,4 +1,5 @@ /// + describe('TicketComponents', () => { beforeEach(() => { cy.login('developer'); @@ -7,61 +8,23 @@ describe('TicketComponents', () => { }); it('Should load layout', () => { cy.get('.q-page').should('be.visible'); - /* ==== Generated with Cypress Studio ==== */ - cy.get('.q-scrollarea__content > :nth-child(2) > :nth-child(2)').should( - 'have.text', - 'Base to commission: €799.20', - ); - cy.get('.q-scrollarea__content > :nth-child(2) > :nth-child(3)').should( - 'have.text', - 'Total without VAT: €807.20', - ); - cy.get('.q-scrollarea__content > :nth-child(3) > :nth-child(2)').should( - 'have.text', - 'valor de compra: €425.000', - ); - cy.get('.q-scrollarea__content > :nth-child(3) > :nth-child(4)').should( - 'have.text', - 'maná auto: €7.998', - ); - cy.get('.q-scrollarea__content > :nth-child(4) > :nth-child(2)').should( - 'have.text', - 'Price: €5.00', - ); - cy.get('.q-scrollarea__content > :nth-child(4) > :nth-child(3)').should( - 'have.text', - 'Bonus: €1.00', - ); - cy.get('.q-scrollarea__content > :nth-child(4) > :nth-child(5)').should( - 'have.text', - 'Packages: 6', - ); - cy.get('.q-scrollarea__content > :nth-child(4) > :nth-child(4)').should( - 'have.text', - 'Zone: Zone pickup A ', - ); - cy.get('.q-scrollarea__content > :nth-child(5) > :nth-child(2)').should( - 'have.text', - 'Total price: €16.00', - ); + cy.validateScrollContent([ + { row: 2, col: 2, text: 'Base to commission: €799.20' }, + { row: 2, col: 3, text: 'Total without VAT: €807.20' }, + { row: 3, col: 2, text: 'valor de compra: €425.000' }, + { row: 3, col: 4, text: 'maná auto: €7.998' }, + { row: 4, col: 2, text: 'Price: €5.00' }, + { row: 4, col: 3, text: 'Bonus: €1.00' }, + { row: 4, col: 5, text: 'Packages: 6' }, + { row: 4, col: 4, text: 'Zone: Zone pickup A ' }, + { row: 5, col: 2, text: 'Total price: €16.00' }, + ]); cy.get(':nth-child(4) > .link').click(); cy.dataCy('ZoneDescriptor').should('exist'); - cy.get(':nth-child(1) > [data-col-field="total"]').should( - 'have.text', - '€250.000€247.000€4.970', - ); - cy.get(':nth-child(1) > [data-col-field="import"]').should( - 'have.text', - '€50.000€49.400€0.994', - ); - cy.get(':nth-child(1) > [data-col-field="components"]').should( - 'have.text', - 'valor de compramargenmaná auto', - ); - cy.get(':nth-child(1) > [data-col-field="serie"]').should( - 'have.text', - 'costeempresacartera_comercial', - ); + cy.getRowCol('total').should('have.text', '€250.000€247.000€4.970'); + cy.getRowCol('import').should('have.text', '€50.000€49.400€0.994'); + cy.getRowCol('components').should('have.text', 'valor de compramargenmaná auto'); + cy.getRowCol('serie').should('have.text', 'costeempresacartera_comercial'); }); }); diff --git a/test/cypress/integration/ticket/ticketList.spec.js b/test/cypress/integration/ticket/ticketList.spec.js index 44e5fe5a1..e18025319 100644 --- a/test/cypress/integration/ticket/ticketList.spec.js +++ b/test/cypress/integration/ticket/ticketList.spec.js @@ -1,7 +1,5 @@ /// describe('TicketList', () => { - const firstRow = 'tbody.q-virtual-scroll__content tr:nth-child(1)'; - beforeEach(() => { cy.login('developer'); cy.viewport(1920, 1080); @@ -11,7 +9,7 @@ describe('TicketList', () => { const searchResults = (search) => { if (search) cy.typeSearchbar().type(search); cy.dataCy('vn-searchbar').find('input').type('{enter}'); - cy.get(firstRow).should('exist'); + cy.getRow().should('exist'); }; it('should search results', () => { @@ -24,13 +22,13 @@ describe('TicketList', () => { cy.window().then((win) => { cy.stub(win, 'open').as('windowOpen'); }); - cy.get(firstRow).should('be.visible').find('.q-btn:first').click(); + cy.getRow().should('be.visible').find('.q-btn:first').click(); cy.get('@windowOpen').should('be.calledWithMatch', /\/ticket\/\d+\/sale/); }); it('should open ticket summary', () => { searchResults(); - cy.get(firstRow).find('.q-btn:last').click(); + cy.getRow().find('.q-btn:last').click(); cy.get('.summaryHeader').should('exist'); cy.get('.summaryBody').should('exist'); }); @@ -44,7 +42,7 @@ describe('TicketList', () => { cy.dataCy('Customer ID_input').type('1101{enter}'); cy.intercept('GET', /\/api\/Clients\?filter/).as('clientFilter'); - cy.get('[data-cy="vnTableCreateBtn"] > .q-btn__content > .q-icon').click(); + cy.vnTableCreateBtn(); cy.wait('@clientFilter'); cy.dataCy('Customer_select').should('have.value', 'Bruce Wayne'); cy.dataCy('Address_select').click(); @@ -53,8 +51,7 @@ describe('TicketList', () => { cy.dataCy('Address_select').should('have.value', 'Bruce Wayne'); }); it('Client list create new ticket', () => { - cy.dataCy('vnTableCreateBtn').should('exist'); - cy.dataCy('vnTableCreateBtn').click(); + cy.vnTableCreateBtn(); const data = { Customer: { val: 1, type: 'select' }, Warehouse: { val: 'Warehouse One', type: 'select' }, diff --git a/test/cypress/integration/ticket/ticketNotes.spec.js b/test/cypress/integration/ticket/ticketNotes.spec.js index 5b44f9e1f..df1ff9137 100644 --- a/test/cypress/integration/ticket/ticketNotes.spec.js +++ b/test/cypress/integration/ticket/ticketNotes.spec.js @@ -19,7 +19,7 @@ describe('TicketNotes', () => { cy.checkNotification('Data saved'); cy.dataCy('ticketNotesRemoveNoteBtn').should('exist'); cy.dataCy('ticketNotesRemoveNoteBtn').click(); - cy.dataCy('VnConfirm_confirm').click(); + cy.confirmVnConfirm(); cy.checkNotification('Data saved'); }); }); diff --git a/test/cypress/integration/ticket/ticketPackage.spec.js b/test/cypress/integration/ticket/ticketPackage.spec.js index e7980a413..992efd53b 100644 --- a/test/cypress/integration/ticket/ticketPackage.spec.js +++ b/test/cypress/integration/ticket/ticketPackage.spec.js @@ -9,14 +9,13 @@ describe('TicketPackages', () => { it('Should load layout', () => { cy.get('.q-page').should('be.visible'); cy.get('.vn-row > .q-btn > .q-btn__content > .q-icon').click(); - cy.get('[data-cy="Package_select"]').click(); + cy.dataCy('Package_select').click(); cy.get('.q-menu :nth-child(1) >.q-item__section').click(); - cy.get('[data-cy="Quantity_input"]').clear(); - cy.get('[data-cy="Quantity_input"]').type('5'); - cy.get('[data-cy="crudModelDefaultSaveBtn"] > .q-btn__content').click(); + cy.dataCy('Quantity_input').clear().type('5'); + cy.saveCrudModel(); cy.checkNotification('Data saved'); cy.get('.q-mb-md > .text-primary').click(); - cy.get('[data-cy="VnConfirm_confirm"] > .q-btn__content > .block').click(); + cy.confirmVnConfirm(); cy.checkNotification('Data saved'); }); }); diff --git a/test/cypress/integration/ticket/ticketPictures.spec.js b/test/cypress/integration/ticket/ticketPictures.spec.js index d8f48df32..1165b54bf 100644 --- a/test/cypress/integration/ticket/ticketPictures.spec.js +++ b/test/cypress/integration/ticket/ticketPictures.spec.js @@ -9,9 +9,9 @@ describe('TicketPictures', () => { cy.get(':nth-child(1) > .q-card > .content').should('be.visible'); cy.get('.content > .link').should('be.visible').click(); cy.dataCy('ItemDescriptor').should('exist'); - cy.get('[data-cy="vnLvColor:"]').should('be.visible'); - cy.get('[data-cy="vnLvColor:"]').should('be.visible'); - cy.get('[data-cy="vnLvTallos:"]').should('be.visible'); + cy.dataCy('vnLvColor:'); + cy.dataCy('vnLvColor:'); + cy.dataCy('vnLvTallos:'); cy.get('.q-mt-md').should('be.visible'); cy.get(':nth-child(1) > .q-card > .img-wrapper').should('be.visible'); }); diff --git a/test/cypress/integration/ticket/ticketRequest.spec.js b/test/cypress/integration/ticket/ticketRequest.spec.js index b9dc509ef..3b237826e 100644 --- a/test/cypress/integration/ticket/ticketRequest.spec.js +++ b/test/cypress/integration/ticket/ticketRequest.spec.js @@ -7,8 +7,7 @@ describe('TicketRequest', () => { }); it('Creates a new request', () => { - cy.dataCy('vnTableCreateBtn').should('exist'); - cy.dataCy('vnTableCreateBtn').click(); + cy.vnTableCreateBtn(); const data = { Description: { val: 'Purchase description' }, Atender: { val: 'buyerNick', type: 'select' }, diff --git a/test/cypress/integration/ticket/ticketSale.spec.js b/test/cypress/integration/ticket/ticketSale.spec.js index 6d84f214c..97a5aeaf7 100644 --- a/test/cypress/integration/ticket/ticketSale.spec.js +++ b/test/cypress/integration/ticket/ticketSale.spec.js @@ -16,9 +16,11 @@ describe('TicketSale', () => { cy.waitForElement('[data-cy="ticketEditManaProxy"]'); cy.dataCy('ticketEditManaProxy').should('exist'); cy.waitForElement('[data-cy="Price_input"]'); - cy.dataCy('Price_input').clear(); - cy.dataCy('Price_input').type(price); + cy.dataCy('Price_input').clear().type(price); + cy.intercept('POST', '**/api').as('saveMana'); + cy.dataCy('saveManaBtn').click(); + cy.wait('@saveMana').its('response.statusCode').should('eq', 200); handleVnConfirm(); cy.get('[data-col-field="price"]') @@ -34,7 +36,10 @@ describe('TicketSale', () => { cy.waitForElement('[data-cy="Disc_input"]'); cy.dataCy('Disc_input').clear(); cy.dataCy('Disc_input').type(discount); + cy.intercept('POST', '**/api').as('saveMana'); + cy.dataCy('saveManaBtn').click(); + cy.wait('@saveMana').its('response.statusCode').should('eq', 200); handleVnConfirm(); cy.get('[data-col-field="discount"]') @@ -82,12 +87,12 @@ describe('TicketSale', () => { selectFirstRow(); cy.dataCy('ticketSaleMoreActionsDropdown').click(); cy.dataCy('createClaimItem').click(); - cy.dataCy('VnConfirm_confirm').click(); + cy.confirmVnConfirm(); cy.url().should('contain', 'claim/'); // Delete created claim to avoid cluttering the database cy.dataCy('descriptor-more-opts').click(); cy.dataCy('deleteClaim').click(); - cy.dataCy('VnConfirm_confirm').click(); + cy.confirmVnConfirm(); }); }); describe('Free ticket #31', () => { @@ -138,8 +143,10 @@ describe('TicketSale', () => { cy.waitForElement('[data-cy="ticketSaleDiscountInput"]'); cy.dataCy('ticketSaleDiscountInput').find('input').focus(); cy.dataCy('ticketSaleDiscountInput').find('input').type('10'); + cy.intercept('POST', '**/api').as('saveMana'); + cy.dataCy('saveManaBtn').click(); - cy.waitForElement('.q-notification__message'); + cy.wait('@saveMana').its('response.statusCode').should('eq', 200); cy.checkNotification('Data saved'); cy.dataCy('ticketSaleMoreActionsDropdown').should('be.disabled'); }); @@ -148,7 +155,7 @@ describe('TicketSale', () => { selectFirstRow(); cy.dataCy('ticketSaleMoreActionsDropdown').click(); cy.dataCy('createClaimItem').click(); - cy.dataCy('VnConfirm_confirm').click(); + cy.confirmVnConfirm(); cy.checkNotification('Future ticket date not allowed'); }); @@ -194,9 +201,6 @@ function selectFirstRow() { cy.get(firstRow).find('.q-checkbox__inner').click(); } function handleVnConfirm() { - cy.get('[data-cy="VnConfirm_confirm"]').click(); - cy.waitForElement('.q-notification__message'); - - cy.get('.q-notification__message').should('be.visible'); + cy.confirmVnConfirm(); cy.checkNotification('Data saved'); } diff --git a/test/cypress/integration/ticket/ticketService.spec.js b/test/cypress/integration/ticket/ticketService.spec.js index 4ffc7f731..5bf8e2aab 100644 --- a/test/cypress/integration/ticket/ticketService.spec.js +++ b/test/cypress/integration/ticket/ticketService.spec.js @@ -9,17 +9,14 @@ describe('TicketService', () => { it('Add and remove service', () => { cy.get('.q-page').should('be.visible'); cy.addBtnClick(); - cy.get('[data-cy="Description_icon"]').click(); - cy.get('[data-cy="Description_input"]').clear(); - cy.get('[data-cy="Description_input"]').type('test'); - cy.get('[data-cy="FormModelPopup_save"] > .q-btn__content > .block').click(); + cy.dataCy('Description_icon').click(); + cy.dataCy('Description_input').clear().type('test'); + cy.saveFormModel(); cy.selectOption('[data-cy="Description_select"]', 'test'); - cy.get('[data-cy="Quantity_input"]').clear('1'); - cy.get('[data-cy="Quantity_input"]').type('1'); - cy.get('[data-cy="Price_input"]').clear('2'); - cy.get('[data-cy="Price_input"]').type('2'); - cy.get('[data-cy="crudModelDefaultSaveBtn"] > .q-btn__content > .block').click(); + cy.dataCy('Quantity_input').clear().type('1'); + cy.dataCy('Price_input').clear().type('2'); + cy.saveCrudModel(); cy.checkNotification('Data saved'); cy.get(':nth-child(5) > .q-icon').click(); }); diff --git a/test/cypress/integration/ticket/ticketTracking.spec.js b/test/cypress/integration/ticket/ticketTracking.spec.js index 53bf6704e..f351ee0a1 100644 --- a/test/cypress/integration/ticket/ticketTracking.spec.js +++ b/test/cypress/integration/ticket/ticketTracking.spec.js @@ -9,11 +9,11 @@ describe('Ticket tracking', () => { it('Add new tracking', () => { cy.get('.q-page').should('be.visible'); - cy.firstRow('worker').find('span').should('have.class', 'link').click(); + cy.getRowCol('worker').find('span').should('have.class', 'link').click(); cy.dataCy('WorkerDescriptor').should('exist'); - cy.get('[data-cy="vnTableCreateBtn"] > .q-btn__content > .q-icon').click(); + cy.vnTableCreateBtn(); cy.selectOption('.q-field--float [data-cy="State_select"]', 'OK').click(); - cy.get('[data-cy="FormModelPopup_save"] > .q-btn__content > .block').click(); + cy.saveFormModel(); cy.get( ':last-child > [data-col-field="state"] > [data-cy="vnTableCell_state"]', ).should('have.text', 'OK'); diff --git a/test/cypress/integration/vnComponent/crudModel.commands.js b/test/cypress/integration/vnComponent/crudModel.commands.js new file mode 100644 index 000000000..9d08f064a --- /dev/null +++ b/test/cypress/integration/vnComponent/crudModel.commands.js @@ -0,0 +1,3 @@ +Cypress.Commands.add('saveCrudModel', () => + cy.dataCy('crudModelDefaultSaveBtn').should('exist').click(), +); diff --git a/test/cypress/integration/vnComponent/formModel.commands.js b/test/cypress/integration/vnComponent/formModel.commands.js new file mode 100644 index 000000000..2814b0091 --- /dev/null +++ b/test/cypress/integration/vnComponent/formModel.commands.js @@ -0,0 +1,3 @@ +Cypress.Commands.add('saveFormModel', () => + cy.dataCy('FormModelPopup_save').should('exist').click(), +); diff --git a/test/cypress/integration/vnComponent/vnConfirm.commands.js b/test/cypress/integration/vnComponent/vnConfirm.commands.js new file mode 100644 index 000000000..9f93967d6 --- /dev/null +++ b/test/cypress/integration/vnComponent/vnConfirm.commands.js @@ -0,0 +1,3 @@ +Cypress.Commands.add('confirmVnConfirm', () => + cy.dataCy('VnConfirm_confirm').should('exist').click(), +); diff --git a/test/cypress/integration/vnComponent/vnTable.commands.js b/test/cypress/integration/vnComponent/vnTable.commands.js index 15cbf6f9a..6c7e71e13 100644 --- a/test/cypress/integration/vnComponent/vnTable.commands.js +++ b/test/cypress/integration/vnComponent/vnTable.commands.js @@ -1,3 +1,16 @@ -Cypress.Commands.add('firstRow', (field, index = 1) => - cy.get(`:nth-child(${index}) > [data-col-field="${field}"]`), +Cypress.Commands.add('getRow', (index = 1) => + cy.get(`.vnTable .q-virtual-scroll__content tr:nth-child(${index})`), +); +Cypress.Commands.add('getRowCol', (field, index = 1) => + cy.get( + `.vnTable .q-virtual-scroll__content > :nth-child(${index}) > [data-col-field="${field}"]`, + ), +); + +Cypress.Commands.add('vnTableCreateBtn', () => + cy.dataCy('vnTableCreateBtn').should('exist').click(), +); + +Cypress.Commands.add('waitTableScrollLoad', () => + cy.waitForElement('[data-q-vs-anchor]'), ); diff --git a/test/cypress/support/commands.js b/test/cypress/support/commands.js index 7ed6ef238..fe0469f9e 100755 --- a/test/cypress/support/commands.js +++ b/test/cypress/support/commands.js @@ -429,8 +429,29 @@ Cypress.Commands.add('searchByLabel', (label, value) => { cy.get(`[label="${label}"] > .q-field > .q-field__inner`).type(`${value}{enter}`); }); -Cypress.Commands.add('dataCy', (tag, attr = 'data-cy') => { - return cy.get(`[${attr}="${tag}"]`); +Cypress.Commands.add('dataCy', (tag, attr = 'data-cy', options = {}) => { + let chain = cy.get(`[${attr}="${tag}"]`).should('be.visible'); + + // Procesar cada opción y encadenar los comandos correspondientes + Object.entries(options).forEach(([key, value]) => { + switch (key) { + case 'click': + if (value) chain = chain.click(); + break; + case 'type': + chain = chain.type(value); + break; + case 'clear': + if (value) chain = chain.clear(); + break; + case 'should': + chain = chain.should(value); + break; + // Puedes añadir más casos según necesites + } + }); + + return chain; }); Cypress.Commands.add('addBtnClick', () => { @@ -610,7 +631,3 @@ Cypress.Commands.add('checkQueryParams', (expectedParams = {}) => { } }); }); - -Cypress.Commands.add('waitTableScrollLoad', () => - cy.waitForElement('[data-q-vs-anchor]'), -);