L'écran de changement imposé redemandait le mot de passe provisoire qui venait d'être vérifié, sans champ identifiant. Un gestionnaire de mots de passe y collait un ancien mot de passe du site : /auth/password répondait 401 « Identifiants invalides », et le message unique accusait aussi la politique de mot de passe. Constaté en rec et en dev sur les comptes nominatifs. - AuthService garde en mémoire le mot de passe d'une connexion qui impose le changement, rendu une seule fois par takeProvisionalPassword() et effacé avec la session. - Le champ « Mot de passe actuel » ne s'affiche que si ce mot de passe manque (page rechargée) ou vient d'être refusé. - Champ identifiant masqué pour les gestionnaires de mots de passe. - Messages distincts pour 401, 422 et le reste, liste des critères en direct.
22 lines
868 B
TypeScript
22 lines
868 B
TypeScript
import { expect, test } from '@playwright/test';
|
|
|
|
import { creerCompteTemporaire, nouveauMotDePasse } from '../support/api';
|
|
import { seConnecter } from '../support/session';
|
|
|
|
test('impose le changement du mot de passe temporaire avant le tableau de bord', async ({
|
|
page,
|
|
}) => {
|
|
const compte = await creerCompteTemporaire('lecteur');
|
|
|
|
await seConnecter(page, compte);
|
|
await expect(page).toHaveURL(/\/change-password$/);
|
|
await expect(page.getByRole('heading', { name: 'Nouveau mot de passe' })).toBeVisible();
|
|
|
|
await expect(page.getByLabel('Mot de passe actuel')).toHaveCount(0);
|
|
await page.getByLabel('Nouveau mot de passe').fill(nouveauMotDePasse());
|
|
await page.getByRole('button', { name: 'Valider' }).click();
|
|
|
|
await expect(page).toHaveURL(/\/dashboard$/);
|
|
await expect(page.getByRole('heading', { name: "Vue d'ensemble" })).toBeVisible();
|
|
});
|