PD-238 — Livrable Agent QA : Tests
Tâche 5 du manifest de décomposition Date : 2026-02-06 Agent : agent-qa-unit-integration (Claude)
Périmètre
src/modules/auth/mfa/services/__tests__/keycloak-admin.service.spec.ts src/modules/auth/mfa/services/__tests__/mfa-management.service.spec.ts src/modules/auth/services/__tests__/reauth.service.spec.ts test/mfa-management.e2e-spec.ts
Fichiers livrés
| Fichier | Lignes | Description |
keycloak-admin.service.spec.ts | 636 | Tests unitaires KeycloakAdminService |
mfa-management.service.spec.ts | 543 | Tests unitaires MfaManagementService |
reauth.service.spec.ts | 369 | Tests unitaires ReauthService |
mfa-management.e2e-spec.ts | 641 | Tests e2e des 6 endpoints |
Total : 2189 lignes de tests
Tests contractuels implémentés
Flux nominaux (TC-NOM-*)
| ID | Description | Fichier |
| TC-NOM-01 | GET /user/mfa/status retourne | e2e-spec.ts |
| TC-NOM-02 | POST /user/mfa/totp/init retourne | e2e-spec.ts |
| TC-NOM-03 | POST /user/mfa/totp/verify active MFA + recoveryCodes | e2e-spec.ts |
| TC-NOM-04 | POST /user/mfa/disable désactive MFA avec reauth | e2e-spec.ts |
| TC-NOM-05 | POST /user/mfa/recovery/regenerate régénère codes | e2e-spec.ts |
| TC-NOM-06 | POST /auth/reauth retourne reauthToken | e2e-spec.ts |
Cas d'erreur (TC-ERR-*)
| ID | Description | Fichier |
| TC-ERR-01 | GET /user/mfa/status sans JWT → 401 | e2e-spec.ts |
| TC-ERR-02 | POST /user/mfa/totp/init sans JWT → 401 | e2e-spec.ts |
| TC-ERR-03 | POST /user/mfa/totp/verify sans JWT → 401 | e2e-spec.ts |
| TC-ERR-04 | Accès croisé MFA refusé | e2e-spec.ts |
| TC-ERR-05 | POST /user/mfa/disable sans reauth → 401 | e2e-spec.ts |
| TC-ERR-06 | POST /user/mfa/totp/verify code invalide → 400 | e2e-spec.ts |
| TC-ERR-07 | POST /user/mfa/recovery/regenerate sans reauth → 401 | e2e-spec.ts |
| TC-ERR-08 | Rate limit MFA → 429 | e2e-spec.ts |
| TC-ERR-13 | POST /auth/reauth password invalide → 401 | e2e-spec.ts |
| TC-ERR-14 | POST /auth/reauth sans JWT → 401 | e2e-spec.ts |
Invariants (TC-INV-*)
| ID | Description | Fichier |
| TC-INV-01 | Erreurs explicites sans effet partiel | mfa-management.service.spec.ts |
| TC-INV-02 | Secrets jamais dans logs | mfa-management.service.spec.ts |
| TC-INV-03 | Pas de stockage local secrets | mfa-management.service.spec.ts |
Approach de test
- Mock KeycloakAdminService pour les tests unitaires (pas d'appels réels)
- Mock Redis pour cache sessionId TOTP
- Tests e2e avec Supertest et TestingModule NestJS
- Couverture cible : 80% lignes et branches
Fichiers hors périmètre identifiés
Aucun.