PD-241 — Scénarios de tests contractuels
1. Références
- Spécification : PD-241-specification.md
- Epic : PD-182 AUTH
2. Matrice de couverture
| ID Invariant | ID Critère | ID Test | Couverture | Commentaire |
| INV-241-01 | CA-241-01 | TC-ERR-01 | Oui | Rejet sans JWT. |
| INV-241-02 | CA-241-02 | TC-NOM-01 | Oui | Invalidation session Keycloak. |
| INV-241-03 | CA-241-03 | TC-NOM-02 | Oui | Invalidation refresh token si présent. |
| INV-241-04 | CA-241-05 | TC-ERR-03 | Oui | Format d'erreur {error,message}. |
| INV-241-05 | CA-241-04 | TC-ERR-02 | Oui | Erreur explicite en cas d'échec Keycloak. |
| INV-241-06 | CA-241-06 | TC-INV-01 | NON TESTABLE | Effacement local PD-106. |
3. Scénarios de test – Flux nominaux
TEST-ID: TC-NOM-01
Référence spec: INV-241-02, CA-241-02, F-241-01
GIVEN
- Un utilisateur U1 authentifié avec JWT valide.
- Une session Keycloak active associée au JWT.
WHEN
- U1 appelle `POST /auth/logout` avec le JWT valide.
THEN
- La réponse indique un succès explicite.
AND
- Toute tentative de réutilisation du JWT est refusée côté serveur.
TEST-ID: TC-NOM-02
Référence spec: INV-241-03, CA-241-03, F-241-01
GIVEN
- Un utilisateur U1 authentifié avec JWT valide.
- Un refresh token valide associé à la session.
WHEN
- U1 appelle `POST /auth/logout` avec le JWT valide et le refresh token (si présent selon contrat).
THEN
- La réponse indique un succès explicite.
AND
- Toute tentative de réutilisation du refresh token est refusée côté serveur.
4. Scénarios de test – Cas d'erreur
TEST-ID: TC-ERR-01
Référence spec: ERR-241-UNAUTHENTICATED, CA-241-01, INV-241-01
GIVEN
- Aucun JWT valide.
WHEN
- Appel `POST /auth/logout`.
THEN
- Refus explicite `ERR-241-UNAUTHENTICATED`.
AND
- Aucune invalidation de session n'est effectuée.
TEST-ID: TC-ERR-02
Référence spec: ERR-241-LOGOUT-FAILED, CA-241-04, INV-241-05
GIVEN
- Un utilisateur U1 authentifié avec JWT valide.
- Une erreur déterministe injectée sur l'invalidation Keycloak.
WHEN
- U1 appelle `POST /auth/logout`.
THEN
- Refus explicite `ERR-241-LOGOUT-FAILED`.
AND
- La session Keycloak reste active.
TEST-ID: TC-ERR-03
Référence spec: INV-241-04, CA-241-05
GIVEN
- Une condition d'erreur (ex. ERR-241-UNAUTHENTICATED ou ERR-241-LOGOUT-FAILED).
WHEN
- L'API retourne l'erreur.
THEN
- Le format est strictement `{error: "ERR-241-*", message: "..."}`.
5. Tests d'invariants (non négociables)
| Invariant | Test(s) dédiés | Observable | Commentaire |
| INV-241-01 | TC-ERR-01 | 401 + ERR-241-UNAUTHENTICATED | JWT requis |
| INV-241-02 | TC-NOM-01 | Rejet de réutilisation JWT | Session Keycloak invalidée |
| INV-241-03 | TC-NOM-02 | Rejet de réutilisation refresh token | Refresh invalidé |
| INV-241-04 | TC-ERR-03 | Format | Conformité PD-106 |
| INV-241-05 | TC-ERR-02 | ERR-241-LOGOUT-FAILED | Erreur explicite |
| INV-241-06 | TC-INV-01 | N/A | Hors périmètre |
6. Tests de non-régression
| Test ID | Objet | Observable | Commentaire |
| TC-NR-01 | JWT requis | 401 sans JWT | Réutilise TC-ERR-01 |
| TC-NR-02 | Invalidation JWT | Réutilisation refusée | Réutilise TC-NOM-01 |
| TC-NR-03 | Invalidation refresh token | Réutilisation refusée | Réutilise TC-NOM-02 |
| TC-NR-04 | Erreur explicite Keycloak | ERR-241-LOGOUT-FAILED | Réutilise TC-ERR-02 |
7. Tests négatifs et adversariaux
| Test ID | Entrée invalide / abus | Résultat attendu | Observable |
| TC-NEG-01 | JWT expiré | ERR-241-UNAUTHENTICATED | Réponse erreur |
| TC-NEG-02 | Refresh token déjà révoqué | Refus de réutilisation | Réponse auth/invalid_token |
| TC-NEG-03 | Rafales d'appels logout | Réponses cohérentes (idempotence) | Statut HTTP + erreurs |
8. Observabilité requise pour les tests
- État système : session Keycloak invalide après logout (réutilisation refusée).
- Réponse API : format
{error, message} pour erreurs. - Journal d'audit : traces d'invalidation de session (si disponibles).
- Événement signé / horodaté : journal d'invalidation (si disponible).
- Export probatoire : N/A pour PD-241.
9. Règles non testables
| Règle | Raison | Impact |
| INV-241-06 / CA-241-06 | Effacement local de session côté client (PD-106) | Bloquant pour conformité globale si artefact PD-106 absent |
10. Verdict QA
- ⚠️ Testable partiellement (avec réserves listées)