From 793b0149b889a4171e4bc62176e36d0af16a3353 Mon Sep 17 00:00:00 2001 From: Yisroel Baum Date: Mon, 4 May 2026 10:03:54 +0300 Subject: [PATCH] activate node before clicking action buttons in tests --- cypress/e2e/adminText.cy.js | 20 ++++++++++++++++---- cypress/e2e/adminTextBulkAdd.cy.js | 24 ++++++++++++++++-------- cypress/e2e/adminTextLayout.cy.js | 1 + cypress/e2e/userText.cy.js | 2 +- cypress/support/commands.js | 5 +++++ 5 files changed, 39 insertions(+), 13 deletions(-) diff --git a/cypress/e2e/adminText.cy.js b/cypress/e2e/adminText.cy.js index 4e0893c..83415c2 100644 --- a/cypress/e2e/adminText.cy.js +++ b/cypress/e2e/adminText.cy.js @@ -32,7 +32,8 @@ describe('The admin text detail page', () => { }) it('clicking "Add child" reveals an inline form', () => { - cy.get('#text-detail li').first().children('button.add-child').click() + cy.get('#text-detail li').first().activateNode() + .children('button.add-child').click() cy.get('#text-detail li').first().children('input.child-title').should('be.visible') cy.get('#text-detail li').first().children('button.save-child').should('be.visible') }) @@ -41,7 +42,8 @@ describe('The admin text detail page', () => { cy.intercept('POST', '/api/nodes').as('createNode') cy.intercept('GET', '/api/nodes/0').as('getNodesRefresh') - cy.get('#text-detail > ul > li').first().children('button.add-child').click() + cy.get('#text-detail > ul > li').first().activateNode() + .children('button.add-child').click() cy.get('#text-detail > ul > li').first().children('input.child-title').type('New Child Node') cy.get('#text-detail > ul > li').first().children('button.save-child').click() @@ -55,7 +57,8 @@ describe('The admin text detail page', () => { cy.intercept('POST', '/api/nodes').as('createNode') cy.intercept('GET', '/api/nodes/0').as('getNodesRefresh') - cy.get('#text-detail > ul > li > ul > li').first().children('button.add-child').click() + cy.get('#text-detail > ul > li > ul > li').first().activateNode() + .children('button.add-child').click() cy.get('#text-detail > ul > li > ul > li').first().children('input.child-title').type('Nested Child Node') cy.get('#text-detail > ul > li > ul > li').first().children('button.save-child').click() @@ -69,6 +72,9 @@ describe('The admin text detail page', () => { cy.intercept('POST', '/api/nodes').as('createNode') cy.intercept('GET', '/api/nodes/0').as('getNodesRefresh') + cy.get('#text-detail > ul > li > ul > li') + .first() + .activateNode() cy.get('#text-detail > ul > li > ul > li') .first() .find('button.toggle-children') @@ -107,6 +113,7 @@ describe('The admin text detail page', () => { cy.get('#text-detail > ul > li') .first() + .activateNode() .children('button.add-child') .click() cy.get('#text-detail > ul > li') @@ -123,6 +130,7 @@ describe('The admin text detail page', () => { it('opening add-child on another node closes the first one', () => { cy.get('#text-detail > ul > li') .first() + .activateNode() .children('button.add-child') .click() cy.get('#text-detail > ul > li') @@ -132,6 +140,7 @@ describe('The admin text detail page', () => { cy.get('#text-detail > ul > li > ul > li') .first() + .activateNode() .children('button.add-child') .click() @@ -152,6 +161,7 @@ describe('The admin text detail page', () => { it('opening bulk-add closes an open add-child form', () => { cy.get('#text-detail > ul > li') .first() + .activateNode() .children('button.add-child') .click() cy.get('#text-detail > ul > li') @@ -161,6 +171,7 @@ describe('The admin text detail page', () => { cy.get('#text-detail > ul > li > ul > li') .first() + .activateNode() .children('button.bulk-add-children') .click() @@ -178,7 +189,8 @@ describe('The admin text detail page', () => { cy.intercept('POST', '/api/nodes').as('createNode') cy.intercept('GET', '/api/nodes/0').as('getNodesRefresh') - cy.get('#text-detail > ul > li').first().children('button.add-child').click() + cy.get('#text-detail > ul > li').first().activateNode() + .children('button.add-child').click() cy.get('#text-detail > ul > li').first().children('input.child-title').type('Persistent Child') cy.get('#text-detail > ul > li').first().children('button.save-child').click() diff --git a/cypress/e2e/adminTextBulkAdd.cy.js b/cypress/e2e/adminTextBulkAdd.cy.js index 47d3c7f..39b06d3 100644 --- a/cypress/e2e/adminTextBulkAdd.cy.js +++ b/cypress/e2e/adminTextBulkAdd.cy.js @@ -20,14 +20,16 @@ describe('Bulk add children on the admin text detail page', () => { }) it('clicking "Bulk add children" reveals inline form inputs', () => { - cy.get('#text-detail > ul > li').first().children('button.bulk-add-children').click() + cy.get('#text-detail > ul > li').first().activateNode() + .children('button.bulk-add-children').click() cy.get('#text-detail > ul > li').first().children('input.bulk-title').should('be.visible') cy.get('#text-detail > ul > li').first().children('input.bulk-count').should('be.visible') cy.get('#text-detail > ul > li').first().children('button.save-bulk').should('be.visible') }) it('clicking "Bulk add children" again hides the form', () => { - cy.get('#text-detail > ul > li').first().children('button.bulk-add-children').click() + cy.get('#text-detail > ul > li').first().activateNode() + .children('button.bulk-add-children').click() cy.get('#text-detail > ul > li').first().children('input.bulk-title').should('be.visible') cy.get('#text-detail > ul > li').first().children('button.bulk-add-children').click() cy.get('#text-detail > ul > li').first().children('input.bulk-title').should('not.exist') @@ -38,7 +40,8 @@ describe('Bulk add children on the admin text detail page', () => { it('can bulk add children to the root node', () => { cy.intercept('POST', '/api/nodes/bulk').as('bulkCreate') cy.intercept('GET', '/api/nodes/0').as('getNodesRefresh') - cy.get('#text-detail > ul > li').first().children('button.bulk-add-children').click() + cy.get('#text-detail > ul > li').first().activateNode() + .children('button.bulk-add-children').click() cy.get('#text-detail > ul > li').first().children('input.bulk-title').type('Page') cy.get('#text-detail > ul > li').first().children('input.bulk-count').type('3') cy.get('#text-detail > ul > li').first().children('button.save-bulk').click() @@ -51,7 +54,8 @@ describe('Bulk add children on the admin text detail page', () => { it('does not submit if title prefix is empty', () => { cy.intercept('POST', '/api/nodes/bulk').as('bulkCreate') - cy.get('#text-detail > ul > li').first().children('button.bulk-add-children').click() + cy.get('#text-detail > ul > li').first().activateNode() + .children('button.bulk-add-children').click() cy.get('#text-detail > ul > li').first().children('input.bulk-count').type('3') cy.get('#text-detail > ul > li').first().children('button.save-bulk').click() cy.get('@bulkCreate.all').should('have.length', 0) @@ -59,7 +63,8 @@ describe('Bulk add children on the admin text detail page', () => { it('does not submit if count is empty', () => { cy.intercept('POST', '/api/nodes/bulk').as('bulkCreate') - cy.get('#text-detail > ul > li').first().children('button.bulk-add-children').click() + cy.get('#text-detail > ul > li').first().activateNode() + .children('button.bulk-add-children').click() cy.get('#text-detail > ul > li').first().children('input.bulk-title').type('Page') cy.get('#text-detail > ul > li').first().children('button.save-bulk').click() cy.get('@bulkCreate.all').should('have.length', 0) @@ -68,7 +73,8 @@ describe('Bulk add children on the admin text detail page', () => { it('pressing Enter in the bulk-count input submits', () => { cy.intercept('POST', '/api/nodes/bulk').as('bulkCreate') cy.intercept('GET', '/api/nodes/0').as('getNodesRefresh') - cy.get('#text-detail > ul > li').first().children('button.bulk-add-children').click() + cy.get('#text-detail > ul > li').first().activateNode() + .children('button.bulk-add-children').click() cy.get('#text-detail > ul > li').first().children('input.bulk-title').type('Enter') cy.get('#text-detail > ul > li').first().children('input.bulk-count').type('2{enter}') cy.wait('@bulkCreate').its('response.statusCode').should('eq', 201) @@ -80,7 +86,8 @@ describe('Bulk add children on the admin text detail page', () => { it('pressing Enter in the bulk-title input submits', () => { cy.intercept('POST', '/api/nodes/bulk').as('bulkCreate') cy.intercept('GET', '/api/nodes/0').as('getNodesRefresh') - cy.get('#text-detail > ul > li').first().children('button.bulk-add-children').click() + cy.get('#text-detail > ul > li').first().activateNode() + .children('button.bulk-add-children').click() cy.get('#text-detail > ul > li').first().children('input.bulk-count').type('2') cy.get('#text-detail > ul > li').first().children('input.bulk-title').type('Title{enter}') cy.wait('@bulkCreate').its('response.statusCode').should('eq', 201) @@ -92,7 +99,8 @@ describe('Bulk add children on the admin text detail page', () => { it('bulk added nodes persist after page reload', () => { cy.intercept('POST', '/api/nodes/bulk').as('bulkCreate') cy.intercept('GET', '/api/nodes/0').as('getNodesRefresh') - cy.get('#text-detail > ul > li').first().children('button.bulk-add-children').click() + cy.get('#text-detail > ul > li').first().activateNode() + .children('button.bulk-add-children').click() cy.get('#text-detail > ul > li').first().children('input.bulk-title').type('Page') cy.get('#text-detail > ul > li').first().children('input.bulk-count').type('3') cy.get('#text-detail > ul > li').first().children('button.save-bulk').click() diff --git a/cypress/e2e/adminTextLayout.cy.js b/cypress/e2e/adminTextLayout.cy.js index a5e75cc..6d741a1 100644 --- a/cypress/e2e/adminTextLayout.cy.js +++ b/cypress/e2e/adminTextLayout.cy.js @@ -35,6 +35,7 @@ describe('The admin text detail page horizontal layout', () => { cy.get('#text-detail > ul > li') .first() + .activateNode() .children('button.add-child') .click() cy.get('#text-detail > ul > li') diff --git a/cypress/e2e/userText.cy.js b/cypress/e2e/userText.cy.js index 2318f07..7c3e379 100644 --- a/cypress/e2e/userText.cy.js +++ b/cypress/e2e/userText.cy.js @@ -30,7 +30,7 @@ describe('The user text detail page', () => { cy.visit('/texts/0') cy.wait('@getNodes') - cy.get('#text-detail > ul > li').first() + cy.get('#text-detail > ul > li').first().activateNode() .children('button.add-child').click() cy.get('#text-detail > ul > li').first() .children('input.child-title').type('My new child') diff --git a/cypress/support/commands.js b/cypress/support/commands.js index 1c1d028..af58025 100644 --- a/cypress/support/commands.js +++ b/cypress/support/commands.js @@ -17,3 +17,8 @@ Cypress.Commands.add('loginAsUser', () => { Cypress.Commands.add('loginAsSecondUser', () => { cy.login('user2@example.com', 'password2') }) + +Cypress.Commands.add('activateNode', { prevSubject: 'element' }, ($li) => { + cy.wrap($li).children('span').first().click() + return cy.wrap($li) +})