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]); } }