fix(recipes): corrige la numérotation des étapes faussée par le popover de correction #31

Merged
kyuno merged 4 commits from fix/step-counter-scoped-to-direct-children into main 2026-09-05 11:30:50 +02:00
Owner

Contexte

Bug rapporté : "les étapes affichées sont numérotées n'importe comment".

Cause

.recipe-detail-panel__steps numérote ses étapes via un compteur CSS (counter-reset/counter-increment: step) appliqué à un sélecteur li — un descendant, pas seulement les enfants directs. Depuis la refonte du popover de correction (#30), celui-ci imbrique ses propres <li> plusieurs niveaux plus bas dans le DOM d'une étape :

  • une par ingrédient/ustensile/température attaché (.tech-step-correction-popover__row)
  • la liste du picker de technique (.catalog-search-picker__list, jusqu'à ~74 entrées)

Chacun de ces <li> incrémentait le même compteur step, faussant le numéro affiché de toutes les étapes suivantes dès qu'une correction avec métadonnées attachées (ou son picker de technique) était ouverte.

Correctif

li/img/p → > li/> img/> p (enfants directs uniquement) dans cette règle. Même raisonnement pour img/p : leurs styles (image en bloc, paragraphe inline sans marge) ne doivent s'appliquer qu'au propre <p>/<img> de l'étape, pas à ceux imbriqués plus loin dans le popover.

Tests

Nouveau test de non-régression dans recipes.cy.ts : ouvre une correction avec ingrédient + ustensile attachés puis le picker de technique, vérifie via getComputedStyle que ces <li> imbriqués n'ont pas rejoint la chaîne du compteur (counter-increment: none) alors que les <li> des étapes elles-mêmes l'ont toujours (counter-increment: step 1). Confirmé que ce test échoue bien sans le correctif (step 1 au lieu de none) avant de le restaurer — pas un test qui passerait de toute façon.

pnpm lint + pnpm --filter web build clean. recipes.cy.ts 9/9 (dont le nouveau test), recipes.feature 5/5, recipe-sources.feature 6/6.

🤖 Generated with Claude Code

## Contexte Bug rapporté : "les étapes affichées sont numérotées n'importe comment". ## Cause `.recipe-detail-panel__steps` numérote ses étapes via un compteur CSS (`counter-reset`/`counter-increment: step`) appliqué à un sélecteur `li` — un **descendant**, pas seulement les enfants directs. Depuis la refonte du popover de correction ([#30](https://git.dev.kyuno.fr/kyuno/batchCooking/pulls/30)), celui-ci imbrique ses propres `<li>` plusieurs niveaux plus bas dans le DOM d'une étape : - une par ingrédient/ustensile/température attaché (`.tech-step-correction-popover__row`) - la liste du picker de technique (`.catalog-search-picker__list`, jusqu'à ~74 entrées) Chacun de ces `<li>` incrémentait le **même** compteur `step`, faussant le numéro affiché de toutes les étapes suivantes dès qu'une correction avec métadonnées attachées (ou son picker de technique) était ouverte. ## Correctif `li`/`img`/`p` → `> li`/`> img`/`> p` (enfants directs uniquement) dans cette règle. Même raisonnement pour `img`/`p` : leurs styles (image en bloc, paragraphe inline sans marge) ne doivent s'appliquer qu'au propre `<p>`/`<img>` de l'étape, pas à ceux imbriqués plus loin dans le popover. ## Tests Nouveau test de non-régression dans `recipes.cy.ts` : ouvre une correction avec ingrédient + ustensile attachés puis le picker de technique, vérifie via `getComputedStyle` que ces `<li>` imbriqués n'ont pas rejoint la chaîne du compteur (`counter-increment: none`) alors que les `<li>` des étapes elles-mêmes l'ont toujours (`counter-increment: step 1`). **Confirmé que ce test échoue bien sans le correctif** (`step 1` au lieu de `none`) avant de le restaurer — pas un test qui passerait de toute façon. `pnpm lint` + `pnpm --filter web build` clean. `recipes.cy.ts` 9/9 (dont le nouveau test), `recipes.feature` 5/5, `recipe-sources.feature` 6/6. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
kyuno added 1 commit 2026-09-05 08:21:44 +02:00
fix(recipes): corrige la numérotation des étapes faussée par le popover de correction
All checks were successful
CI / lint (push) Successful in 2m8s
CI / build (push) Successful in 1m34s
CI / intent-service-test (push) Successful in 3m51s
CI / e2e (push) Successful in 5m25s
CI / test (push) Successful in 13m54s
bd607b17f3
.recipe-detail-panel__steps utilisait un compteur CSS (counter-reset/
counter-increment: step) sur un sélecteur `li` — un descendant, pas
seulement les enfants directs. Depuis la refonte du popover de correction
(tech-step-metadata-editor-redesign), celui-ci imbrique ses propres <li>
plusieurs niveaux plus bas (une par ingrédient/ustensile/température
attaché, plus la liste du picker de technique — jusqu'à ~74 entrées) :
chacun incrémentait ce même compteur "step", faussant le numéro affiché de
toutes les étapes suivantes dès qu'une correction avec métadonnées
attachées (ou son picker de technique) était ouverte. C'est le bug
rapporté : "les étapes affichées sont numérotées n'importe comment".

Correctif : `li`/`img`/`p` → `> li`/`> img`/`> p` (enfants directs
uniquement) dans cette règle. Même principe pour `img`/`p` : leurs styles
(image bloc, paragraphe inline sans marge) ne doivent s'appliquer qu'au
propre <p>/<img> de l'étape, pas à ceux du popover imbriqué plus loin.

Test de non-régression ajouté (recipes.cy.ts) : ouvre une correction avec
ingrédient + ustensile attachés puis le picker de technique, vérifie via
getComputedStyle que ces <li> imbriqués n'ont pas rejoint la chaîne du
compteur (`counter-increment: none`) alors que les <li> des étapes
elles-mêmes l'ont toujours (`counter-increment: step 1`) — confirmé que ce
test échoue bien sans le correctif (`step 1` au lieu de `none`) avant de le
restaurer.

Vérifié : pnpm lint + build clean. recipes.cy.ts (9/9, dont le nouveau
test), recipes.feature (5/5), recipe-sources.feature (6/6).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
kyuno added 1 commit 2026-09-05 11:00:57 +02:00
test(recipe-form): corrige la visibilité flaky de l'étape d'ingrédient préchargé
All checks were successful
CI / lint (push) Successful in 2m39s
CI / build (push) Successful in 2m43s
CI / intent-service-test (push) Successful in 4m23s
CI / e2e (push) Successful in 8m0s
CI / test (push) Successful in 14m57s
3b78582d29
Le step Gherkin partagé « the recipe should include the ingredient »
utilisait un `.should("be.visible")` nu sur `.ingredient-row__name`.
Sur le formulaire d'édition de recette, la liste d'ingrédients peut se
trouver sous le pli du scroll propre à `.app-content` (Nom/Description/
Photo/Portions/Visibilité/Régimes viennent avant) — un `.should`
seul ne scrolle pas automatiquement, contrairement aux commandes
d'interaction (`.click()`/`.check()`).

Repéré comme bug pré-existant et hors périmètre lors de la vérification
de #29/#30 (voir la note dans tech-step-metadata-editor-redesign.md).
Même correctif que « I should see the highlighted technique »
(common.steps.ts) et « I should see the highlighted temperature »
(recipes.ts) : `.scrollIntoView()` avant l'assertion.

Reproduit avant correctif (recipe-form.feature, scénario « Preloads an
existing recipe's ingredients when editing »: 4/5 puis 5/5 après le
correctif). Suite e2e complète: 27/28 fichiers verts (la seule
exception, admin-monitoring.cy.ts, est un flake distinct et
sans rapport, signalé séparément).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
kyuno added 2 commits 2026-09-05 11:30:42 +02:00
fix(admin-monitoring): remplace le filtre resourceType cassé par une vérification manuelle
Some checks failed
CI / lint (push) Failing after 24s
CI / build (push) Successful in 1m53s
CI / intent-service-test (push) Successful in 3m52s
CI / e2e (push) Successful in 7m41s
CI / test (push) Failing after 12m15s
c1aba1f18c
`admin-monitoring.cy.ts` échouait de façon reproductible ("renders one
card per service": cy.wait timeout, "No request ever occurred").

Diagnostiqué par isolation : le matcher déclaratif `resourceType: "fetch"`
de Cypress 13.17.0 ne capte plus du tout la requête réelle de
AdminApiClient.getMonitoring() sur le Chrome 152 de cette machine — un
intercept `{resourceType: "fetch"}` sans filtre d'URL ne voit passer que
/admin/auth/me, jamais /admin/monitoring, alors que le `req.resourceType`
de cette même requête, lu depuis un handler matché par url/method seuls,
vaut bien "fetch" de façon fiable et reproductible. Le filtrage déclaratif
est cassé, pas la requête elle-même.

Remplace le matcher par un handler de fonction qui laisse passer la
requête de document (`cy.visit()` lui-même, sur la même URL que l'API en
same-origin/CI) via `req.continue()` et ne stub que le reste — vérifié
stable sur 3 runs consécutifs.

Corrige au passage le test "shows an error state" qui passait pour la
mauvaise raison : sans serveur API réel, une requête non interceptée
échoue aussi au niveau réseau, ce que MonitoringPage.catch() ne
distingue pas d'un vrai 500 — désormais aliasé et attendu comme le
premier test, pour prouver qu'il dépend bien du mock.

Suite e2e complète: 28/28 fichiers, 116/116 tests verts.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Merge pull request 'fix(admin-monitoring): remplace le filtre resourceType cassé par une vérification manuelle' (#32) from fix/admin-monitoring-intercept into fix/step-counter-scoped-to-direct-children
Some checks failed
CI / lint (push) Successful in 2m56s
CI / build (push) Successful in 3m1s
CI / intent-service-test (push) Successful in 5m26s
CI / e2e (push) Successful in 11m59s
CI / test (push) Failing after 16m11s
0569884ddc
kyuno merged commit 1ec846ed3d into main 2026-09-05 11:30:50 +02:00
Sign in to join this conversation.
No reviewers
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: kyuno/batchCooking#31
No description provided.