describe('Bulk add children on the admin text detail page', () => { beforeEach(() => { cy.exec('npm run db:seed') cy.loginAsAdmin() 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().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().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') 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().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() 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().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) }) it('does not submit if count is empty', () => { cy.intercept('POST', '/api/nodes/bulk').as('bulkCreate') 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) }) 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().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) cy.wait('@getNodesRefresh') cy.get('#text-detail li').should('contain', 'Enter 1') cy.get('#text-detail li').should('contain', 'Enter 2') }) 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().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) cy.wait('@getNodesRefresh') cy.get('#text-detail li').should('contain', 'Title 1') cy.get('#text-detail li').should('contain', 'Title 2') }) 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().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() 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') }) })