corentin_wakdo/tests/Unit/Admin
Imugiii 06450b2db5
All checks were successful
CI / secret-scan (pull_request) Successful in 9s
CI / php-lint (pull_request) Successful in 20s
CI / static-tests (pull_request) Successful in 41s
CI / secret-scan (push) Successful in 8s
CI / static-tests (push) Successful in 45s
CI / auto-merge (pull_request) Successful in 4s
CI / php-lint (push) Successful in 19s
CI / auto-merge (push) Has been skipped
feat(admin): recettes produit - composition product_ingredient + dispo calculee RG-T21 (P3, ferme #27)
PR-B du lot P3 stock. Editeur de recette (composition product_ingredient) et
disponibilite produit calculee, sur la couche stock de PR-A.

- Composition (ProductRepository) : composition() (JOIN ingredient), setComposition()
  en delete-and-reinsert dans UNE transaction (RG-2/RG-T08), ingredientExists()
  + dedup par PK composite, compositionCount(). FK product_id CASCADE,
  ingredient_id RESTRICT.
- Editeur (ProductController) : recipeForm/saveRecipe gardes par ingredient.manage
  (composition, DISTINCTE du CRUD produit), sans PIN (hors RG-T13). Revalidation
  serveur RG-T18 + allowlist RG-T16 (ingredient inconnu filtre, bornes des CHECK).
  Vue recipe.php + product-recipe.js (builder vanilla CSP-safe, data-*).
- Disponibilite calculee RG-T21 : isOrderable() = is_available ET chaque ingredient
  NON RETIRABLE au-dessus de la bande critique (reutilise IngredientRepository::
  stockBand). Un ingredient retirable en critique ne bloque pas ; un retrait manuel
  prime. Badge "Rupture auto" dans la liste (autoUnavailableIds, distinct du retrait
  manuel).
- Dette #27 close : la suppression dure d'un produit cascade product_ingredient ;
  le nombre de lignes emportees est compte et trace dans le resume d'audit.

Tests : 259 / 777 assertions verts (WAKDO_DB_TESTS=1), PHPStan L6 propre.
2026-06-17 09:27:43 +00:00
..
CategoryControllerTest.php fix(admin): conflits HTTP 409 au lieu de 422 (delete FK-bloque + course unicite) (#33) 2026-06-17 10:11:28 +02:00
DashboardControllerTest.php fix(admin): lien decouvrable vers la page de definition du PIN (#28) 2026-06-16 14:21:42 +02:00
IngredientControllerTest.php feat(admin): stock ingredients - CRUD, restock, inventaire PIN, mouvements (P3, mlt 8.8 + domaine 9) (#34) 2026-06-17 11:11:31 +02:00
MenuControllerTest.php fix(admin): conflits HTTP 409 au lieu de 422 (delete FK-bloque + course unicite) (#33) 2026-06-17 10:11:28 +02:00
ProductControllerTest.php feat(admin): recettes produit - composition product_ingredient + dispo calculee RG-T21 (P3, ferme #27) 2026-06-17 09:27:43 +00:00
ProfileControllerTest.php feat: PIN self-service P3 (/admin/profile/pin) (#16) 2026-06-15 22:04:14 +02:00