corentin_wakdo/tests/Integration
Imugiii 26672b1467
All checks were successful
CI / secret-scan (pull_request) Successful in 9s
CI / php-lint (pull_request) Successful in 21s
CI / static-tests (pull_request) Successful in 46s
CI / secret-scan (push) Successful in 9s
CI / php-lint (push) Successful in 21s
CI / static-tests (push) Successful in 52s
CI / auto-merge (pull_request) Successful in 6s
CI / auto-merge (push) Has been skipped
feat(admin): CRUD menus composes avec slots (P3, mlt 8.4-8.6)
Quatrieme CRUD back-office, cas le plus riche du catalogue : un menu = burger de
base + N slots de composition (menu_slot) chacun proposant M options eligibles
(menu_slot_option), avec tarification Normal/Maxi.

- App\Catalogue\MenuRepository : all/find, slotsWithOptions (LEFT JOIN regroupe),
  create + update dans UNE transaction (RG-T08) ; update reconstruit les slots en
  delete-and-reinsert (mlt 8.5 RG-2) ; delete FK-safe (order_item.menu_id RESTRICT,
  CASCADE vers slots/options) ; setActive ; categoryExists/productExists/isReferencedByOrders.
- App\Controllers\MenuController : index/create/store/edit/update/toggle/confirmDelete/
  destroy ; guard menu.read/create/update/delete (RG-T03) ; CSRF sur les mutations
  (RG-T01) ; validation bornee + allowlist (RG-T16/T18). PIN equipier + audit_log
  UNIQUEMENT a la suppression (mlt 8.6, RG-T13/T14) ; create/update sans PIN (un
  menu n'a pas de vat_rate). Throttle PIN RG-T22 (gate-before-verify, echec PIN
  trace + compte dans UNE transaction).
- Vues admin/menus/{index,form,delete} + assets/js/menu-form.js : builder de slots
  vanilla JS (CSP 'self' : donnees via data-*, etat serialise en champ cache
  slots_json car Request::formBody ne garde que les scalaires).
- Routes /admin/menus dans le front controller ; lien nav Menus reactive (menu.read).
- Tests : MenuControllerTest (12 cas : guard, slots, CSRF, toggle, flux PIN+audit
  atomique sur delete, 422 FK) ; MenuRepositoryDbTest (integration, vraie DB :
  create+slots, slotsWithOptions, update delete-and-reinsert, delete+cascade) ;
  FakeDatabase etendu (menu).

Suite : 201 tests verts (597 assertions avec WAKDO_DB_TESTS=1), PHPStan L6 propre.
2026-06-16 13:17:08 +00:00
..
AuthorizerDbTest.php feat: RBAC P2 (autorisation par permission + garde de session + /api/me) (#12) 2026-06-15 20:45:19 +02:00
AuthServiceDbTest.php feat: authentification back-office P2 (login/logout/reset, throttle, audit) (#11) 2026-06-15 20:18:59 +02:00
CategoryRepositoryDbTest.php feat: CRUD categories P3 (rendu serveur, garde + CSRF + validation) (#15) 2026-06-15 21:45:31 +02:00
MenuRepositoryDbTest.php feat(admin): CRUD menus composes avec slots (P3, mlt 8.4-8.6) 2026-06-16 13:17:08 +00:00
PinThrottleDbTest.php feat(admin): throttle du PIN d action sensible par acteur (RG-T22) (#18) 2026-06-16 00:06:33 +02:00
PinVerifierDbTest.php feat: PIN d action sensible P2 (PinVerifier RG-T13) (#13) 2026-06-15 21:00:11 +02:00
ProductRepositoryDbTest.php feat(admin): CRUD produits avec PIN conditionnel et audit (#17) 2026-06-15 22:35:50 +02:00
UserRepositoryDbTest.php feat: PIN self-service P3 (/admin/profile/pin) (#16) 2026-06-15 22:04:14 +02:00