PD-105 - Scenarios de tests contractuels
1. References
- Specification :
PD-105-specification.md - Epic :
MOBILE-IOS (PD-195)
2. Matrice de couverture
| ID Invariant | ID Critere | ID Test | Couverture | Commentaire |
| INV-105-01 | CA-105-10 | TC-INV-01, TC-NOM-12 | Oui | Validation executee uniquement sur build EAS iOS avec APNs. |
| INV-105-02 | CA-105-11 | TC-NOM-11, TC-NEG-02 | Oui | Filtre strict des evenements hors doctrine. |
| INV-105-03 | CA-105-01, CA-105-02 | TC-NOM-01, TC-NOM-02 | Oui | Enregistrement initial et rotation couverts. |
| INV-105-04 | - | TC-ERR-09, TC-INV-04 | Oui | Revocation token lors logout explicite (pas de CA dedie). |
| INV-105-05 | CA-105-03 | TC-NOM-03, TC-NEG-03 | Oui | Silent sans alerte/son/vibration. |
| INV-105-06 | CA-105-04 | TC-NOM-04, TC-NEG-04 | Partielle | Cas HAUTE depend du catalogue officiel (H-105-04). |
| INV-105-07 | CA-105-07 | TC-NOM-08, TC-ERR-04, TC-NEG-01 | Oui | Rejet des payloads avec donnees sensibles. |
| INV-105-08 | CA-105-04, CA-105-05 | TC-NOM-04, TC-NOM-05, TC-INV-08 | Oui | Historisation locale avec champs obligatoires. |
| INV-105-09 | CA-105-05 | TC-NOM-05, TC-ERR-06 | Oui | Egalite stricte badge/non lus + reconciliation. |
| INV-105-10 | CA-105-06 | TC-NOM-06, TC-NOM-07, TC-ERR-05 | Oui | Navigation cible ou fallback obligatoire. |
| INV-105-11 | CA-105-08 | TC-NOM-09, TC-ERR-07 | Oui | Mesure evenement -> tentative APNs <= 5s. |
| INV-105-12 | CA-105-09 | TC-NOM-10 | Oui | Fiabilite alert >= 99% sur 30 jours glissants. |
| INV-105-13 | CA-105-10 | TC-NOM-12, TC-ERR-08 | Oui | Expo Go non recevable pour acceptation. |
| - | CA-105-12 | TC-NOM-13, TC-ERR-03 | Oui | Permission precedee d'un message de valeur probatoire. |
3. Scenarios de test - Flux nominaux
TEST-ID: TC-NOM-01
Reference spec: INV-105-03, CA-105-01, FN-105-01
GIVEN
- Device iOS physique avec build EAS valide
- Utilisateur U1 non authentifie puis login reussi
- Aucun token actif preexistant pour (U1, device D1)
WHEN
- L'utilisateur finalise le premier contexte authentifie
THEN
- Une trace backend montre un token APNs actif associe a (U1, D1)
AND
- L'enregistrement contient environnement et horodatage
- Aucun doublon actif pour (U1, D1)
TEST-ID: TC-NOM-02
Reference spec: INV-105-03, CA-105-02, FN-105-02
GIVEN
- Token T1 actif pour (U1, D1)
- Nouveau token APNs T2 detecte
WHEN
- L'application transmet T2 au backend
THEN
- T1 est marque inactif et T2 est marque actif
AND
- Les logs d'envoi ulterieurs ne ciblent jamais T1
TEST-ID: TC-NOM-03
Reference spec: INV-105-05, CA-105-03, FN-105-03
GIVEN
- Permission notifications activee ou non (indifferent pour silent)
- Evenement probatoire E-SYNC qualifie silent
WHEN
- Le backend emet une push silent vers D1
THEN
- Aucune banniere, aucun son, aucune vibration n'est observee
AND
- Un log de traitement background est present
- Les donnees locales ciblees sont synchronisees
TEST-ID: TC-NOM-04
Reference spec: INV-105-06, INV-105-08, CA-105-04, FN-105-04
GIVEN
- Permission notifications iOS accordee
- Evenement E-CRIT de criticite CRITIQUE
WHEN
- Le backend emet une notification alert
THEN
- iOS affiche une alerte visible a l'utilisateur
AND
- Le centre in-app cree une entree non lue
- L'entree contient notification_id unique, event_type, reception_at, read_status=false
TEST-ID: TC-NOM-05
Reference spec: INV-105-09, CA-105-05, FN-105-05
GIVEN
- Historique local contenant N notifications non lues
WHEN
- Le centre in-app est ouvert puis applique la regle de lecture definie
THEN
- Le compteur badge iOS est strictement egal au nombre de non lus restants
AND
- L'egalite est vraie apres refresh immediat
TEST-ID: TC-NOM-06
Reference spec: INV-105-10, CA-105-06, FN-105-06
GIVEN
- Notification N1 avec contexte cible resolvable
WHEN
- L'utilisateur tape N1 depuis systeme iOS ou centre in-app
THEN
- L'application ouvre l'ecran metier cible attendu
AND
- Un event de navigation auditable est journalise
TEST-ID: TC-NOM-07
Reference spec: INV-105-10, CA-105-06, FN-105-06
GIVEN
- Notification N2 avec contexte devenu indisponible
WHEN
- L'utilisateur tape N2
THEN
- L'application ouvre l'ecran detail de notification
AND
- Un message explicite d'indisponibilite contextuelle est affiche
TEST-ID: TC-NOM-08
Reference spec: INV-105-07, CA-105-07
GIVEN
- Jeu de payloads push emis en preprod sur 3 types d'evenements phase 1
WHEN
- Les payloads sont inspectes avant emission APNs
THEN
- Aucun payload ne contient titre document, identite explicite ou contenu juridique
AND
- Seuls identifiants opaques et metadonnees techniques minimales sont presents
TEST-ID: TC-NOM-09
Reference spec: INV-105-11, CA-105-08
GIVEN
- Horloge synchronisee (backend + systeme de mesure)
- Echantillon >= 100 evenements declencheurs horodates
WHEN
- Le backend traite chaque evenement et tente APNs
THEN
- Pour chaque cas, delai evenement->tentative APNs <= 5s
AND
- Le rapport affiche moyenne et p95 conformes au seuil
TEST-ID: TC-NOM-10
Reference spec: INV-105-12, CA-105-09
GIVEN
- Tableau metrique livraison alerts disponible sur 30 jours glissants
WHEN
- Le taux de livraison APNs des notifications alert est calcule
THEN
- Le taux global est >= 99%
AND
- Le perimetre inclut uniquement les notifications alert PD-105
TEST-ID: TC-NOM-11
Reference spec: INV-105-02, CA-105-11
GIVEN
- Catalogue des evenements exclus explicitement "non a notifier"
WHEN
- Une campagne de declenchement de ces evenements est executee
THEN
- Aucune emission APNs n'est observee
AND
- Les logs montrent un filtrage explicite des evenements exclus
TEST-ID: TC-NOM-12
Reference spec: INV-105-01, INV-105-13, CA-105-10
GIVEN
- Rapport de campagne d'acceptation push
WHEN
- Les metadonnees d'execution sont verifiees
THEN
- Les tests sont executes sur build EAS iOS
AND
- Aucune execution Expo Go n'est acceptee comme preuve contractuelle
TEST-ID: TC-NOM-13
Reference spec: CA-105-12, FN-105-07
GIVEN
- Installation fraiche (permission non encore demandee)
WHEN
- Le premier besoin d'alerte utilisateur est atteint
THEN
- Un ecran/message explicatif sur la valeur probatoire est affiche avant le prompt iOS
AND
- Le choix utilisateur est ensuite porte par le systeme iOS
4. Scenarios de test - Cas d'erreur
TEST-ID: TC-ERR-01
Reference spec: ERR-105-01
GIVEN
- Backend indisponible pendant l'enregistrement token
WHEN
- L'application tente l'enregistrement
THEN
- Aucun crash applicatif
- Echec journalise
AND
- Retentative planifiee selon politique de reprise
- Nouvelle tentative au prochain cycle activation/session
TEST-ID: TC-ERR-02
Reference spec: ERR-105-02
GIVEN
- Token rejete par APNs
WHEN
- Le backend recoit le rejet APNs
THEN
- Token marque invalide
- Envois ulterieurs vers ce token stoppes
AND
- Re-enregistrement requis au prochain token valide
TEST-ID: TC-ERR-03
Reference spec: ERR-105-03
GIVEN
- Permission notifications refusee par l'utilisateur
WHEN
- Un evenement alert est emis
THEN
- Aucune alerte visible cote iOS
- Aucun comportement intrusif en boucle
AND
- Point d'entree vers reglages iOS disponible
- Historique local continue pour evenements synchronisables
TEST-ID: TC-ERR-04
Reference spec: ERR-105-04
GIVEN
- Payload contenant une donnee sensible detectable
WHEN
- Le backend valide le payload avant emission
THEN
- Notification rejetee
- Aucun envoi APNs effectue
AND
- Evenement de securite journalise avec horodatage
TEST-ID: TC-ERR-05
Reference spec: ERR-105-05
GIVEN
- Notification existante avec contexte introuvable
WHEN
- L'utilisateur tape la notification
THEN
- Ouverture detail notification
- Message de fallback explicite
AND
- Notification reste traceable dans l'historique
TEST-ID: TC-ERR-06
Reference spec: ERR-105-06
GIVEN
- Desalignement badge systeme vs non lus detecte
WHEN
- L'application redemarre ou effectue un refresh
THEN
- Reconciliation immediate depuis historique local
- Badge recalcule = non lus
AND
- Operation journalisee pour audit
TEST-ID: TC-ERR-07
Reference spec: ERR-105-07
GIVEN
- Evenement declencheur avec delai d'envoi > 5s
WHEN
- Le controle NFR est applique
THEN
- Incident metrique enregistre
- Cas marque non conforme NFR
AND
- Presence dans reporting de suivi
TEST-ID: TC-ERR-08
Reference spec: ERR-105-08
GIVEN
- Campagne de test push executee via Expo Go
WHEN
- Le dossier d'acceptation est audite
THEN
- Resultat declare non recevable pour PD-105
AND
- Exigence de reexecution sur build EAS iOS
TEST-ID: TC-ERR-09
Reference spec: INV-105-04
GIVEN
- Token actif pour session utilisateur en cours
WHEN
- L'utilisateur execute une deconnexion explicite
THEN
- Le backend revoque le token (etat inactif/revoque)
AND
- Aucun envoi APNs ulterieur vers ce token
5. Tests d'invariants (non negociables)
| Invariant | Test(s) dedies | Observable | Commentaire |
| INV-105-01 | TC-INV-01 | Campagne limitee a iOS + APNs | Verifie le perimetre d'execution. |
| INV-105-02 | TC-NOM-11, TC-NEG-02 | Zero emission pour evenements exclus | Anti-bruit contractuel. |
| INV-105-03 | TC-NOM-01, TC-NOM-02 | Etat token actif/inactif en backend | Joignabilite maintenue. |
| INV-105-04 | TC-ERR-09, TC-INV-04 | Revocation a logout | Fin de session sans envois residuels. |
| INV-105-05 | TC-NOM-03, TC-NEG-03 | Absence totale d'alerte/son/vibration | Comportement silent strict. |
| INV-105-06 | TC-NOM-04, TC-NEG-04 | Alert reservee a CRITIQUE/HAUTE-CRITIQUE | Cas HAUTE partiel sans catalogue complet. |
| INV-105-07 | TC-NOM-08, TC-ERR-04, TC-NEG-01 | Payload sans donnees sensibles | Controle securite pre-emission. |
| INV-105-08 | TC-NOM-04, TC-INV-08 | Champs historiques obligatoires et uniques | Tracabilite locale. |
| INV-105-09 | TC-NOM-05, TC-ERR-06 | Badge = non lus | Cohesion permanente. |
| INV-105-10 | TC-NOM-06, TC-NOM-07 | Cible ouverte ou fallback detail | Aucun tap sans issue. |
| INV-105-11 | TC-NOM-09, TC-ERR-07 | Delai <= 5s ou non-conformite tracee | Contrainte NFR. |
| INV-105-12 | TC-NOM-10 | Taux livraison 30j >= 99% | Fiabilite operationnelle. |
| INV-105-13 | TC-NOM-12, TC-ERR-08 | EAS accepte, Expo Go rejete | Contexte de validation impose. |
Tests dedies supplementaires:
| Invariant | Test ID | Description courte |
| INV-105-01 | TC-INV-01 | Rejet de toute preuve non iOS/APNs. |
| INV-105-04 | TC-INV-04 | Verification de revocation immediate au logout. |
| INV-105-08 | TC-INV-08 | Validation schema historique local complet. |
6. Tests de non-regression
| Test ID | Objet | Observable | Commentaire |
| TC-NR-01 | Repetition enregistrement token sur 10 relogins | Un seul token actif par couple (U,D) | Evite duplication apres evolutions auth. |
| TC-NR-02 | Sequence rotation T1->T2->T3 | Seul T3 actif, T1/T2 inactifs | Verifie invalidation cumulative. |
| TC-NR-03 | 50 notifications mixtes silent/alert | Historique coherent + badge exact | Verifie stabilite sur charge fonctionnelle. |
| TC-NR-04 | Tap depuis app terminee | Deep link/fallback fonctionnel | Couvre cycle cold start. |
| TC-NR-05 | Reconciliation badge apres kill/restart | Badge recalcule identique au non-lu local | Evite desalignement persistant. |
| TC-NR-06 | Campagne events exclus repetee | Zero APNs emis | Verifie absence de regression anti-bruit. |
7. Tests negatifs et adversariaux
| Test ID | Entree invalide / abus | Resultat attendu | Observable |
| TC-NEG-01 | Payload contenant PII (nom, titre document, extrait juridique) | Rejet pre-emission | Log securite + zero appel APNs |
| TC-NEG-02 | Evenement explicitement "non a notifier" force en entree | Aucune emission push | Trace filtrage doctrine |
| TC-NEG-03 | Silent push avec champs d'alerte injectes | Classement/refus selon politique securite, aucune alerte utilisateur | Absence banniere/son et journal de controle |
| TC-NEG-04 | Evenement HAUTE non catalogue en phase 1 | NON TESTABLE tant que catalogue non fige; verdict reserve | Evidence manque de referentiel |
| TC-NEG-05 | Token APNs malforme | Rejet backend + pas d'activation token | Reponse API erreur + logs validation |
| TC-NEG-06 | Tap notification avec identifiant opaque inconnu | Ouverture fallback detail, pas de crash | Ecran fallback + log navigation degradee |
8. Observabilite requise pour les tests
- Etat systeme : etat permission iOS, badge systeme, etat app (foreground/background/terminee), build type (EAS vs Expo Go).
- Reponse API : endpoints d'enregistrement/revocation token avec statut, payload de confirmation, erreurs structurees.
- Journal d'audit : enregistrement token, rotation, revocation, tentative APNs, filtre doctrine, rejet securite payload.
- Evenement signe / horodate : timestamp declencheur metier, timestamp tentative APNs, identifiant notification unique.
- Export probatoire : rapport campagne avec mapping tests->invariants->criteres et pieces horodatees.
- Telemetrie fiabilite : tableau 30j glissants des alerts (envoye, accepte APNs, echec), calcul taux >= 99%.
9. Regles non testables
| Regle | Raison | Impact |
| Perception utilisateur de "confiance" | Mesure subjective, non deterministe | Mineur (hors perimetre contractuel explicite) |
| Qualite stylistique redactionnelle des messages | Evaluation qualitative non objective | Mineur (hors perimetre contractuel explicite) |
| Mapping exhaustif des evenements HAUTE en phase 1 | Catalogue officiel non fige (H-105-04) | Majeur (couverture partielle INV-105-06) |
| Regle exacte de passage lu/non lu | Definition non finalisee (Point a clarifier #4) | Majeur (assertions TC-NOM-05 dependantes du referentiel) |
| Seuil contractuel de reception device (vs envoi backend) | Latence reception non contractualisee (Point a clarifier #5) | Majeur (NFR reception non auditable) |
| Definition de "traitee correctement" en background >95% | Critere de succes incomplet (Point a clarifier #6) | Majeur (qualification CA-105-03 partielle sur taux) |
10. Verdict QA
- ⚠️ Testable partiellement (avec reserves listees)
- Couverture complete des 13 invariants et 12 criteres d'acceptation au niveau scenario.
- Reserves majeures limitees aux points non figes de la specification (catalogue criticite, regle de lecture, NFR reception, definition de succes background).