seed(RoleUserSeeder::class); return User::where('email', 'admin@koipb.test')->first(); } public function test_admin_can_create_user_with_role(): void { $this->actingAs($this->admin())->post(route('admin.users.store'), [ 'name' => 'Pegawai Baru', 'email' => 'baru@koipb.test', 'role' => User::ROLE_KAUNTER, 'password' => 'rahsia123', 'password_confirmation' => 'rahsia123', ])->assertRedirect(route('admin.users.index')); $user = User::where('email', 'baru@koipb.test')->first(); $this->assertNotNull($user); $this->assertTrue($user->hasRole(User::ROLE_KAUNTER)); } public function test_admin_can_change_role_and_password(): void { $admin = $this->admin(); $kaunter = User::where('email', 'kaunter@koipb.test')->first(); $this->actingAs($admin)->put(route('admin.users.update', $kaunter), [ 'name' => $kaunter->name, 'email' => $kaunter->email, 'role' => User::ROLE_CABUTAN, 'password' => 'katalaluanbaru', 'password_confirmation' => 'katalaluanbaru', ])->assertRedirect(route('admin.users.index')); $kaunter->refresh(); $this->assertTrue($kaunter->hasRole(User::ROLE_CABUTAN)); $this->assertFalse($kaunter->hasRole(User::ROLE_KAUNTER)); $this->assertTrue(Hash::check('katalaluanbaru', $kaunter->password)); } public function test_cannot_delete_self(): void { $admin = $this->admin(); $this->actingAs($admin)->delete(route('admin.users.destroy', $admin)) ->assertSessionHas('error'); $this->assertDatabaseHas('users', ['id' => $admin->id]); } public function test_cannot_demote_last_admin(): void { $admin = $this->admin(); $this->actingAs($admin)->put(route('admin.users.update', $admin), [ 'name' => $admin->name, 'email' => $admin->email, 'role' => User::ROLE_KAUNTER, ])->assertSessionHas('error'); $admin->refresh(); $this->assertTrue($admin->hasRole(User::ROLE_ADMIN)); } public function test_non_admin_cannot_access_user_management(): void { $this->seed(RoleUserSeeder::class); $kaunter = User::where('email', 'kaunter@koipb.test')->first(); $this->actingAs($kaunter)->get(route('admin.users.index'))->assertForbidden(); } public function test_user_can_change_own_password(): void { $this->seed(RoleUserSeeder::class); $kaunter = User::where('email', 'kaunter@koipb.test')->first(); $this->actingAs($kaunter)->put(route('profile.password'), [ 'current_password' => 'password', 'password' => 'katalaluanbaru', 'password_confirmation' => 'katalaluanbaru', ])->assertRedirect(route('profile.edit')); $kaunter->refresh(); $this->assertTrue(Hash::check('katalaluanbaru', $kaunter->password)); } public function test_wrong_current_password_rejected(): void { $this->seed(RoleUserSeeder::class); $kaunter = User::where('email', 'kaunter@koipb.test')->first(); $this->actingAs($kaunter)->put(route('profile.password'), [ 'current_password' => 'salah', 'password' => 'katalaluanbaru', 'password_confirmation' => 'katalaluanbaru', ])->assertSessionHasErrors('current_password'); $kaunter->refresh(); $this->assertTrue(Hash::check('password', $kaunter->password)); } }