fix(recipes): rend StepDescription tolérant à un techSteps absent #62
Loading…
Reference in a new issue
No description provided.
Delete branch "claude/practical-swartz-648594"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Contexte
Trouvé pendant un run autonome de traitement des tickets
planned— sans rapport avec ce travail, ce fichier n'a pas été touché.StepDescriptionfaisaituseState(techSteps)puisliveTechSteps.flatMap(...). Quand la proptechStepsarrivaitundefined,.flatMaplevaitTypeError: Cannot read properties of undefined (reading 'flatMap'), remontée par Cypress comme une erreur applicative non capturée qui faisait échouer le test.Observé de façon intermittente sur le scénario
recipe-form.feature« Preloads an existing recipe's ingredients when editing » : après enregistrement,RecipeFormPagenavigue vers/recettes/:id, dont le détail (RecipesPage→RecipeDetailPanel→StepDescription) se rendait parfois avant quetechStepsne soit peuplé. Le run CI précédent sur le même code passait les 29 specs — c'est bien une course au rendu / au chargement.Correctif
StepDescription.tsx:techStepsdevient optionnel etliveTechStepsretombe sur[](dans leuseStateet leuseEffectde resync), pour que tous les consommateurs (.flatMappourtemperatures,splitDescriptionSegments,findTechStepForTemperature, lookupactiveStepTechStep) aient toujours un vrai tableau — même posture « tolérer la donnée manquante, ne pas planter » que le reste du composant. Les vrais appelants (RecipeDetailPaneldepuisRecipeView/RecipeImportDraftView) passent toujours un tableau défini ; le type reste honnête, la prop optionnelle documente juste que le composant sait s'en passer.cypress/e2e/recipe-form.ts: le mock de la recette 7 envoyait une étape sanstechSteps, contrairement au vraiStepView(packages/shared) et à tous les autres mocks de la suite — corrigé entechSteps: [].cypress/e2e/recipes.cy.ts: nouveau test de non-régression déterministe — un payload d'étape sanstechStepsdoit rendre la description en texte brut. Vérifié qu'il échoue bien (flatMapsurundefined) sans le correctif du composant, et passe avec.Vérifications (locales)
pnpm lint(Biome) ✓,tsc -b(apps/web) ✓recipe-form.feature(5/5) +recipes.cy.ts(11/11) — 3 runs consécutifs propres🤖 Generated with Claude Code