190 lines
6.2 KiB
PHP
190 lines
6.2 KiB
PHP
<?php
|
|
|
|
namespace Tests\Feature\Admin;
|
|
|
|
use App\Models\Election;
|
|
use App\Models\ElectionSetting;
|
|
use App\Models\User;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
use Tests\TestCase;
|
|
|
|
class ElectionSettingsTest extends TestCase
|
|
{
|
|
use RefreshDatabase;
|
|
|
|
public function test_admin_can_view_settings_page(): void
|
|
{
|
|
$this->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,
|
|
]);
|
|
}
|
|
}
|