99 lines
3.8 KiB
JavaScript
99 lines
3.8 KiB
JavaScript
describe('Create plan modal on the home page', () => {
|
|
beforeEach(() => {
|
|
cy.exec('npm run db:seed')
|
|
cy.loginAsUser()
|
|
cy.intercept('GET', '/api/texts').as('getTexts')
|
|
cy.visit('/home')
|
|
cy.wait('@getTexts')
|
|
})
|
|
|
|
afterEach(() => {
|
|
cy.exec('npm run db:wipe')
|
|
})
|
|
|
|
it('shows a "Create plan" button on each text', () => {
|
|
cy.get('#texts-list li').each((textItem) => {
|
|
cy.wrap(textItem).find('button.create-plan').should('exist')
|
|
})
|
|
})
|
|
|
|
it('hides the create plan modal by default', () => {
|
|
cy.get('#create-plan-modal').should('not.be.visible')
|
|
})
|
|
|
|
it('shows the modal when clicking "Create plan"', () => {
|
|
cy.get('#texts-list li').first()
|
|
.find('button.create-plan').click()
|
|
cy.get('#create-plan-modal').should('be.visible')
|
|
})
|
|
|
|
it('modal contains name, date start, date end, save, cancel', () => {
|
|
cy.get('#texts-list li').first()
|
|
.find('button.create-plan').click()
|
|
cy.get('#create-plan-modal input.plan-name').should('be.visible')
|
|
cy.get('#create-plan-modal input.plan-date-start')
|
|
.should('be.visible')
|
|
cy.get('#create-plan-modal input.plan-date-end')
|
|
.should('be.visible')
|
|
cy.get('#create-plan-modal button.save-plan').should('be.visible')
|
|
cy.get('#create-plan-modal button.cancel-plan').should('be.visible')
|
|
})
|
|
|
|
it('hides the modal when clicking "Cancel"', () => {
|
|
cy.get('#texts-list li').first()
|
|
.find('button.create-plan').click()
|
|
cy.get('#create-plan-modal').should('be.visible')
|
|
cy.get('#create-plan-modal button.cancel-plan').click()
|
|
cy.get('#create-plan-modal').should('not.be.visible')
|
|
})
|
|
|
|
it('submits plan details to /api/plans', () => {
|
|
cy.intercept('POST', '/api/plans').as('createPlan')
|
|
cy.get('#texts-list li').first()
|
|
.find('button.create-plan').click()
|
|
cy.get('#create-plan-modal input.plan-name')
|
|
.type('My reading plan')
|
|
cy.get('#create-plan-modal input.plan-date-start')
|
|
.type('2025-01-01')
|
|
cy.get('#create-plan-modal input.plan-date-end')
|
|
.type('2025-01-31')
|
|
cy.get('#create-plan-modal button.save-plan').click()
|
|
cy.wait('@createPlan').then((createPlanRequest) => {
|
|
expect(createPlanRequest.response.statusCode).to.eq(201)
|
|
expect(createPlanRequest.request.body).to.deep.equal({
|
|
userId: 0,
|
|
textId: 0,
|
|
name: 'My reading plan',
|
|
dateStart: '2025-01-01',
|
|
dateEnd: '2025-01-31',
|
|
})
|
|
})
|
|
})
|
|
|
|
it('closes the modal after successful submit', () => {
|
|
cy.intercept('POST', '/api/plans').as('createPlan')
|
|
cy.get('#texts-list li').first()
|
|
.find('button.create-plan').click()
|
|
cy.get('#create-plan-modal input.plan-name')
|
|
.type('Another plan')
|
|
cy.get('#create-plan-modal input.plan-date-start')
|
|
.type('2025-02-01')
|
|
cy.get('#create-plan-modal input.plan-date-end')
|
|
.type('2025-02-28')
|
|
cy.get('#create-plan-modal button.save-plan').click()
|
|
cy.wait('@createPlan')
|
|
cy.get('#create-plan-modal').should('not.be.visible')
|
|
})
|
|
|
|
it('does not submit if name is empty', () => {
|
|
cy.intercept('POST', '/api/plans').as('createPlan')
|
|
cy.get('#texts-list li').first()
|
|
.find('button.create-plan').click()
|
|
cy.get('#create-plan-modal input.plan-date-start')
|
|
.type('2025-01-01')
|
|
cy.get('#create-plan-modal input.plan-date-end')
|
|
.type('2025-01-31')
|
|
cy.get('#create-plan-modal button.save-plan').click()
|
|
cy.get('@createPlan.all').should('have.length', 0)
|
|
})
|
|
})
|