profil
This commit is contained in:
117
tests/Feature/UserManagementTest.php
Normal file
117
tests/Feature/UserManagementTest.php
Normal file
@@ -0,0 +1,117 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Feature;
|
||||
|
||||
use App\Models\User;
|
||||
use Database\Seeders\RoleUserSeeder;
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Tests\TestCase;
|
||||
|
||||
class UserManagementTest extends TestCase
|
||||
{
|
||||
use RefreshDatabase;
|
||||
|
||||
private function admin(): User
|
||||
{
|
||||
$this->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));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user