Attainly/frontend/website/cypress/e2e/signup.cy.ts

63 lines
2 KiB
TypeScript

describe('email signup', () => {
beforeEach(() => {
cy.intercept('GET', '**/api/me', {
statusCode: 401,
body: { error: 'unauthenticated' },
}).as('me')
})
it('requests a confirmation email and shows the check-email page', () => {
cy.intercept('POST', '**/api/signup', (request) => {
expect(request.headers.accept).to.equal('application/json')
expect(request.body).to.deep.equal({ email: 'user@example.com' })
request.reply({ statusCode: 201 })
}).as('signup')
cy.visit('/signup')
cy.get('#signup-email').type(' user@example.com ')
cy.get('form').submit()
cy.wait('@signup')
cy.location('pathname').should('equal', '/check-email')
cy.get('h1').should('have.text', 'Check your email')
cy.contains('We sent you a link to confirm your signup.').should('be.visible')
})
it('validates the email before submitting', () => {
cy.intercept('POST', '**/api/signup').as('signup')
cy.visit('/signup')
cy.get('#signup-email').type('not-an-email')
cy.get('form').submit()
cy.get('#signup-email-error')
.should('have.text', 'Enter a valid email address.')
.and('be.visible')
cy.get('#signup-email').should('have.attr', 'aria-invalid', 'true')
cy.get('@signup.all').should('have.length', 0)
cy.location('pathname').should('equal', '/signup')
})
it('shows backend signup errors', () => {
cy.intercept('POST', '**/api/signup', {
statusCode: 409,
body: { error: 'user@example.com already has an account' },
}).as('signup')
cy.visit('/signup')
cy.get('#signup-email').type('user@example.com')
cy.get('form').submit()
cy.wait('@signup')
cy.get('[role="alert"]')
.should('have.text', 'user@example.com already has an account')
.and('be.visible')
cy.location('pathname').should('equal', '/signup')
})
it('redirects direct check-email visits back to signup', () => {
cy.visit('/check-email')
cy.location('pathname').should('equal', '/signup')
})
})