seed(DatabaseSeeder::class); $service = new KtmVacancyService; $pusat = PusatMengundi::query()->where('code', 'PM001')->firstOrFail(); $ktmAssignment = $this->ktmAssignment($pusat); $kpPosition = Position::query()->where('code', 'KP')->firstOrFail(); $this->assertNotEmpty($service->optionsForRoles($pusat, ['KP'])['KP']); foreach (range(1, 4) as $sequence) { StaffAssignment::query()->create([ 'election_id' => $pusat->election_id, 'user_id' => User::factory()->create()->id, 'position_id' => $kpPosition->id, 'pusat_mengundi_id' => $pusat->id, 'saluran_mengundi_id' => $ktmAssignment->saluran_mengundi_id, 'reports_to_assignment_id' => $ktmAssignment->id, 'status' => 'active', 'assigned_at' => now()->subMinutes($sequence), 'source' => 'test', ]); } $this->assertFalse($service->hasVacancyForAssignment($ktmAssignment->id, $pusat, 'KP')); } private function ktmAssignment(PusatMengundi $pusatMengundi): StaffAssignment { $ktmPosition = Position::query()->where('code', 'KTM')->firstOrFail(); return StaffAssignment::query() ->where('election_id', $pusatMengundi->election_id) ->where('pusat_mengundi_id', $pusatMengundi->id) ->where('position_id', $ktmPosition->id) ->where('status', 'active') ->whereNotNull('saluran_mengundi_id') ->firstOrFail(); } }