'Ngawur']; $result = $this->withBodyFormat('json') ->call('post', 'api/patient', $payload); $result->assertStatus(400); $result->assertJSONFragment([ 'status' => 'error' ]); // 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", ]; $result = $this->withBodyFormat('json') ->call('post', 'api/patient', $payload); $result->assertStatus(400); $result->assertJSONFragment([ 'status' => 'error', "message" => "Validation failed (patient)", ]); } // 201 - Passed public function testCreatePatientSuccess() { $faker = Factory::create('id_ID'); for ($i = 0; $i < 2; $i++) { $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', "Phone" => $faker->phoneNumber, "MobilePhone" => $faker->phoneNumber, "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" => [ [ "Address" => "/api/upload/" . $faker->word . ".jpg" ] ], "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); $result->assertStatus(201); } } // Error - Passed public function testCreatePatientValidationError() { $payload = [ "NameFirst" => "Jane" // PatientID kosong ]; $result = $this->withBodyFormat('json')->post($this->endpoint, $payload); // dd($result); $result->assertArrayHasKey("errors", $result); } // Error - Passed public function testCreatePatidtValidationError() { $faker = Factory::create('id_ID'); $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', "Phone" => $faker->phoneNumber, "MobilePhone" => $faker->phoneNumber, "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" => "numberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetween" // "Identifier" => $faker->nik() ?? $faker->numerify('################') ], "PatAtt" => [ [ "Address" => "/api/upload/" . $faker->word . ".jpg" ] ], "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')->post($this->endpoint, $payload); $result->assertArrayHasKey("errors", $result); } // 201 - Passed public function testCreateWithoutAttachments() { $faker = Factory::create('id_ID'); $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', "Phone" => $faker->phoneNumber, "MobilePhone" => $faker->phoneNumber, "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, ]; 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); $result->assertStatus(201); } // 201 - Passed public function testCreateWithoutPatComments() { $faker = Factory::create('id_ID'); $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', "Phone" => $faker->phoneNumber, "MobilePhone" => $faker->phoneNumber, "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" => [ [ "Address" => "/api/upload/" . $faker->word . ".jpg" ], [ "Address" => "/api/upload/" . $faker->word . ".jpg" ], [ "Address" => "/api/upload/" . $faker->word . ".jpg" ] ], "PatCom" => null, ]; 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); $result->assertStatus(201); } // 500 - Passed public function testCreateDatabaseError() { $faker = Factory::create('id_ID'); // Insert patient pertama $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', "Phone" => $faker->phoneNumber, "MobilePhone" => $faker->phoneNumber, "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" => [ [ "Address" => "/api/upload/" . $faker->word . ".jpg" ], [ "Address" => "/api/upload/" . $faker->word . ".jpg" ], [ "Address" => "/api/upload/" . $faker->word . ".jpg" ] ], "PatCom" => [], // Ini Salah ]; 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); $result->assertStatus(500); } // public function testCreateDuplicateIdentifier() { // $payload = [ // "PatientID" => "PX006", // "NameFirst" => "Alpha", // "Identity" => [ // "IdentifierType" => "KTP", // "Identifier" => "DUP123" // ] // ]; // $this->withBodyFormat('json')->post($this->endpoint, $payload); // $payload2 = [ // "PatientID" => "PX007", // "NameFirst" => "Beta", // "Identity" => [ // "IdentifierType" => "KTP", // "Identifier" => "DUP123" // Sama // ] // ]; // $result = $this->withBodyFormat('json')->post($this->endpoint, $payload2); // $result->assertStatus(422); // } }