seed(); $admin = User::factory()->create(); $admin->assignRole('Admin'); $election = Election::query()->firstOrFail(); $this->actingAs($admin) ->get(route('admin.setup.settings.edit', $election)) ->assertOk() ->assertSee('Tetapan Pilihanraya') ->assertSee('Mod Kehadiran') ->assertSee('Override Tempoh Pendaftaran'); } public function test_admin_can_activate_attendance(): void { $this->seed(); $admin = User::factory()->create(); $admin->assignRole('Admin'); $election = Election::query()->firstOrFail(); $election->settings()->update(['is_attendance_active' => false]); $this->actingAs($admin) ->patch(route('admin.setup.settings.update', $election), [ 'is_attendance_active' => '1', 'is_registration_open_override' => '', ]) ->assertRedirect(route('admin.setup.settings.edit', $election)); $this->assertTrue( ElectionSetting::query()->where('election_id', $election->id)->value('is_attendance_active') ); } public function test_admin_can_deactivate_attendance(): void { $this->seed(); $admin = User::factory()->create(); $admin->assignRole('Admin'); $election = Election::query()->firstOrFail(); $election->settings()->update(['is_attendance_active' => true]); $this->actingAs($admin) ->patch(route('admin.setup.settings.update', $election), [ 'is_attendance_active' => '0', 'is_registration_open_override' => '', ]) ->assertRedirect(route('admin.setup.settings.edit', $election)); $this->assertFalse( ElectionSetting::query()->where('election_id', $election->id)->value('is_attendance_active') ); } public function test_admin_can_force_open_registration(): void { $this->seed(); $admin = User::factory()->create(); $admin->assignRole('Admin'); $election = Election::query()->firstOrFail(); $election->settings()->update(['is_registration_open_override' => null]); $this->actingAs($admin) ->patch(route('admin.setup.settings.update', $election), [ 'is_attendance_active' => '0', 'is_registration_open_override' => '1', ]) ->assertRedirect(route('admin.setup.settings.edit', $election)); $this->assertTrue( ElectionSetting::query()->where('election_id', $election->id)->value('is_registration_open_override') ); } public function test_admin_can_force_close_registration(): void { $this->seed(); $admin = User::factory()->create(); $admin->assignRole('Admin'); $election = Election::query()->firstOrFail(); $election->settings()->update(['is_registration_open_override' => null]); $this->actingAs($admin) ->patch(route('admin.setup.settings.update', $election), [ 'is_attendance_active' => '0', 'is_registration_open_override' => '0', ]) ->assertRedirect(route('admin.setup.settings.edit', $election)); $this->assertFalse( ElectionSetting::query()->where('election_id', $election->id)->value('is_registration_open_override') ); } public function test_admin_can_reset_registration_override_to_auto(): void { $this->seed(); $admin = User::factory()->create(); $admin->assignRole('Admin'); $election = Election::query()->firstOrFail(); $election->settings()->update(['is_registration_open_override' => true]); $this->actingAs($admin) ->patch(route('admin.setup.settings.update', $election), [ 'is_attendance_active' => '0', 'is_registration_open_override' => '', ]) ->assertRedirect(route('admin.setup.settings.edit', $election)); $this->assertNull( ElectionSetting::query()->where('election_id', $election->id)->value('is_registration_open_override') ); } public function test_non_admin_cannot_access_settings_page(): void { $this->seed(); $election = Election::query()->firstOrFail(); foreach (['Admin Kewangan', 'PPM', 'KTM'] as $role) { $user = User::factory()->create(); $user->assignRole($role); $this->actingAs($user) ->get(route('admin.setup.settings.edit', $election)) ->assertForbidden(); } } public function test_non_admin_cannot_update_settings(): void { $this->seed(); $election = Election::query()->firstOrFail(); $user = User::factory()->create(); $user->assignRole('Admin Kewangan'); $this->actingAs($user) ->patch(route('admin.setup.settings.update', $election), [ 'is_attendance_active' => '1', 'is_registration_open_override' => '', ]) ->assertForbidden(); } public function test_settings_change_is_recorded_in_activity_log(): void { $this->seed(); $admin = User::factory()->create(); $admin->assignRole('Admin'); $election = Election::query()->firstOrFail(); $election->settings()->update(['is_attendance_active' => false]); $this->actingAs($admin) ->patch(route('admin.setup.settings.update', $election), [ 'is_attendance_active' => '1', 'is_registration_open_override' => '', ]); $this->assertDatabaseHas('activity_log', [ 'log_name' => 'admin_settings', 'description' => 'election_settings_updated', 'causer_id' => $admin->id, ]); } }