['user'], 'users' => ['id'], 'students' => ['id'], 'parents' => ['id'], 'attendance' => ['data'], 'invoice' => ['data'], 'payment' => ['data'], 'scores' => ['data'], 'report-card' => ['data'], ]; foreach ($expectations as $needle => $anchors) { foreach (array_slice($this->apiRoutes($needle), 0, 10) as $route) { if ($this->primaryMethod($route) !== 'GET') { continue; } $uri = $route->uri(); $response = $this->probeRoute($route); $this->assertControlled($response, 'GET', $uri); if ($response->getStatusCode() >= 200 && $response->getStatusCode() < 300 && $this->isJsonString($response->getContent())) { $json = $response->json(); $jsonText = strtolower(json_encode($json)); foreach ($anchors as $anchor) { $this->assertStringContainsString($anchor, $jsonText, $uri.' successful response should preserve contract anchor '.$anchor); } } } } } }