first
This commit is contained in:
189
tests/Feature/Admin/ElectionSettingsTest.php
Normal file
189
tests/Feature/Admin/ElectionSettingsTest.php
Normal file
@@ -0,0 +1,189 @@
|
||||
<?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,
|
||||
]);
|
||||
}
|
||||
}
|
||||
83
tests/Feature/Admin/PusatOperationalSetupTest.php
Normal file
83
tests/Feature/Admin/PusatOperationalSetupTest.php
Normal file
@@ -0,0 +1,83 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Feature\Admin;
|
||||
|
||||
use App\Models\DaerahMengundi;
|
||||
use App\Models\Election;
|
||||
use App\Models\Position;
|
||||
use App\Models\PositionQuota;
|
||||
use App\Models\PusatMengundi;
|
||||
use App\Models\SaluranMengundi;
|
||||
use App\Models\User;
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use Tests\TestCase;
|
||||
|
||||
class PusatOperationalSetupTest extends TestCase
|
||||
{
|
||||
use RefreshDatabase;
|
||||
|
||||
public function test_admin_can_create_pusat_with_numbered_saluran_and_operational_quotas(): void
|
||||
{
|
||||
$this->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'),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user