From 5c2b6c9eddb416aaee547a4a736cd20cd58bc8d0 Mon Sep 17 00:00:00 2001 From: Yisroel Baum Date: Sat, 18 Apr 2026 23:04:39 +0300 Subject: [PATCH] cypress tests for bulk add children --- cypress/e2e/adminTextBulkAdd.cy.js | 85 ++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 cypress/e2e/adminTextBulkAdd.cy.js diff --git a/cypress/e2e/adminTextBulkAdd.cy.js b/cypress/e2e/adminTextBulkAdd.cy.js new file mode 100644 index 0000000..03159a2 --- /dev/null +++ b/cypress/e2e/adminTextBulkAdd.cy.js @@ -0,0 +1,85 @@ +describe('Bulk add children on the admin text detail page', () => { + beforeEach(() => { + cy.exec('npm run db:seed') + cy.intercept('GET', '/api/texts/0').as('getText') + cy.intercept('GET', '/api/nodes/0').as('getNodes') + cy.visit('/admin/texts/0') + cy.wait('@getText') + cy.wait('@getNodes') + }) + + afterEach(() => { + cy.exec('npm run db:wipe') + }) + + it('shows a "Bulk add children" button on each node', () => { + cy.get('#text-detail li').each(($li) => { + cy.wrap($li).find('button.bulk-add-children').should('exist') + }) + }) + + 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().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().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') + cy.get('#text-detail > ul > li').first().children('input.bulk-count').should('not.exist') + cy.get('#text-detail > ul > li').first().children('button.save-bulk').should('not.exist') + }) + + 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().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() + cy.wait('@bulkCreate').its('response.statusCode').should('eq', 201) + cy.wait('@getNodesRefresh') + cy.get('#text-detail li').should('contain', 'Page 1') + cy.get('#text-detail li').should('contain', 'Page 2') + cy.get('#text-detail li').should('contain', 'Page 3') + }) + + 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().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) + }) + + 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().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) + }) + + 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().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() + cy.wait('@bulkCreate') + cy.wait('@getNodesRefresh') + cy.intercept('GET', '/api/texts/0').as('getTextReload') + cy.intercept('GET', '/api/nodes/0').as('getNodesReload') + cy.reload() + cy.wait('@getTextReload') + cy.wait('@getNodesReload') + cy.get('#text-detail li').should('contain', 'Page 1') + cy.get('#text-detail li').should('contain', 'Page 2') + cy.get('#text-detail li').should('contain', 'Page 3') + }) +})