Files
THE-TIP-TOP/frontend/src/test/fonctionnel/DefinirMotDePasse.test.jsx
Emma781227 2201446ee6 changement
2026-09-14 22:30:40 +02:00

57 lines
2.3 KiB
JavaScript

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!' })
)
})
})