['auth', 'login', 'logout', 'frontend'], 'school_year' => ['school-year', 'school_year', 'semester'], 'academic' => ['scores', 'grading', 'homework', 'quiz', 'report-card'], 'attendance' => ['attendance', 'absence', 'late', 'dismissal'], 'finance' => ['finance', 'invoice', 'payment', 'refund'], 'inventory' => ['inventory', 'supplier', 'supply'], 'communications' => ['messages', 'support', 'email', 'whatsapp', 'notification'], 'family' => ['parent', 'family', 'guardian', 'authorized'], 'admin' => ['admin', 'users', 'roles', 'permissions', 'settings'], 'files' => ['import', 'export', 'download', 'print', 'certificate', 'badge'], ]; foreach ($families as $family => $needles) { $this->assertNotEmpty( $this->apiRoutesContainingAny($needles), 'Batch 11 expects at least one route for the '.$family.' family. If this fails, update the route catalog instead of pretending the family vanished.' ); } } public function test_batch_11_high_risk_routes_return_controlled_responses_under_combined_hostile_input(): void { $routes = array_slice($this->apiRoutesContainingAny(['auth', 'attendance', 'finance', 'students', 'users', 'settings', 'export', 'import', 'webhook', 'messages']), 0, 160); foreach ($routes as $route) { $method = $this->primaryMethod($route); $uri = $route->uri(); $payload = $this->payloadFor($method, $uri) + [ 'id' => '../../../etc/passwd', 'student_id' => ['bad' => true], 'amount' => 'Infinity', 'notes' => '', 'url' => 'http://169.254.169.254/latest/meta-data/', 'return_url' => 'https://evil.example', ]; $this->actingAs($this->actorFor($uri), 'api'); $response = $this->withHeaders([ 'Accept' => 'application/json', 'X-Forwarded-For' => '127.0.0.1', 'Idempotency-Key' => 'batch-11-regression-net', ])->json($method, $this->materializePath($uri), $payload); $this->assertControlled($response, $method, $uri); $this->assertNoServerError($response, 'batch 11 combined hostile probe at '.$method.' '.$uri); } } }