Files
vikunja/frontend/cypress/e2e/user/password-reset.spec.ts
2025-06-17 09:11:32 +00:00

59 lines
2.1 KiB
TypeScript

import {UserFactory, type UserAttributes} from '../../factories/user'
import {TokenFactory, type TokenAttributes} from '../../factories/token'
context('Password Reset', () => {
let user: UserAttributes
beforeEach(() => {
UserFactory.truncate()
TokenFactory.truncate()
user = UserFactory.create(1)[0] as UserAttributes
})
it('Should allow a user to reset their password with a valid token', () => {
const tokenArray = TokenFactory.create(1, {user_id: user.id as number, kind: 1})
const token: TokenAttributes = tokenArray[0] as TokenAttributes
cy.visit(`/?userPasswordReset=${token.token}`)
cy.url().should('include', `/password-reset?userPasswordReset=${token.token}`)
const newPassword = 'newSecurePassword123'
cy.get('input[id=password]').type(newPassword)
cy.get('button').contains('Reset your password').click()
cy.get('.message.success').should('contain', 'The password was updated successfully.')
cy.get('.button').contains('Login').click()
cy.url().should('include', '/login')
// Try to login with the new password
cy.get('input[id=username]').type(user.username)
cy.get('input[id=password]').type(newPassword)
cy.get('.button').contains('Login').click()
cy.url().should('not.include', '/login')
})
it('Should show an error for an invalid token', () => {
cy.visit('/?userPasswordReset=invalidtoken123')
cy.url().should('include', '/password-reset?userPasswordReset=invalidtoken123')
// Attempt to reset password
const newPassword = 'newSecurePassword123'
cy.get('input[id=password]').type(newPassword)
cy.get('button').contains('Reset your password').click()
cy.get('.message').should('contain', 'Invalid token')
})
it('Should redirect to login if no token is present in query param when visiting /password-reset directly', () => {
cy.visit('/password-reset')
cy.url().should('not.include', '/password-reset')
cy.wait(1000) // Wait for the redirect to happen - this seems to be flaky in CI
cy.url().should('include', '/login')
})
it('Should redirect to login if userPasswordReset token is not present in query param when visiting root', () => {
cy.visit('/')
cy.url().should('include', '/login')
})
})