batchCooking/apps/api/test
Nicolas 89722ba790 feat(recipes): matching anglais pour les tech steps et les ingrédients
- Ajoute une expression régulière anglaise à chacun des 26 TechStepMapping
  du catalogue (locale "en"), en plus du "fr" existant — les recettes en
  anglais (TheMealDB, etc.) peuvent désormais matcher leurs étapes.
- Nouveau apps/api/src/lib/ingredient-matcher.ts : moteur de matching pur
  (nom d'ingrédient, unité, quantité) contre les catalogues Ingredient/Unit,
  à partir de labels anglais écrits à la main (packages/shared/src/data/
  catalog-labels-en.ts — 546 INGREDIENT_LABELS_EN + 17 UNIT_LABELS_EN avec
  synonymes/abréviations). Tokenise et stem naïvement les deux côtés pour
  tolérer pluriels et mots descriptifs superflus ; la correspondance la
  plus spécifique (le plus de mots) l'emporte en cas de recoupement.
- extractQuantity() : lit un nombre en tête de texte libre (entier,
  décimal, fraction simple ou nombre mixte) pour déduire la quantité et
  l'unité quand la source ne les fournit pas séparément.
- Étend recipe-translation.ts : translateRecipe(recipe, locale) résout
  aussi ingredientId/unitId/quantity de chaque ligne d'ingrédient — mais
  uniquement pour locale "en" (seules langue avec des labels), pour ne pas
  interroger la base inutilement ni halluciner un match dans une autre
  langue.
- Ajoute cup/ounce/pound au catalogue Unit (toBaseFactor réel), absents
  jusqu'ici alors que très fréquents dans les recettes anglaises.
- Vérifié en conditions réelles contre TheMealDB (Teriyaki Chicken
  Casserole) : 8/9 ingrédients résolus avec la bonne quantité/unité, le
  seul raté ("stir-fry vegetables") étant un mélange sans entrée dédiée au
  catalogue — dégradation gracieuse (unitId/ingredientId: null) comme prévu.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-20 13:10:00 +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): première source concrète (TheMealDB) + icône de source 2026-08-20 11:16:13 +02:00
ingredient-matcher.test.ts feat(recipes): matching anglais pour les tech steps et les ingrédients 2026-08-20 13:10:00 +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): première source concrète (TheMealDB) + icône de source 2026-08-20 11:16:13 +02:00
recipe-source.test.ts feat(recipes): première source concrète (TheMealDB) + icône de source 2026-08-20 11:16:13 +02:00
recipe-translation.test.ts feat(recipes): matching anglais pour les tech steps et les ingrédients 2026-08-20 13:10:00 +02:00
recipe.test.ts feat(recipes): première source concrète (TheMealDB) + icône de source 2026-08-20 11:16:13 +02:00
reference.test.ts feat(recipes): matching anglais pour les tech steps et les ingrédients 2026-08-20 13:10:00 +02:00
sources-index.test.ts feat(recipes): source générique JSON-LD (schema.org/Recipe) 2026-08-20 12:17:49 +02:00
tech-step-matcher.test.ts feat(recipes): matching anglais pour les tech steps et les ingrédients 2026-08-20 13:10:00 +02:00
the-meal-db.test.ts feat(recipes): première source concrète (TheMealDB) + icône de source 2026-08-20 11:16:13 +02:00