batchCooking/apps/api/test
Nicolas a53e8aff4a fix(recipes): concatène les ingrédients dupliqués à l'import
Suite au retour utilisateur sur #53 (follow-up) : au lieu de bloquer
l'import et de demander à l'utilisateur de retirer une ligne en double
à la main, deux lignes source qui résolvent vers le même ingrédient
catalogue sont désormais fusionnées automatiquement, quantité
concaténée (sommée), avant même que l'écran de revue ne s'affiche.

- mergeDuplicateIngredients (recipe-translation.ts) : même unité des
  deux côtés -> somme directe. Unité différente mais même UnitType
  (MASS/VOLUME) -> conversion via toBaseFactor avant de sommer, exprimée
  dans l'unité de la première ligne. UnitType différent, ou COUNT des
  deux côtés (une "pincée" n'est pas une fraction fixe d'une "gousse",
  cf. le commentaire de UnitView) -> jamais fusionnées, laissées en
  double (createRecipeSchema/RecipeImportForm continuent de les
  signaler, filet de sécurité déjà en place). Les lignes non résolues
  (ingredientId: null) ne sont jamais fusionnées entre elles.
- rawText concaténé ("100g Sugar + 45g Sugar") pour la traçabilité.
- Branché dans previewSourceItem (sources.service.ts), juste après
  translateRecipeIngredients — c'est le seul endroit où des doublons
  peuvent apparaître (la création manuelle ne peut pas en produire,
  IngredientPicker exclut déjà les ingrédients déjà sélectionnés).

Vérifié via l'API en local (import réel de "Flan" depuis TheMealDB) :
"100g Sugar"/"45g Sugar" -> une seule ligne Sucre, 145g.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 09:26:59 +02:00
..
auth.test.ts Tests API: couverture Mocha + Cucumber pour le foyer et la suppression de compte (step 4/8) 2026-08-17 10:40:23 +02:00
health.test.ts Scaffold generic pnpm monorepo (api + web + shared) (#1) 2026-08-16 10:55:13 +02:00
house.test.ts feat(recipes): parcourir et prévisualiser les sources externes (étape 1/4) 2026-08-20 15:51:16 +02:00
ingredient-matcher.test.ts fix(recipes): corrige plusieurs bugs d'import TheMealDB 2026-08-21 08:14:37 +02:00
json-ld-recipe.test.ts feat(recipes): source générique JSON-LD (schema.org/Recipe) 2026-08-20 12:17:49 +02:00
planning.test.ts feat(recipes): ajouter le nombre de portions couvertes par une recette 2026-08-19 21:44:01 +02:00
preferences.test.ts API: module preferences — GET/PATCH /preferences (step 2/4) 2026-08-17 15:55:45 +02:00
profile.test.ts refactor(catalog): authoring 100% anglais — uid camelCase, plus de français dans le code 2026-08-19 20:40:55 +02:00
recipe-source-sync.test.ts feat(recipes): parcourir et prévisualiser les sources externes (étape 1/4) 2026-08-20 15:51:16 +02:00
recipe-source.test.ts feat(recipes): parcourir et prévisualiser les sources externes (étape 1/4) 2026-08-20 15:51:16 +02:00
recipe-translation.test.ts fix(recipes): concatène les ingrédients dupliqués à l'import 2026-08-21 09:26:59 +02:00
recipe.test.ts fix(recipes): corrige plusieurs bugs d'import TheMealDB 2026-08-21 08:14:37 +02:00
reference.test.ts feat(recipes): parcourir et prévisualiser les sources externes (étape 1/4) 2026-08-20 15:51:16 +02:00
sources-index.test.ts fix(recipes): la source générique JSON-LD n'apparaît plus comme source 2026-08-20 15:10:51 +02:00
sources.test.ts fix(recipes): concatène les ingrédients dupliqués à l'import 2026-08-21 09:26:59 +02:00
tech-step-matcher.test.ts feat(recipes): surligne les tech steps détectés dans les étapes, avec tooltip 2026-08-20 14:46:15 +02:00
the-meal-db.test.ts fix(recipes): corrige plusieurs bugs d'import TheMealDB 2026-08-21 08:14:37 +02:00