changement
This commit is contained in:
56
frontend/src/test/fonctionnel/DefinirMotDePasse.test.jsx
Normal file
56
frontend/src/test/fonctionnel/DefinirMotDePasse.test.jsx
Normal file
@@ -0,0 +1,56 @@
|
||||
import { describe, it, expect, vi, beforeEach } from 'vitest'
|
||||
import { screen } from '@testing-library/react'
|
||||
import userEvent from '@testing-library/user-event'
|
||||
import DefinirMotDePasse from '../../pages/DefinirMotDePasse'
|
||||
import { resetPasswordApi } from '../../services/auth'
|
||||
import { renderWithProviders } from '../renderWithProviders'
|
||||
|
||||
vi.mock('../../services/auth', () => ({
|
||||
resetPasswordApi: vi.fn(),
|
||||
}))
|
||||
|
||||
async function remplir(password, confirmPassword = password) {
|
||||
await userEvent.type(screen.getByLabelText(/^nouveau mot de passe/i), password)
|
||||
await userEvent.type(screen.getByLabelText(/^confirmer/i), confirmPassword)
|
||||
await userEvent.click(screen.getByRole('button', { name: /enregistrer/i }))
|
||||
}
|
||||
|
||||
describe('DefinirMotDePasse', () => {
|
||||
beforeEach(() => vi.clearAllMocks())
|
||||
|
||||
it('affiche les règles du mot de passe', () => {
|
||||
const { container } = renderWithProviders(<DefinirMotDePasse />, { route: '/definir-mot-de-passe/abc' })
|
||||
|
||||
expect(container.querySelector('[data-rule="length"]')).toBeInTheDocument()
|
||||
expect(container.querySelector('[data-rule="special"]')).toBeInTheDocument()
|
||||
})
|
||||
|
||||
it("refuse un mot de passe sans caractère spécial sans appeler l'API", async () => {
|
||||
renderWithProviders(<DefinirMotDePasse />, { route: '/definir-mot-de-passe/abc' })
|
||||
|
||||
await remplir('MonMotDePasse1')
|
||||
|
||||
expect(screen.getByText(/dont un caractère spécial/i)).toBeInTheDocument()
|
||||
expect(resetPasswordApi).not.toHaveBeenCalled()
|
||||
})
|
||||
|
||||
it('propose de demander un nouveau lien quand celui-ci a expiré', async () => {
|
||||
resetPasswordApi.mockRejectedValue(new Error('Lien de réinitialisation invalide ou expiré.'))
|
||||
renderWithProviders(<DefinirMotDePasse />, { route: '/definir-mot-de-passe/abc' })
|
||||
|
||||
await remplir('MonMotDePasse1!')
|
||||
|
||||
expect(await screen.findByRole('link', { name: /demander un nouveau lien/i })).toHaveAttribute('href', '/mot-de-passe-oublie')
|
||||
})
|
||||
|
||||
it('envoie un mot de passe conforme', async () => {
|
||||
resetPasswordApi.mockResolvedValue({ message: 'ok' })
|
||||
renderWithProviders(<DefinirMotDePasse />, { route: '/definir-mot-de-passe/abc' })
|
||||
|
||||
await remplir('MonMotDePasse1!')
|
||||
|
||||
expect(resetPasswordApi).toHaveBeenCalledWith(
|
||||
expect.objectContaining({ password: 'MonMotDePasse1!', confirmPassword: 'MonMotDePasse1!' })
|
||||
)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user