feat: le trajet de la page Santé affiche des réponses réelles (157 routes capturées, plus aucun corps inventé) #188

Merged
Corentin merged 2 commits from feat/health-real-responses into dev 2026-09-28 12:12:07 +02:00
Owner

Pourquoi

En preparant ses appels pour l'oral, l'auteur a constate que le trajet de la page Sante ne donnait pas les bons retours : il affichait un corps ecrit a la main ({ "data": { … } }), et plusieurs refus etaient faux par rapport au serveur (un produit inexistant repond Produit introuvable., la page annoncait Resource not found).

Ce qui change

  • Capture des vraies reponses (tests/e2e/health-capture.spec.js, tests/e2e/run-health-capture.sh), sur une pile jetable : les 157 routes en succes et sur chacun de leurs refus. Ecritures JSON par la collection Postman, formulaires remplis sur les vraies pages, base arretee pour la vraie exception, lien de reinitialisation lu dans le journal de la pile. 157 succes sur 157, 667 refus obtenus sur 685 tentes. Fichier : src/app/Health/captured-responses.json, hors de la racine web, transmis par la page Sante (reservee a role.manage).
  • Le trajet appelle pour de vrai quand c'est sans danger (lecture avec la session ; refus sans session d'une route JSON, sans cookie ; adresse inconnue d'une lecture), et seulement sur un clic. Pour une ecriture, il affiche la reponse capturee avec sa date, son commit et la maniere dont elle a ete obtenue. La requete envoyee est affichee sous la reponse.
  • Un refus jamais observe n'est plus propose (« refus non observe sur cette route : la meme demande a repondu 200 »).
  • Les fonctions qui fabriquaient des corps de reponse sont retirees.

Garde-fous

  • CapturedResponsesTest (CI) : chaque route du routeur a sa reponse capturee, aucune capture ne vise une route disparue, et le fichier ne contient ni jeton de 64 caracteres, ni mot de passe de demonstration, ni cookie. Ce dernier test a trouve un mot de passe de test mal masque dans la premiere capture : le masquage couvre maintenant tout champ password/pin/csrf.
  • Tests JS : aucune ecriture ne part avec la session de la page.
  • Test navigateur : aucune requete d'ecriture vers /api/orders quand on affiche « passer commande ».

Verification

  • PHP : 2366 tests, 7823 assertions, 0 echec ; PHPStan niveau 6 propre.
  • JS : 442 sur 442.
  • Pile jetable : trajet, console et balayage, 22 scenarios sur 22 ; balayage 4807 verifications, 0 echec.
  • Accessibilite rejouee : 19 ecrans, 935 mesures, 85 combinaisons, 0 violation. L'ecart avec les 946 d'hier est explique dans la fiche 06 : l'apercu d'import mesure le 27/09 affichait le tableau d'erreurs du defaut des accents, corrige par #178.
  • gitleaks sur un clone : aucune fuite.
## Pourquoi En preparant ses appels pour l'oral, l'auteur a constate que le trajet de la page Sante ne donnait pas les bons retours : il affichait un corps ecrit a la main (`{ "data": { … } }`), et plusieurs refus etaient faux par rapport au serveur (un produit inexistant repond `Produit introuvable.`, la page annoncait `Resource not found`). ## Ce qui change - **Capture des vraies reponses** (`tests/e2e/health-capture.spec.js`, `tests/e2e/run-health-capture.sh`), sur une pile jetable : les 157 routes en succes et sur chacun de leurs refus. Ecritures JSON par la collection Postman, formulaires remplis sur les vraies pages, base arretee pour la vraie exception, lien de reinitialisation lu dans le journal de la pile. **157 succes sur 157, 667 refus obtenus sur 685 tentes.** Fichier : `src/app/Health/captured-responses.json`, hors de la racine web, transmis par la page Sante (reservee a `role.manage`). - **Le trajet** appelle pour de vrai quand c'est sans danger (lecture avec la session ; refus sans session d'une route JSON, sans cookie ; adresse inconnue d'une lecture), et seulement sur un clic. Pour une ecriture, il affiche la reponse capturee avec sa date, son commit et la maniere dont elle a ete obtenue. La requete envoyee est affichee sous la reponse. - **Un refus jamais observe n'est plus propose** (« refus non observe sur cette route : la meme demande a repondu 200 »). - **Les fonctions qui fabriquaient des corps de reponse sont retirees.** ## Garde-fous - `CapturedResponsesTest` (CI) : chaque route du routeur a sa reponse capturee, aucune capture ne vise une route disparue, et le fichier ne contient ni jeton de 64 caracteres, ni mot de passe de demonstration, ni cookie. Ce dernier test a trouve un mot de passe de test mal masque dans la premiere capture : le masquage couvre maintenant tout champ `password`/`pin`/`csrf`. - Tests JS : aucune ecriture ne part avec la session de la page. - Test navigateur : aucune requete d'ecriture vers `/api/orders` quand on affiche « passer commande ». ## Verification - PHP : 2366 tests, 7823 assertions, 0 echec ; PHPStan niveau 6 propre. - JS : 442 sur 442. - Pile jetable : trajet, console et balayage, 22 scenarios sur 22 ; balayage 4807 verifications, 0 echec. - Accessibilite rejouee : 19 ecrans, 935 mesures, 85 combinaisons, 0 violation. L'ecart avec les 946 d'hier est explique dans la fiche 06 : l'apercu d'import mesure le 27/09 affichait le tableau d'erreurs du defaut des accents, corrige par #178. - gitleaks sur un clone : aucune fuite.
docs: journal du trajet aux réponses réelles, audit d'accessibilité rejoué (935 mesures, l'aperçu d'import ne montre plus le défaut des accents)
All checks were successful
CI / secret-scan (pull_request) Successful in 24s
CI / php-lint (pull_request) Successful in 26s
CI / static-tests (pull_request) Successful in 2m57s
CI / js-tests (pull_request) Successful in 49s
CI / shell-tests (pull_request) Successful in 10s
CI / secret-scan (push) Successful in 34s
CI / php-lint (push) Successful in 27s
CI / static-tests (push) Successful in 2m53s
CI / js-tests (push) Successful in 45s
CI / shell-tests (push) Successful in 9s
7e15b3e516
Corentin deleted branch feat/health-real-responses 2026-09-28 12:12:09 +02:00
Sign in to join this conversation.
No reviewers
No labels
auto-merge
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
AcadeNice/corentin_wakdo!188
No description provided.