'localhost', 'aud' => 'localhost', 'iat' => time(), 'nbf' => time(), 'exp' => time() + 3600, 'uid' => 1, 'email' => 'admin@admin.com' ]; $this->token = JWT::encode($payload, $key, 'HS256'); } protected function callProtected($method, $path, $params = []) { return $this->withHeaders(['Cookie' => 'token=' . $this->token]) ->call($method, $path, $params); } public function testIndexReturnsSuccess() { $result = $this->callProtected('get', 'api/tests'); $result->assertStatus(200); $json = $result->getJSON(); $data = json_decode($json, true); $this->assertEquals('success', $data['status']); $this->assertIsArray($data['data']); } public function testShowReturnsDataIfFound() { // First get an ID $indexResult = $this->callProtected('get', 'api/tests'); $indexData = json_decode($indexResult->getJSON(), true); if (empty($indexData['data'])) { $this->markTestSkipped('No test definitions found in database to test show.'); } $id = $indexData['data'][0]['TestSiteID']; $result = $this->callProtected('get', "api/tests/$id"); $result->assertStatus(200); $json = $result->getJSON(); $data = json_decode($json, true); $this->assertEquals('success', $data['status']); $this->assertIsArray($data['data']); $this->assertEquals($id, $data['data']['TestSiteID']); } public function testCreateTestWithThreshold() { $testData = [ 'TestSiteCode' => 'TH' . substr(time(), -4), 'TestSiteName' => 'Threshold Test ' . time(), 'TestType' => 'TEST', 'SiteID' => 1, 'details' => [ 'RefType' => 'THOLD', 'ResultType' => 'NMRIC' ], 'refnum' => [ [ 'NumRefType' => 'THOLD', 'RangeType' => 'VALUE', 'Sex' => '1', 'AgeStart' => 0, 'AgeEnd' => 100, 'LowSign' => '>', 'Low' => 5.5, 'Interpretation' => 'High' ] ] ]; $result = $this->withHeaders(['Cookie' => 'token=' . $this->token]) ->withBody(json_encode($testData)) ->call('post', 'api/tests'); $result->assertStatus(201); $json = $result->getJSON(); $data = json_decode($json, true); $this->assertEquals('created', $data['status']); $id = $data['data']['TestSiteId']; // Verify retrieval $showResult = $this->callProtected('get', "api/tests/$id"); $showData = json_decode($showResult->getJSON(), true); $this->assertArrayHasKey('refnum', $showData['data']); $this->assertCount(1, $showData['data']['refnum']); $this->assertEquals(5.5, $showData['data']['refnum'][0]['Low']); $this->assertEquals('High', $showData['data']['refnum'][0]['Interpretation']); } }