'Ngawur']; $result = $this->withBodyFormat('json')->call('post', 'api/patient', $payload); $result->assertStatus(400); // Test dengan PatiD yg sudah ada // 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); } // 201 - Passed // Test Sukses Dengan User Dummy 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 // Test dengan user dummy dan harus error 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 lebih dari 255 karakter - error validasi "Identifier" => "numberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetweennumberBetween" ], "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); $json = $result->getJSON(); $data = json_decode($json, true); $result->assertArrayHasKey("error", $data); } 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 // Test dengan user dummy dan harus berhasil - Attachment kosong 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 // Test dengan user dummy dan harus berhasil - PatCom kosong 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/awghghghgef" . $faker->word.$faker->word . ".jpg" ], [ "Address" => "/api/upload/df6ghghg4" . $faker->word .$faker->word.".jpg" ], [ "Address" => "/api/upload/ldjghggsf" . $faker->word . $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 // Test dengan user dummy dan harus gagal - identifier tidak valid 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', "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" => [], // Ini Salah "Identifier" => $faker->nik() ?? $faker->numerify('################') ], "PatAtt" => [ [ "Address" => "/api/upload/asasd" . $faker->word . ".jpg" ], [ "Address" => "/api/upload/adsds" . $faker->word . ".jpg" ], [ "Address" => "/api/upload/sdjs" . $faker->word . ".jpg" ] ], "PatCom" => [], ]; 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); $json = $result->getJSON(); $data = json_decode($json, true); $result->assertArrayHasKey("error", $data); } }