2025-09-23 10:18:48 +07:00
|
|
|
<?php
|
|
|
|
|
|
2025-09-25 14:01:33 +07:00
|
|
|
namespace Tests\Feature\Patients;
|
2025-09-23 10:18:48 +07:00
|
|
|
|
|
|
|
|
use CodeIgniter\Test\FeatureTestTrait;
|
|
|
|
|
use CodeIgniter\Test\CIUnitTestCase;
|
2025-10-14 15:50:22 +07:00
|
|
|
use Faker\Factory;
|
2025-09-23 10:18:48 +07:00
|
|
|
|
|
|
|
|
class PatientCreateTest extends CIUnitTestCase
|
|
|
|
|
{
|
|
|
|
|
use FeatureTestTrait;
|
2025-09-25 14:01:33 +07:00
|
|
|
protected $endpoint = 'api/patient';
|
2025-09-23 10:18:48 +07:00
|
|
|
|
2025-10-19 22:36:31 +07:00
|
|
|
// 400 - Passed
|
|
|
|
|
// Validation Gagal - Array Tidak Complete
|
2025-09-26 15:03:11 +07:00
|
|
|
public function testCreatePatientValidationFail() {
|
2025-10-17 15:31:48 +07:00
|
|
|
|
|
|
|
|
// Test dengan payload yg tidak lengkap
|
2025-09-26 14:11:25 +07:00
|
|
|
// error 400 yg diharapkan
|
|
|
|
|
$payload = ['Name' => 'Ngawur'];
|
2025-10-19 22:36:31 +07:00
|
|
|
$result = $this->withBodyFormat('json')->call('post', 'api/patient', $payload);
|
2025-09-26 14:11:25 +07:00
|
|
|
$result->assertStatus(400);
|
2025-09-25 14:01:33 +07:00
|
|
|
|
2025-10-17 15:31:48 +07:00
|
|
|
// Test dengan PatiD yg sudah ada
|
2025-09-26 14:11:25 +07:00
|
|
|
// Kondisi Jika PatiD Sama
|
|
|
|
|
$payload = [
|
|
|
|
|
"PatientID"=> "SMAJ1",
|
|
|
|
|
"AlternatePID"=> "ALT001234",
|
|
|
|
|
"Prefix"=> "Mr.",
|
|
|
|
|
"NameFirst"=> "Budi",
|
|
|
|
|
"NameMiddle"=> "Santoso",
|
|
|
|
|
"NameMaiden"=> "Kiki",
|
|
|
|
|
"NameLast"=> "Wijaya",
|
|
|
|
|
"Suffix"=> "S.kom",
|
|
|
|
|
"NameAlias"=> "Bud",
|
|
|
|
|
"Gender"=> "1",
|
|
|
|
|
];
|
2025-10-19 22:36:31 +07:00
|
|
|
$result = $this->withBodyFormat('json')->call('post', 'api/patient', $payload);
|
2025-09-26 14:11:25 +07:00
|
|
|
$result->assertStatus(400);
|
2025-09-25 14:01:33 +07:00
|
|
|
|
2025-09-26 14:11:25 +07:00
|
|
|
}
|
2025-09-25 14:01:33 +07:00
|
|
|
|
2025-10-14 15:50:22 +07:00
|
|
|
// 201 - Passed
|
2025-10-19 22:36:31 +07:00
|
|
|
// Test Sukses Dengan User Dummy
|
2025-09-26 15:03:11 +07:00
|
|
|
public function testCreatePatientSuccess() {
|
2025-10-14 15:50:22 +07:00
|
|
|
|
|
|
|
|
$faker = Factory::create('id_ID');
|
|
|
|
|
|
2025-10-16 10:28:40 +07:00
|
|
|
for ($i = 0; $i < 2; $i++) {
|
2025-10-14 15:50:22 +07:00
|
|
|
$payload = [
|
|
|
|
|
"PatientID" => "DUM" . $faker->numberBetween(1, 1000). $faker->numberBetween(1, 1000).$faker->numberBetween(1, 1000),
|
|
|
|
|
"AlternatePID" => "DMY" . $faker->numberBetween(1, 1000). $faker->numberBetween(1, 1000).$faker->numberBetween(1, 1000),
|
|
|
|
|
"Prefix" => $faker->title,
|
|
|
|
|
"NameFirst" => $faker->firstName,
|
|
|
|
|
"NameMiddle" => $faker->firstName,
|
|
|
|
|
"NameMaiden" => $faker->firstName,
|
|
|
|
|
"NameLast" => $faker->lastName,
|
|
|
|
|
"Suffix" => "S.Kom",
|
|
|
|
|
"NameAlias" => $faker->userName,
|
|
|
|
|
"Gender" => $faker->numberBetween(5, 6),
|
|
|
|
|
"PlaceOfBirth" => $faker->city,
|
|
|
|
|
"Birthdate" => $faker->date('Y-m-d'),
|
|
|
|
|
"ZIP" => $faker->postcode,
|
|
|
|
|
"Street_1" => $faker->streetAddress,
|
|
|
|
|
"Street_2" => "RT " . $faker->numberBetween(1, 10) . " RW " . $faker->numberBetween(1, 10),
|
|
|
|
|
"Street_3" => "Blok " . $faker->numberBetween(1, 20),
|
|
|
|
|
"City" => $faker->city,
|
|
|
|
|
"Province" => $faker->state,
|
|
|
|
|
"EmailAddress1" => "A" . $faker->numberBetween(1, 1000). $faker->numberBetween(1, 1000).$faker->numberBetween(1, 1000).'@gmail.com',
|
|
|
|
|
"EmailAddress2" => "B" . $faker->numberBetween(1, 1000). $faker->numberBetween(1, 1000).$faker->numberBetween(1, 1000).'@gmail.com',
|
2025-12-17 15:19:55 +07:00
|
|
|
"Phone" => $faker->numerify('08##########'),
|
|
|
|
|
"MobilePhone" => $faker->numerify('08##########'),
|
2025-10-14 15:50:22 +07:00
|
|
|
"Race" => (string) $faker->numberBetween(175, 205),
|
|
|
|
|
"Country" => (string) $faker->numberBetween(221, 469),
|
|
|
|
|
"MaritalStatus" => (string) $faker->numberBetween(8, 15),
|
|
|
|
|
"Religion" => (string) $faker->numberBetween(206, 212),
|
|
|
|
|
"Ethnic" => (string) $faker->numberBetween(213, 220),
|
|
|
|
|
"Citizenship" => "WNI",
|
|
|
|
|
"DeathIndicator" => (string) $faker->numberBetween(16, 17),
|
|
|
|
|
"LinkTo" => (string) $faker->numberBetween(2, 3),
|
|
|
|
|
"Custodian" => $i-1,
|
|
|
|
|
"PatIdt" => [
|
|
|
|
|
"IdentifierType" => "KTP",
|
|
|
|
|
"Identifier" => $faker->nik() ?? $faker->numerify('################')
|
|
|
|
|
],
|
|
|
|
|
"PatAtt" => [
|
2025-12-17 15:19:55 +07:00
|
|
|
[ "Address" => "/api/upload/" . $faker->uuid . ".jpg" ]
|
2025-10-14 15:50:22 +07:00
|
|
|
],
|
|
|
|
|
"PatCom" => $faker->sentence,
|
|
|
|
|
];
|
|
|
|
|
if($payload['DeathIndicator'] == '16') {
|
|
|
|
|
$payload['DeathDateTime'] = $faker->date('Y-m-d H:i:s');
|
|
|
|
|
} else {
|
|
|
|
|
$payload['DeathDateTime'] = null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$result = $this->withBodyFormat('json')->call('post', 'api/patient', $payload);
|
|
|
|
|
|
2025-12-17 15:19:55 +07:00
|
|
|
|
|
|
|
|
|
2025-10-16 10:28:40 +07:00
|
|
|
$result->assertStatus(201);
|
2025-10-14 15:50:22 +07:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Error - Passed
|
2025-10-17 15:31:48 +07:00
|
|
|
// Test dengan user dummy dan harus error
|
2025-10-14 15:50:22 +07:00
|
|
|
public function testCreatePatidtValidationError() {
|
2025-09-25 14:01:33 +07:00
|
|
|
|
2025-10-14 15:50:22 +07:00
|
|
|
$faker = Factory::create('id_ID');
|
2025-09-25 14:01:33 +07:00
|
|
|
|
2025-10-14 15:50:22 +07:00
|
|
|
$payload = [
|
|
|
|
|
"PatientID" => "DUMQ" . $faker->numberBetween(1, 1000). $faker->numberBetween(1, 1000).$faker->numberBetween(1, 1000),
|
|
|
|
|
"AlternatePID" => "DMYQ" . $faker->numberBetween(1, 1000). $faker->numberBetween(1, 1000).$faker->numberBetween(1, 1000),
|
|
|
|
|
"Prefix" => $faker->title,
|
|
|
|
|
"NameFirst" => $faker->firstName,
|
|
|
|
|
"NameMiddle" => $faker->firstName,
|
|
|
|
|
"NameMaiden" => $faker->firstName,
|
|
|
|
|
"NameLast" => $faker->lastName,
|
|
|
|
|
"Suffix" => "S.Kom",
|
|
|
|
|
"NameAlias" => $faker->userName,
|
|
|
|
|
"Gender" => $faker->numberBetween(5, 6),
|
|
|
|
|
"PlaceOfBirth" => $faker->city,
|
|
|
|
|
"Birthdate" => $faker->date('Y-m-d'),
|
|
|
|
|
"ZIP" => $faker->postcode,
|
|
|
|
|
"Street_1" => $faker->streetAddress,
|
|
|
|
|
"Street_2" => "RT " . $faker->numberBetween(1, 10) . " RW " . $faker->numberBetween(1, 10),
|
|
|
|
|
"Street_3" => "Blok " . $faker->numberBetween(1, 20),
|
|
|
|
|
"City" => $faker->city,
|
|
|
|
|
"Province" => $faker->state,
|
|
|
|
|
"EmailAddress1" => "AAQ" . (string)$faker->numberBetween(1, 1110).'@gmail.com',
|
|
|
|
|
"EmailAddress2" => "BAQ" . (string)$faker->numberBetween(1, 1110).'@gmail.com',
|
2025-12-17 15:19:55 +07:00
|
|
|
"Phone" => $faker->numerify('08##########'),
|
|
|
|
|
"MobilePhone" => $faker->numerify('08##########'),
|
2025-10-14 15:50:22 +07:00
|
|
|
"Race" => (string) $faker->numberBetween(175, 205),
|
|
|
|
|
"Country" => (string) $faker->numberBetween(221, 469),
|
|
|
|
|
"MaritalStatus" => (string) $faker->numberBetween(8, 15),
|
|
|
|
|
"Religion" => (string) $faker->numberBetween(206, 212),
|
|
|
|
|
"Ethnic" => (string) $faker->numberBetween(213, 220),
|
|
|
|
|
"Citizenship" => "WNI",
|
|
|
|
|
"DeathIndicator" => (string) $faker->numberBetween(16, 17),
|
|
|
|
|
"LinkTo" => (string) $faker->numberBetween(2, 3),
|
|
|
|
|
"Custodian" => 1,
|
|
|
|
|
"PatIdt" => [
|
|
|
|
|
"IdentifierType" => "KTP",
|
2025-10-19 22:36:31 +07:00
|
|
|
// Identifier lebih dari 255 karakter - error validasi
|
2025-10-14 15:50:22 +07:00
|
|
|
"Identifier" => "numberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetween"
|
|
|
|
|
],
|
|
|
|
|
"PatAtt" => [
|
|
|
|
|
[ "Address" => "/api/upload/" . $faker->word . ".jpg" ]
|
|
|
|
|
],
|
|
|
|
|
"PatCom" => $faker->sentence,
|
|
|
|
|
];
|
2025-09-25 14:01:33 +07:00
|
|
|
|
2025-10-14 15:50:22 +07:00
|
|
|
if($payload['DeathIndicator'] == '16') {
|
|
|
|
|
$payload['DeathDateTime'] = $faker->date('Y-m-d H:i:s');
|
|
|
|
|
} else {
|
|
|
|
|
$payload['DeathDateTime'] = null;
|
|
|
|
|
}
|
2025-09-25 14:01:33 +07:00
|
|
|
|
2025-10-14 15:50:22 +07:00
|
|
|
$result = $this->withBodyFormat('json')->post($this->endpoint, $payload);
|
2025-10-17 15:31:48 +07:00
|
|
|
$json = $result->getJSON();
|
|
|
|
|
$data = json_decode($json, true);
|
|
|
|
|
|
2025-12-17 15:19:55 +07:00
|
|
|
$this->assertArrayHasKey("messages", $data);
|
2025-10-19 22:36:31 +07:00
|
|
|
}
|
|
|
|
|
|
2025-10-14 15:50:22 +07:00
|
|
|
public function testCreateWithoutAttachments() {
|
|
|
|
|
$faker = Factory::create('id_ID');
|
2025-09-25 14:01:33 +07:00
|
|
|
|
2025-10-14 15:50:22 +07:00
|
|
|
$payload = [
|
|
|
|
|
"PatientID" => "DUAU" . $faker->numberBetween(1, 1000).$faker->numberBetween(1, 1000),
|
|
|
|
|
"AlternatePID" => "DMAU" . $faker->numberBetween(5, 1000).$faker->numberBetween(1, 1000),
|
|
|
|
|
"Prefix" => $faker->title,
|
|
|
|
|
"NameFirst" => $faker->firstName,
|
|
|
|
|
"NameMiddle" => $faker->firstName,
|
|
|
|
|
"NameMaiden" => $faker->firstName,
|
|
|
|
|
"NameLast" => $faker->lastName,
|
|
|
|
|
"Suffix" => "S.Kom",
|
|
|
|
|
"NameAlias" => $faker->userName,
|
|
|
|
|
"Gender" => $faker->numberBetween(5, 6),
|
|
|
|
|
"PlaceOfBirth" => $faker->city,
|
|
|
|
|
"Birthdate" => $faker->date('Y-m-d'),
|
|
|
|
|
"ZIP" => $faker->postcode,
|
|
|
|
|
"Street_1" => $faker->streetAddress,
|
|
|
|
|
"Street_2" => "RT " . $faker->numberBetween(1, 10) . " RW " . $faker->numberBetween(1, 10),
|
|
|
|
|
"Street_3" => "Blok " . $faker->numberBetween(1, 20),
|
|
|
|
|
"City" => $faker->city,
|
|
|
|
|
"Province" => $faker->state,
|
|
|
|
|
"EmailAddress1" => "AiA" . $faker->numberBetween(1, 1110).$faker->numberBetween(1, 1110).'@gmail.com',
|
|
|
|
|
"EmailAddress2" => "BiA" . $faker->numberBetween(1, 1110).$faker->numberBetween(1, 1110).'@gmail.com',
|
2025-12-17 15:19:55 +07:00
|
|
|
"Phone" => $faker->numerify('08##########'),
|
|
|
|
|
"MobilePhone" => $faker->numerify('08##########'),
|
2025-10-14 15:50:22 +07:00
|
|
|
"Race" => (string) $faker->numberBetween(175, 205),
|
|
|
|
|
"Country" => (string) $faker->numberBetween(221, 469),
|
|
|
|
|
"MaritalStatus" => (string) $faker->numberBetween(8, 15),
|
|
|
|
|
"Religion" => (string) $faker->numberBetween(206, 212),
|
|
|
|
|
"Ethnic" => (string) $faker->numberBetween(213, 220),
|
|
|
|
|
"Citizenship" => "WNI",
|
|
|
|
|
"DeathIndicator" => (string) $faker->numberBetween(16, 17),
|
|
|
|
|
"LinkTo" => (string) $faker->numberBetween(2, 3),
|
|
|
|
|
"Custodian" => 1,
|
|
|
|
|
"PatIdt" => [
|
|
|
|
|
"IdentifierType" => "KTP",
|
|
|
|
|
"Identifier" => $faker->nik() ?? $faker->numerify('################')
|
|
|
|
|
],
|
|
|
|
|
"PatAtt" => [],
|
|
|
|
|
"PatCom" => $faker->sentence,
|
|
|
|
|
];
|
2025-09-25 14:01:33 +07:00
|
|
|
|
2025-10-14 15:50:22 +07:00
|
|
|
if($payload['DeathIndicator'] == '16') {
|
|
|
|
|
$payload['DeathDateTime'] = $faker->date('Y-m-d H:i:s');
|
|
|
|
|
} else {
|
|
|
|
|
$payload['DeathDateTime'] = null;
|
|
|
|
|
}
|
2025-09-25 14:01:33 +07:00
|
|
|
|
2025-10-14 15:50:22 +07:00
|
|
|
$result = $this->withBodyFormat('json')->post($this->endpoint, $payload);
|
2025-09-25 14:01:33 +07:00
|
|
|
|
2025-10-14 15:50:22 +07:00
|
|
|
$result->assertStatus(201);
|
|
|
|
|
}
|
2025-09-25 14:01:33 +07:00
|
|
|
|
2025-10-14 15:50:22 +07:00
|
|
|
// 201 - Passed
|
2025-10-17 15:31:48 +07:00
|
|
|
// Test dengan user dummy dan harus berhasil - PatCom kosong
|
2025-10-14 15:50:22 +07:00
|
|
|
public function testCreateWithoutPatComments() {
|
|
|
|
|
$faker = Factory::create('id_ID');
|
2025-09-25 14:01:33 +07:00
|
|
|
|
2025-10-14 15:50:22 +07:00
|
|
|
$payload = [
|
|
|
|
|
"PatientID" => "DUALU" . $faker->numberBetween(1, 1000).$faker->numberBetween(1, 1000),
|
|
|
|
|
"AlternatePID" => "DMALU" . $faker->numberBetween(5, 1000).$faker->numberBetween(1, 1000),
|
|
|
|
|
"Prefix" => $faker->title,
|
|
|
|
|
"NameFirst" => $faker->firstName,
|
|
|
|
|
"NameMiddle" => $faker->firstName,
|
|
|
|
|
"NameMaiden" => $faker->firstName,
|
|
|
|
|
"NameLast" => $faker->lastName,
|
|
|
|
|
"Suffix" => "S.Kom",
|
|
|
|
|
"NameAlias" => $faker->userName,
|
|
|
|
|
"Gender" => $faker->numberBetween(5, 6),
|
|
|
|
|
"PlaceOfBirth" => $faker->city,
|
|
|
|
|
"Birthdate" => $faker->date('Y-m-d'),
|
|
|
|
|
"ZIP" => $faker->postcode,
|
|
|
|
|
"Street_1" => $faker->streetAddress,
|
|
|
|
|
"Street_2" => "RT " . $faker->numberBetween(1, 10) . " RW " . $faker->numberBetween(1, 10),
|
|
|
|
|
"Street_3" => "Blok " . $faker->numberBetween(1, 20),
|
|
|
|
|
"City" => $faker->city,
|
|
|
|
|
"Province" => $faker->state,
|
|
|
|
|
"EmailAddress1" => "AiAe" . $faker->numberBetween(1, 1110).$faker->numberBetween(1, 1110).'@gmail.com',
|
|
|
|
|
"EmailAddress2" => "BiAe" . $faker->numberBetween(1, 1110).$faker->numberBetween(1, 1110).'@gmail.com',
|
2025-12-17 15:19:55 +07:00
|
|
|
"Phone" => $faker->numerify('08##########'),
|
|
|
|
|
"MobilePhone" => $faker->numerify('08##########'),
|
2025-10-14 15:50:22 +07:00
|
|
|
"Race" => (string) $faker->numberBetween(175, 205),
|
|
|
|
|
"Country" => (string) $faker->numberBetween(221, 469),
|
|
|
|
|
"MaritalStatus" => (string) $faker->numberBetween(8, 15),
|
|
|
|
|
"Religion" => (string) $faker->numberBetween(206, 212),
|
|
|
|
|
"Ethnic" => (string) $faker->numberBetween(213, 220),
|
|
|
|
|
"Citizenship" => "WNI",
|
|
|
|
|
"DeathIndicator" => (string) $faker->numberBetween(16, 17),
|
|
|
|
|
"LinkTo" => (string) $faker->numberBetween(2, 3),
|
|
|
|
|
"Custodian" => 1,
|
|
|
|
|
"PatIdt" => [
|
|
|
|
|
"IdentifierType" => "KTP",
|
|
|
|
|
"Identifier" => $faker->nik() ?? $faker->numerify('################')
|
|
|
|
|
],
|
|
|
|
|
"PatAtt" => [
|
2025-12-17 15:19:55 +07:00
|
|
|
[ "Address" => "/api/upload/test1_" . $faker->uuid . ".jpg" ],
|
|
|
|
|
[ "Address" => "/api/upload/test2_" . $faker->uuid . ".jpg" ],
|
|
|
|
|
[ "Address" => "/api/upload/test3_" . $faker->uuid . ".jpg" ]
|
2025-10-14 15:50:22 +07:00
|
|
|
],
|
|
|
|
|
"PatCom" => null,
|
|
|
|
|
];
|
2025-09-25 14:01:33 +07:00
|
|
|
|
2025-10-14 15:50:22 +07:00
|
|
|
if($payload['DeathIndicator'] == '16') {
|
|
|
|
|
$payload['DeathDateTime'] = $faker->date('Y-m-d H:i:s');
|
|
|
|
|
} else {
|
|
|
|
|
$payload['DeathDateTime'] = null;
|
|
|
|
|
}
|
2025-09-25 14:01:33 +07:00
|
|
|
|
2025-10-14 15:50:22 +07:00
|
|
|
$result = $this->withBodyFormat('json')->post($this->endpoint, $payload);
|
2025-09-25 14:01:33 +07:00
|
|
|
|
2025-10-14 15:50:22 +07:00
|
|
|
$result->assertStatus(201);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 500 - Passed
|
2025-10-17 15:31:48 +07:00
|
|
|
// Test dengan user dummy dan harus gagal - identifier tidak valid
|
2025-10-14 15:50:22 +07:00
|
|
|
public function testCreateDatabaseError() {
|
|
|
|
|
$faker = Factory::create('id_ID');
|
|
|
|
|
|
|
|
|
|
$payload = [
|
|
|
|
|
"PatientID" => "DaUALU" . $faker->numberBetween(1, 1000).$faker->numberBetween(1, 1000),
|
|
|
|
|
"AlternatePID" => "DaMALU" . $faker->numberBetween(5, 1000).$faker->numberBetween(1, 1000),
|
|
|
|
|
"Prefix" => $faker->title,
|
|
|
|
|
"NameFirst" => $faker->firstName,
|
|
|
|
|
"NameMiddle" => $faker->firstName,
|
|
|
|
|
"NameMaiden" => $faker->firstName,
|
|
|
|
|
"NameLast" => $faker->lastName,
|
|
|
|
|
"Suffix" => "S.Kom",
|
|
|
|
|
"NameAlias" => $faker->userName,
|
|
|
|
|
"Gender" => $faker->numberBetween(5, 6),
|
|
|
|
|
"PlaceOfBirth" => $faker->city,
|
|
|
|
|
"Birthdate" => $faker->date('Y-m-d'),
|
|
|
|
|
"ZIP" => $faker->postcode,
|
|
|
|
|
"Street_1" => $faker->streetAddress,
|
|
|
|
|
"Street_2" => "RT " . $faker->numberBetween(1, 10) . " RW " . $faker->numberBetween(1, 10),
|
|
|
|
|
"Street_3" => "Blok " . $faker->numberBetween(1, 20),
|
|
|
|
|
"City" => $faker->city,
|
|
|
|
|
"Province" => $faker->state,
|
|
|
|
|
"EmailAddress1" => "AiaAe" . $faker->numberBetween(1, 1110).$faker->numberBetween(1, 1110).'@gmail.com',
|
|
|
|
|
"EmailAddress2" => "BiaAe" . $faker->numberBetween(1, 1110).$faker->numberBetween(1, 1110).'@gmail.com',
|
2025-12-17 15:19:55 +07:00
|
|
|
"Phone" => $faker->numerify('08##########'),
|
|
|
|
|
"MobilePhone" => $faker->numerify('08##########'),
|
2025-10-14 15:50:22 +07:00
|
|
|
"Race" => (string) $faker->numberBetween(175, 205),
|
|
|
|
|
"Country" => (string) $faker->numberBetween(221, 469),
|
|
|
|
|
"MaritalStatus" => (string) $faker->numberBetween(8, 15),
|
|
|
|
|
"Religion" => (string) $faker->numberBetween(206, 212),
|
|
|
|
|
"Ethnic" => (string) $faker->numberBetween(213, 220),
|
|
|
|
|
"Citizenship" => "WNI",
|
|
|
|
|
"DeathIndicator" => (string) $faker->numberBetween(16, 17),
|
|
|
|
|
"LinkTo" => (string) $faker->numberBetween(2, 3),
|
|
|
|
|
"Custodian" => 1,
|
|
|
|
|
"PatIdt" => [
|
2025-10-17 15:31:48 +07:00
|
|
|
"IdentifierType" => [], // Ini Salah
|
2025-10-14 15:50:22 +07:00
|
|
|
"Identifier" => $faker->nik() ?? $faker->numerify('################')
|
|
|
|
|
],
|
|
|
|
|
"PatAtt" => [
|
2025-10-17 15:31:48 +07:00
|
|
|
[ "Address" => "/api/upload/asasd" . $faker->word . ".jpg" ],
|
|
|
|
|
[ "Address" => "/api/upload/adsds" . $faker->word . ".jpg" ],
|
|
|
|
|
[ "Address" => "/api/upload/sdjs" . $faker->word . ".jpg" ]
|
2025-10-14 15:50:22 +07:00
|
|
|
],
|
2025-10-17 15:31:48 +07:00
|
|
|
"PatCom" => [],
|
2025-10-14 15:50:22 +07:00
|
|
|
];
|
|
|
|
|
|
|
|
|
|
if($payload['DeathIndicator'] == '16') {
|
|
|
|
|
$payload['DeathDateTime'] = $faker->date('Y-m-d H:i:s');
|
|
|
|
|
} else {
|
|
|
|
|
$payload['DeathDateTime'] = null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$result = $this->withBodyFormat('json')->post($this->endpoint, $payload);
|
2025-10-17 15:31:48 +07:00
|
|
|
$json = $result->getJSON();
|
|
|
|
|
$data = json_decode($json, true);
|
|
|
|
|
|
2025-12-17 15:19:55 +07:00
|
|
|
// Since we fixed the controller, this might return success or validation error, but not crash.
|
|
|
|
|
// If success (201), data has 'status'=>'success'. If validation error (400), data has 'messages'.
|
|
|
|
|
// Let's just assert it is NOT 500 first.
|
|
|
|
|
if ($result->response()->getStatusCode() !== 500) {
|
|
|
|
|
$this->fail("Expected 500 Server Error but got " . $result->response()->getStatusCode() . " Body: " . $json);
|
|
|
|
|
}
|
|
|
|
|
$this->assertEquals(500, $result->response()->getStatusCode());
|
2025-10-14 15:50:22 +07:00
|
|
|
}
|
2025-09-25 14:01:33 +07:00
|
|
|
|
2025-09-23 10:18:48 +07:00
|
|
|
}
|