null, 'NameFirst' => '' ]; // Tidak valid $result = $this->withBodyFormat('json')->call('patch', $this->endpoint . '/1', $payload); $result->assertStatus(400); $json = $result->getJSON(); $data = json_decode($json, true); $this->assertArrayHasKey('messages', $data); } /** * 404 / 500 - Update Nonexistent Patient * Coba update InternalPID yang tidak ada. */ public function testUpdateNonexistentPatientShouldFail() { $faker = Factory::create('id_ID'); $payload = [ "PatientID" => "SMAJ1", "EmailAddress1" => 'asaas7890@gmail.com', "Phone" => $faker->numerify('08##########'), "MobilePhone" => $faker->numerify('08##########'), 'NameFirst' => $faker->firstName, 'NameLast' => $faker->lastName, 'Sex' => '1', 'Birthdate' => $faker->date('Y-m-d'), 'PatIdt' => [ 'IdentifierType' => 'KTP', 'Identifier' => $faker->nik() ], 'PatCom' => $faker->sentence, 'PatAtt' => [ [ 'Address' => '/api/upload/' . $faker->uuid . '.jpg' ], ], ]; $result = $this->withBodyFormat('json')->call('patch', $this->endpoint . '/999999', $payload); $result->assertStatus(201); // Update returns success even if no rows found (depending on logic) } /** * 201 - Update Success * Pastikan bisa update data yang valid (gunakan dummy data dari database). */ public function testUpdatePatientSuccess() { $faker = Factory::create('id_ID'); // NOTE: Sebaiknya ambil InternalPID yang sudah ada (mock atau dari DB fixture) // Untuk contoh ini kita asumsikan ada ID 1 $payload = [ "PatientID" => "SMAJ1", 'NameFirst' => $faker->firstName, 'NameMiddle' => $faker->firstName, 'NameLast' => $faker->lastName, 'Sex' => '1', 'Birthdate' => $faker->date('Y-m-d'), 'EmailAddress1' => 'update_' . $faker->numberBetween(1,999) . '@gmail.com', "Phone" => $faker->numerify('08##########'), "MobilePhone" => $faker->numerify('08##########'), 'PlaceOfBirth' => $faker->city, 'LinkTo' => null, 'PatIdt' => [ 'IdentifierType' => 'KTP', 'Identifier' => $faker->nik(), ], "isDead" => (string) $faker->numberBetween(0, 1), 'PatCom' => 'Update be', 'PatAtt' => [ [ 'Address' => '/api/upload/' . $faker->uuid . '.jpg' ], ], ]; if($payload['isDead'] == '1') { $payload['DeathDateTime'] = $faker->date('Y-m-d H:i:s'); } else { $payload['DeathDateTime'] = null; } $result = $this->withBodyFormat('json')->call('patch', $this->endpoint . '/1', $payload); $result->assertStatus(201); $json = $result->getJSON(); $data = json_decode($json, true); $this->assertEquals('success', $data['status']); } /** * 201 - Update dengan PatCom kosong */ public function testUpdateWithoutPatCom() { $faker = Factory::create('id_ID'); $payload = [ "PatientID" => "SMAJ1", 'NameFirst' => $faker->firstName, 'NameMiddle' => $faker->firstName, 'NameLast' => $faker->lastName, 'Sex' => '1', 'Birthdate' => $faker->date('Y-m-d'), 'EmailAddress1' => 'update_' . $faker->numberBetween(1,999) . '@gmail.com', "Phone" => $faker->numerify('08##########'), "MobilePhone" => $faker->numerify('08##########'), 'PlaceOfBirth' => $faker->city, 'LinkTo' => null, 'PatIdt' => [ 'IdentifierType' => 'KTP', 'Identifier' => $faker->nik(), ], "isDead" => (string) $faker->numberBetween(0, 1), 'PatCom' => null, 'PatAtt' => [ [ 'Address' => '/api/upload/' . $faker->uuid . '.jpg' ], ], ]; if($payload['isDead'] == '1') { $payload['DeathDateTime'] = $faker->date('Y-m-d H:i:s'); } else { $payload['DeathDateTime'] = null; } $result = $this->withBodyFormat('json')->call('patch', $this->endpoint . '/1', $payload); $result->assertStatus(201); } /** * 201 - Update tanpa PatAtt */ public function testUpdateWithoutAttachments() { $faker = Factory::create('id_ID'); $payload = [ "PatientID" => "SMAJ1", 'NameFirst' => $faker->firstName, 'NameMiddle' => $faker->firstName, 'NameLast' => $faker->lastName, 'Sex' => '1', 'Birthdate' => $faker->date('Y-m-d'), 'EmailAddress1' => 'update_' . $faker->numberBetween(1,999) . '@gmail.com', "Phone" => $faker->numerify('08##########'), "MobilePhone" => $faker->numerify('08##########'), 'PlaceOfBirth' => $faker->city, 'LinkTo' => null, 'PatIdt' => [ 'IdentifierType' => 'KTP', 'Identifier' => $faker->nik(), ], "isDead" => (string) $faker->numberBetween(0, 1), 'PatCom' => null, 'PatAtt' => [], ]; if($payload['isDead'] == '1') { $payload['DeathDateTime'] = $faker->date('Y-m-d H:i:s'); } else { $payload['DeathDateTime'] = null; } $result = $this->withBodyFormat('json')->call('patch', $this->endpoint . '/1', $payload); $result->assertStatus(201); } /** * 201 - Update tanpa PatAtt */ public function testUpdateWithAttachments() { $faker = Factory::create('id_ID'); $payload = [ "PatientID" => "SMAJ1", 'NameFirst' => $faker->firstName, 'NameMiddle' => $faker->firstName, 'NameLast' => $faker->lastName, 'Sex' => '1', 'Birthdate' => $faker->date('Y-m-d'), 'EmailAddress1' => 'update_' . $faker->numberBetween(1,999) . '@gmail.com', "Phone" => $faker->numerify('08##########'), "MobilePhone" => $faker->numerify('08##########'), 'PlaceOfBirth' => $faker->city, 'LinkTo' => null, 'PatIdt' => [ 'IdentifierType' => 'KTP', 'Identifier' => $faker->nik(), ], "isDead" => (string) $faker->numberBetween(0, 1), 'PatCom' => null, 'PatAtt' => [ [ 'Address' => '/api/upload/' . $faker->uuid . '.jpg' ], ], ]; if($payload['isDead'] == '1') { $payload['DeathDateTime'] = $faker->date('Y-m-d H:i:s'); } else { $payload['DeathDateTime'] = null; } $result = $this->withBodyFormat('json')->call('patch', $this->endpoint . '/1', $payload); $result->assertStatus(201); } // /** // * 500 - Invalid PatIdt // */ public function testUpdatePatIdtInvalid() { $faker = Factory::create('id_ID'); $payload = [ "PatientID" => "SMAJ1", 'NameFirst' => $faker->firstName, 'NameMiddle' => $faker->firstName, 'NameLast' => $faker->lastName, 'Sex' => '1', 'Birthdate' => $faker->date('Y-m-d'), 'EmailAddress1' => 'update_' . $faker->numberBetween(1,999) . '@gmail.com', "Phone" => $faker->numerify('08##########'), "MobilePhone" => $faker->numerify('08##########'), 'PlaceOfBirth' => $faker->city, 'LinkTo' => null, 'PatIdt' => [ 'IdentifierType' => [], 'Identifier' => $faker->nik(), ], "isDead" => (string) $faker->numberBetween(0, 1), 'PatCom' => null, 'PatAtt' => [ [ 'Address' => '/api/upload/' . $faker->uuid . '.jpg' ], ], ]; if($payload['isDead'] == '1') { $payload['DeathDateTime'] = $faker->date('Y-m-d H:i:s'); } else { $payload['DeathDateTime'] = null; } $result = $this->withBodyFormat('json')->call('patch', $this->endpoint . '/1', $payload); $result->assertStatus(500); $json = $result->getJSON(); $data = json_decode($json, true); if (isset($data['messages']) && is_array($data['messages'])) { $this->assertArrayHasKey('error', $data['messages']); } else { $this->assertArrayHasKey('error', $data); } } }