mirror of
https://github.com/go-vikunja/vikunja.git
synced 2026-04-26 15:15:19 +00:00
59 lines
2.1 KiB
TypeScript
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')
|
|
})
|
|
})
|