clqms-be/tests/feature/PatVisit/PatVisitUpdateTest.php

153 lines
4.4 KiB
PHP

<?php
namespace Tests\Feature\PatVisit;
use CodeIgniter\Test\FeatureTestTrait;
use CodeIgniter\Test\CIUnitTestCase;
class PatVisitUpdateTest extends CIUnitTestCase
{
use FeatureTestTrait;
protected $endpoint = 'api/patvisit';
/**
* Test: Update patient visit successfully
*/
public function testUpdatePatientVisitSuccess()
{
// First create a visit to update
$createPayload = [
"InternalPID"=> "1",
"EpisodeID"=> "TEST001",
"PatVisitADT"=> [
"ADTCode"=> "A01",
"LocationID"=> "1"
]
];
$createResponse = $this->withBodyFormat('json')->call('post', 'api/patvisit', $createPayload);
$createResponse->assertStatus(201);
$createJson = json_decode($createResponse->getJSON(), true);
$internalPVID = $createJson['data']['InternalPVID'];
$pvid = $createJson['data']['PVID'];
// Now update it
$payload = [
'InternalPVID' => $internalPVID,
'PVID' => $pvid,
'EpisodeID' => 'EPI001',
'PatDiag' => [
'DiagCode' => 'A02',
'DiagName' => 'Dysentery'
],
'PatVisitADT' => [
'LocationID' => 12,
'AdmitDate' => date('Y-m-d H:i:s')
]
];
$response = $this->withBodyFormat('json')->call('patch', $this->endpoint, $payload);
// Pastikan response sukses (200 OK untuk update)
$response->assertStatus(200);
// Periksa fragment JSON
$response->assertJSONFragment([
'status' => 'success',
'message' => 'Data updated successfully',
]);
// Pastikan response mengandung data yang sesuai
$json = json_decode($response->getJSON(), true);
$this->assertArrayHasKey('data', $json);
$this->assertEquals($pvid, $json['data']['PVID']);
}
/**
* Test: Update patient visit with missing ID
*/
public function testUpdatePatientVisitMissingId()
{
// InternalPVID tidak ada
$payload = [
'EpisodeID' => 'EPI002',
'PatDiag' => ['DiagCode' => 'B01', 'DiagName' => 'Flu']
];
$response = $this->withBodyFormat('json')->call('patch', $this->endpoint, $payload);
// Karena ID tidak ada → 400 Bad Request
$response->assertStatus(400);
$response->assertJSONFragment([
'status' => 'error',
'message' => 'Invalid or missing ID'
]);
}
/**
* Test: Update patient visit with non-existent ID
*/
public function testUpdatePatientVisitNotFound()
{
$payload = [
'InternalPVID' => 999999, // Non-existent visit
'EpisodeID' => 'EPI001',
'PatDiag' => [
'DiagCode' => 'A02',
'DiagName' => 'Dysentery'
]
];
$response = $this->withBodyFormat('json')->call('patch', $this->endpoint, $payload);
$response->assertStatus(404);
$response->assertJSONFragment([
'status' => 'error',
'message' => 'Visit not found'
]);
}
/**
* Test: Update patient visit with invalid ID (non-numeric)
*/
public function testUpdatePatientVisitInvalidId()
{
$payload = [
'InternalPVID' => 'invalid',
'PVID' => 'DV0001',
'EpisodeID' => 'EPI001',
'PatDiag' => [
'DiagCode' => 'A02',
'DiagName' => 'Dysentery'
],
'PatVisitADT' => [
'LocationID' => 12,
'AdmitDate' => date('Y-m-d H:i:s')
]
];
$response = $this->withBodyFormat('json')->call('patch', $this->endpoint, $payload);
$response->assertStatus(400);
$response->assertJSONFragment([
'status' => 'error',
'message' => 'Invalid or missing ID'
]);
}
/**
* Test: Update patient visit with empty payload
*/
public function testUpdatePatientVisitInvalidInput()
{
$payload = [];
$response = $this->withBodyFormat('json')->call('patch', $this->endpoint, $payload);
$response->assertStatus(400);
$response->assertJSONFragment([
'status' => 'error',
'message' => 'Invalid or missing ID'
]);
}
}