=== Test Contrat : Route Dispatcher DRY === 1. Charger définitions routes globales... ✅ Routes chargées : 5 routes ✅ Structure route valide (handler, scopes, methods) 2. Trouver route correspondante (match exact)... ✅ Route GET /credentials trouvée ✅ Handler correct : route_get_credentials 3. Trouver route correspondante (match dynamique)... ✅ Route GET /owners/{id} trouvée pour /owners/123 ✅ Paramètre id extrait : 123 4. Appliquer filtres JWT aux paramètres... ✅ Filtre JWT appliqué : owner_id forcé à 42 (pas 999) ✅ Paramètre non filtré préservé : date_debut 5. Générer métadonnées documentation pour scope owner... ✅ Métadonnées générées : 5 routes pour owner ✅ Route /credentials incluse pour owner 6. Vérifier que /credentials est owner-only (pas exploitant)... ✅ Routes /credentials non accessibles à exploitant (owner-only) ✅ Route /reservations accessible à exploitant (dual-scope) 7. Route inexistante retourne null... ✅ Route inexistante retourne null =========================================== Tests réussis: 13 Tests échoués: 0 ✅ Tous les contrats du dispatcher sont validés