From dda123d9aa47984e357447aede50b8acfefe4432 Mon Sep 17 00:00:00 2001 From: GuavaPopper Date: Tue, 2 Jun 2026 19:16:57 +0700 Subject: [PATCH] feat: add roles seeder with 4 roles and default admin account Co-Authored-By: Claude Sonnet 4.6 --- database/seeders/DatabaseSeeder.php | 14 ++-------- database/seeders/RolesAndAdminSeeder.php | 34 ++++++++++++++++++++++++ tests/Feature/AuthTest.php | 20 ++++++++++++++ 3 files changed, 56 insertions(+), 12 deletions(-) create mode 100644 database/seeders/RolesAndAdminSeeder.php diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 6b901f8..49ab8ed 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -2,24 +2,14 @@ namespace Database\Seeders; -use App\Models\User; -use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { - use WithoutModelEvents; - - /** - * Seed the application's database. - */ public function run(): void { - // User::factory(10)->create(); - - User::factory()->create([ - 'name' => 'Test User', - 'email' => 'test@example.com', + $this->call([ + RolesAndAdminSeeder::class, ]); } } diff --git a/database/seeders/RolesAndAdminSeeder.php b/database/seeders/RolesAndAdminSeeder.php new file mode 100644 index 0000000..4925cbd --- /dev/null +++ b/database/seeders/RolesAndAdminSeeder.php @@ -0,0 +1,34 @@ + $name, 'guard_name' => 'web']); + } + + $admin = User::firstOrCreate( + ['email' => 'admin@webgis.local'], + [ + 'name' => 'Administrator', + 'password' => bcrypt('admin123'), + ] + ); + + $admin->syncRoles(['administrator']); + } +} diff --git a/tests/Feature/AuthTest.php b/tests/Feature/AuthTest.php index e75e43a..fb9e132 100644 --- a/tests/Feature/AuthTest.php +++ b/tests/Feature/AuthTest.php @@ -4,6 +4,7 @@ namespace Tests\Feature; use App\Models\User; use Illuminate\Foundation\Testing\RefreshDatabase; +use Spatie\Permission\Models\Role; use Tests\TestCase; class AuthTest extends TestCase @@ -26,4 +27,23 @@ class AuthTest extends TestCase $this->assertDatabaseHas('users', ['email' => 'admin@test.com']); } + + public function test_roles_seeder_creates_four_roles(): void + { + $this->artisan('db:seed', ['--class' => 'RolesAndAdminSeeder']); + + $this->assertDatabaseHas('roles', ['name' => 'administrator']); + $this->assertDatabaseHas('roles', ['name' => 'pengurus_ibadah']); + $this->assertDatabaseHas('roles', ['name' => 'petugas_pendataan']); + $this->assertDatabaseHas('roles', ['name' => 'pemangku_kebijakan']); + } + + public function test_roles_seeder_creates_default_admin(): void + { + $this->artisan('db:seed', ['--class' => 'RolesAndAdminSeeder']); + + $user = User::where('email', 'admin@webgis.local')->first(); + $this->assertNotNull($user); + $this->assertTrue($user->hasRole('administrator')); + } }