107 lines
3.6 KiB
PHP
107 lines
3.6 KiB
PHP
<?php
|
|
|
|
namespace Tests\Feature;
|
|
|
|
use App\Enums\UserAccessLevel;
|
|
use App\Models\User;
|
|
use App\Models\WilayahDesa;
|
|
use App\Models\WilayahKabupaten;
|
|
use App\Models\WilayahKecamatan;
|
|
use App\Models\WilayahProvinsi;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
use Tests\TestCase;
|
|
|
|
class WilayahApiTest extends TestCase
|
|
{
|
|
use RefreshDatabase;
|
|
|
|
public function test_master_admin_can_create_hierarchical_regions_and_get_full_address(): void
|
|
{
|
|
$user = User::factory()->create([
|
|
'is_master' => true,
|
|
'access_level' => UserAccessLevel::MASTER_ADMIN,
|
|
]);
|
|
|
|
$provinsiId = $this->actingAs($user)
|
|
->postJson('/api/wilayah/provinsi', ['kode' => '11', 'nama' => 'Aceh'])
|
|
->assertCreated()
|
|
->json('data.id');
|
|
|
|
$kabupatenId = $this->postJson('/api/wilayah/kabupaten', [
|
|
'kode' => '11.01',
|
|
'nama' => 'Kabupaten Simeulue',
|
|
'provinsi_id' => $provinsiId,
|
|
])->assertCreated()->json('data.id');
|
|
|
|
$kecamatanId = $this->postJson('/api/wilayah/kecamatan', [
|
|
'kode' => '11.01.01',
|
|
'nama' => 'Teupah Selatan',
|
|
'kabupaten_id' => $kabupatenId,
|
|
])->assertCreated()->json('data.id');
|
|
|
|
$desaId = $this->postJson('/api/wilayah/desa', [
|
|
'kode' => '11.01.01.2001',
|
|
'nama' => 'Latiung',
|
|
'kecamatan_id' => $kecamatanId,
|
|
])->assertCreated()->json('data.id');
|
|
|
|
$this->getJson("/api/wilayah/alamat-lengkap?desa_id={$desaId}")
|
|
->assertOk()
|
|
->assertJsonPath('data.desa.nama', 'Latiung')
|
|
->assertJsonPath('data.kecamatan.nama', 'Teupah Selatan')
|
|
->assertJsonPath('data.kabupaten.nama', 'Kabupaten Simeulue')
|
|
->assertJsonPath('data.provinsi.nama', 'Aceh')
|
|
->assertJsonPath(
|
|
'data.alamat_wilayah',
|
|
'Desa/Kelurahan Latiung, Kecamatan Teupah Selatan, Kabupaten Simeulue, Provinsi Aceh'
|
|
);
|
|
}
|
|
|
|
public function test_child_region_requires_its_direct_parent(): void
|
|
{
|
|
$user = User::factory()->create([
|
|
'is_master' => true,
|
|
'access_level' => UserAccessLevel::MASTER_ADMIN,
|
|
]);
|
|
|
|
$this->actingAs($user)
|
|
->postJson('/api/wilayah/desa', [
|
|
'kode' => '01',
|
|
'nama' => 'Desa Tanpa Kecamatan',
|
|
])
|
|
->assertUnprocessable()
|
|
->assertJsonValidationErrors('kecamatan_id');
|
|
}
|
|
|
|
public function test_parent_with_children_cannot_be_deleted(): void
|
|
{
|
|
$user = User::factory()->create([
|
|
'is_master' => true,
|
|
'access_level' => UserAccessLevel::MASTER_ADMIN,
|
|
]);
|
|
$provinsi = WilayahProvinsi::create(['kode' => '12', 'nama' => 'Sumatera Utara']);
|
|
$kabupaten = WilayahKabupaten::create([
|
|
'provinsi_id' => $provinsi->id,
|
|
'kode' => '12.01',
|
|
'nama' => 'Tapanuli Tengah',
|
|
]);
|
|
$kecamatan = WilayahKecamatan::create([
|
|
'kabupaten_id' => $kabupaten->id,
|
|
'kode' => '12.01.01',
|
|
'nama' => 'Barus',
|
|
]);
|
|
WilayahDesa::create([
|
|
'kecamatan_id' => $kecamatan->id,
|
|
'kode' => '12.01.01.2001',
|
|
'nama' => 'Kampung Mudik',
|
|
]);
|
|
|
|
$this->actingAs($user)
|
|
->deleteJson("/api/wilayah/provinsi/{$provinsi->id}")
|
|
->assertUnprocessable()
|
|
->assertJsonValidationErrors('wilayah');
|
|
|
|
$this->assertDatabaseHas('wilayah_provinsi', ['id' => $provinsi->id]);
|
|
}
|
|
}
|