[0m
build · gpt-5.3-codex [0m
PD-105 — Revue des Tests¶
Résumé¶
| Critère | Statut |
|---|---|
| Couverture nominale | ✅ |
| Couverture erreurs | ✅ |
| Qualité assertions | ⚠️ |
| Isolation tests | ⚠️ |
Verdict : ⚠️ RÉSERVES
Points positifs¶
- Bonne couverture globale sur les modules PD-105 (
services/notificationstrès élevé,notificationStoreà 100% statements). - Les invariants métier clés sont explicitement testés (iOS only, déduplication, mark-as-read, navigation/fallback).
- Les cas d’erreur importants sont présents: permissions refusées, échec token, fallback
ACCESS_REVOKED, données manquantes. - Les assertions visibles sont plutôt spécifiques (
toBeNull,not.toHaveBeenCalled, checks de navigation/fallback), pas uniquement des assertions vagues. - La séparation par responsabilités est saine: service, store, handlers, resolver testés indépendamment.
Points à améliorer¶
| ID | Description | Fichier | Gravité |
|---|---|---|---|
| T-01 | Renforcer l’isolation d’environnement (Platform.OS, singleton service) avec restauration systématique en afterEach pour éviter les effets de bord inter-tests. | notificationService.spec.ts | MAJEUR |
| T-02 | Sur les cas permissions refusées/échec token, ajouter des assertions de non-régression sur les appels exacts (requestPermissionsAsync, getExpoPushTokenAsync, listeners) et le nombre d’invocations. | notificationService.spec.ts | MINEUR |
| T-03 | Le test de sérialisation PQueue doit prouver l’ordre strict et l’absence de concurrence (timestamps/ordre d’exécution), pas seulement “a été appelé”. | notificationStore.spec.ts | MAJEUR |
| T-04 | Le test de persistance Zustand doit vérifier un cycle complet save/reload (réhydratation) et cohérence notifications + unreadCount après redémarrage simulé. | notificationStore.spec.ts | MAJEUR |
| T-05 | Ajouter un test d’idempotence pour handleNotificationResponse (double tap / événement répété) afin de sécuriser markAsRead et navigation unique. | handlers.spec.ts | MINEUR |
| T-06 | Compléter les edge cases resolver avec valeurs invalides (targetId vide, type avec espaces, payload partiel) pour durcir la robustesse parsing. | resolver.spec.ts | MINEUR |
Couverture par invariant¶
| Invariant | Tests | Statut |
|---|---|---|
| INV-105-01 | Rejet initialisation Android (TC-NOTIF-02) | ✅ |
| INV-105-03 | Notification des listeners token + unsubscribe (TC-NOTIF-05) | ✅ |
| INV-105-05 | Silent notification sans log d’alerte (handleForeground) | ✅ |
| INV-105-08 | Déduplication store + handlers | ✅ |
| INV-105-09 | markAsRead décrémente sans passer sous 0 | ✅ |
| INV-105-10 | Navigation contexte cible + marquage lu sur réponse | ✅ |
Globalement, la suite est solide et proche d’un niveau CONFORME, mais je maintiens RÉSERVES tant que l’isolation (état global/singleton) et les preuves d’ordonnancement/persistance ne sont pas durcies.