'localhost', 'aud' => 'localhost', 'iat' => time(), 'nbf' => time(), 'exp' => time() + 3600, 'uid' => 1, 'email' => 'admin@admin.com', ]; $this->token = JWT::encode($payload, $key, 'HS256'); } private function authHeaders(): array { return ['Cookie' => 'token=' . $this->token]; } private function createTestMapDetail(array $data = []): array { $mapResponse = $this->withHeaders($this->authHeaders()) ->withBodyFormat('json') ->call('post', $this->mapEndpoint, [ 'HostType' => 'SITE', 'HostID' => 1, 'ClientType' => 'SITE', 'ClientID' => 1, ]); $mapResponse->assertStatus(201); $mapID = json_decode($mapResponse->getJSON(), true)['data']; $payload = array_merge([ 'TestMapID' => $mapID, 'HostTestCode' => 'HB', 'HostTestName' => 'Hemoglobin', 'ClientTestCode' => '2', 'ClientTestName' => 'Hemoglobin', ], $data); $response = $this->withHeaders($this->authHeaders()) ->withBodyFormat('json') ->call('post', $this->endpoint, $payload); $response->assertStatus(201); $decoded = json_decode($response->getJSON(), true); $detailID = $decoded['data']; $show = $this->withHeaders($this->authHeaders())->call('get', "{$this->endpoint}/{$detailID}"); $show->assertStatus(200); return json_decode($show->getJSON(), true)['data']; } public function testPartialUpdateTestMapDetailSuccess() { $detail = $this->createTestMapDetail(); $id = $detail['TestMapDetailID']; $patch = $this->withHeaders($this->authHeaders()) ->withBodyFormat('json') ->call('patch', "{$this->endpoint}/{$id}", ['ClientTestName' => 'Updated Detail']); $patch->assertStatus(200); $patchData = json_decode($patch->getJSON(), true); $this->assertEquals('success', $patchData['status']); $show = $this->withHeaders($this->authHeaders())->call('get', "{$this->endpoint}/{$id}"); $show->assertStatus(200); $showData = json_decode($show->getJSON(), true)['data']; $this->assertEquals('Updated Detail', $showData['ClientTestName']); $this->assertEquals($detail['HostTestCode'], $showData['HostTestCode']); } public function testPartialUpdateTestMapDetailNotFound() { $patch = $this->withHeaders($this->authHeaders()) ->withBodyFormat('json') ->call('patch', "{$this->endpoint}/999999", ['ClientTestName' => 'Updated']); $patch->assertStatus(404); } public function testPartialUpdateTestMapDetailInvalidId() { $patch = $this->withHeaders($this->authHeaders()) ->withBodyFormat('json') ->call('patch', "{$this->endpoint}/invalid", ['ClientTestName' => 'Updated']); $patch->assertStatus(400); } public function testPartialUpdateTestMapDetailEmptyPayload() { $detail = $this->createTestMapDetail(); $id = $detail['TestMapDetailID']; $patch = $this->withHeaders($this->authHeaders()) ->withBodyFormat('json') ->call('patch', "{$this->endpoint}/{$id}", []); $patch->assertStatus(400); } public function testPartialUpdateTestMapDetailSingleField() { $detail = $this->createTestMapDetail(); $id = $detail['TestMapDetailID']; $patch = $this->withHeaders($this->authHeaders()) ->withBodyFormat('json') ->call('patch', "{$this->endpoint}/{$id}", ['HostTestCode' => 'HBA1C']); $patch->assertStatus(200); $showData = json_decode($this->withHeaders($this->authHeaders()) ->call('get', "{$this->endpoint}/{$id}") ->getJSON(), true)['data']; $this->assertNotEquals($detail['HostTestCode'], $showData['HostTestCode']); $this->assertEquals($detail['ClientTestName'], $showData['ClientTestName']); } }