seed(); $admin = User::factory()->create(); $admin->assignRole('Admin'); $election = Election::query()->firstOrFail(); $daerah = DaerahMengundi::query()->where('election_id', $election->id)->firstOrFail(); $response = $this ->actingAs($admin) ->post(route('admin.setup.pusat.store'), [ 'election_id' => $election->id, 'daerah_mengundi_id' => $daerah->id, 'code' => 'PMAUTO', 'name' => 'Pusat Mengundi Automatik', 'address' => 'Alamat ujian', 'saluran_count' => 2, 'ktm_count' => 1, 'polis_iring_count' => 1, 'kp_count' => 4, 'ppm_count' => 1, 'kpdp_count' => 1, 'papm_count' => 3, 'jkm_count' => 1, 'kkm_count' => 1, 'calon_tambahan_count' => 2, ]); $response->assertRedirect(route('admin.setup.pusat.index')); $pusat = PusatMengundi::query()->where('code', 'PMAUTO')->firstOrFail(); $salurans = SaluranMengundi::query()->where('pusat_mengundi_id', $pusat->id)->get(); $this->assertCount(2, $salurans); $salurans->each(function (SaluranMengundi $saluran): void { $this->assertNull($saluran->name); $this->assertQuota($saluran->pusat_mengundi_id, $saluran->id, 'KTM', 1); $this->assertQuota($saluran->pusat_mengundi_id, $saluran->id, 'POLIS', 1); $this->assertQuota($saluran->pusat_mengundi_id, $saluran->id, 'KP', 4); $this->assertQuota($saluran->pusat_mengundi_id, $saluran->id, 'KPDP', 1); $this->assertQuota($saluran->pusat_mengundi_id, $saluran->id, 'CALON_TAMBAHAN', 2); }); $this->assertQuota($pusat->id, null, 'PPM', 1); $this->assertQuota($pusat->id, null, 'PAPM', 3); $this->assertQuota($pusat->id, null, 'JKM', 1); $this->assertQuota($pusat->id, null, 'KKM', 1); } private function assertQuota(int $pusatId, ?int $saluranId, string $positionCode, int $quota): void { $positionId = Position::query()->where('code', $positionCode)->value('id'); $this->assertSame( $quota, PositionQuota::query() ->where('pusat_mengundi_id', $pusatId) ->where('saluran_mengundi_id', $saluranId) ->where('position_id', $positionId) ->value('quota'), ); } }