$role, 'guard_name' => 'web']); } } private function createUser(string $role): User { $user = User::factory()->create(); $user->assignRole($role); return $user; } private function createIbadah(?int $userId = null): RumahIbadah { return RumahIbadah::create([ 'user_id' => $userId, 'nama' => 'Test Masjid', 'jenis' => 'masjid', 'latitude' => -7.0, 'longitude' => 110.0, 'radius' => 500, ]); } public function test_ibadah_store_sets_user_id(): void { $pengurus = $this->createUser('pengurus_ibadah'); $this->actingAs($pengurus); $this->postJson('/api/ibadah', [ 'nama' => 'Masjid Baru', 'latitude' => -7.0, 'longitude' => 110.0, ])->assertOk()->assertJsonFragment(['user_id' => $pengurus->id]); } public function test_pengurus_can_update_own_ibadah(): void { $pengurus = $this->createUser('pengurus_ibadah'); $ibadah = $this->createIbadah($pengurus->id); $this->actingAs($pengurus); $this->putJson("/api/ibadah/{$ibadah->id}", [ 'nama' => 'Masjid Diperbarui', 'latitude' => -7.0, 'longitude' => 110.0, 'radius' => 500, ])->assertOk()->assertJsonFragment(['nama' => 'Masjid Diperbarui']); } public function test_pengurus_cannot_update_others_ibadah(): void { $pengurus = $this->createUser('pengurus_ibadah'); $admin = $this->createUser('administrator'); $ibadah = $this->createIbadah($admin->id); $this->actingAs($pengurus); $this->putJson("/api/ibadah/{$ibadah->id}", [ 'nama' => 'Coba Edit', 'latitude' => -7.0, 'longitude' => 110.0, 'radius' => 500, ])->assertStatus(403); } public function test_administrator_can_update_any_ibadah(): void { $admin = $this->createUser('administrator'); $pengurus = $this->createUser('pengurus_ibadah'); $ibadah = $this->createIbadah($pengurus->id); $this->actingAs($admin); $this->putJson("/api/ibadah/{$ibadah->id}", [ 'nama' => 'Edit oleh Admin', 'latitude' => -7.0, 'longitude' => 110.0, 'radius' => 500, ])->assertOk()->assertJsonFragment(['nama' => 'Edit oleh Admin']); } public function test_pengurus_cannot_delete_others_ibadah(): void { $pengurus = $this->createUser('pengurus_ibadah'); $admin = $this->createUser('administrator'); $ibadah = $this->createIbadah($admin->id); $this->actingAs($pengurus); $this->deleteJson("/api/ibadah/{$ibadah->id}")->assertStatus(403); } public function test_pengurus_can_delete_own_ibadah(): void { $pengurus = $this->createUser('pengurus_ibadah'); $ibadah = $this->createIbadah($pengurus->id); $this->actingAs($pengurus); $this->deleteJson("/api/ibadah/{$ibadah->id}")->assertOk(); $this->assertNull(RumahIbadah::find($ibadah->id)); } public function test_petugas_can_update_all_miskin_fields(): void { $petugas = $this->createUser('petugas_pendataan'); $this->actingAs($petugas); $this->postJson('/api/miskin', [ 'id_rumah' => 'TESTID001', 'nama_kk' => 'Budi Santoso', 'latitude' => -7.0, 'longitude' => 110.0, 'jumlah_kk' => 1, 'jumlah_orang' => 4, ])->assertOk(); $this->putJson('/api/miskin/TESTID001', [ 'nama_kk' => 'Budi Diperbarui', 'latitude' => -7.0, 'longitude' => 110.0, 'jumlah_kk' => 2, 'jumlah_orang' => 6, 'pekerjaan' => 'Buruh', 'pendapatan' => 1500000, 'kondisi_rumah' => 'buruk', 'keterangan' => 'Catatan baru', ])->assertOk()->assertJsonFragment(['nama_kk' => 'Budi Diperbarui']); } }