setupUser(); $role = Role::firstOrCreate(['name' => 'Owner']); Permission::firstOrCreate(['name' => 'view user']); Permission::firstOrCreate(['name' => 'delete user']); Permission::firstOrCreate(['name' => 'reset password user']); $role->givePermissionTo(['view user', 'delete user', 'reset password user']); $this->user->assignRole($role); }); it('renders the user index page correctly', function () { $this->actingAs($this->user) ->get(route('studio.master.user.index')) ->assertOk() ->assertSeeLivewire(Index::class); }); it('displays list of employees correctly', function () { $employees = collect(); foreach (range(1, 3) as $i) { $employees->push(Employee::factory()->create()); } Livewire::actingAs($this->user) ->test(Index::class) ->assertViewHas('employees', function ($viewEmployees) { return $viewEmployees->count() >= 3; }) ->assertSee($employees->first()->full_name) ->assertSee($employees->last()->full_name); }); it('can search employees by name', function () { $targetEmployee = Employee::factory()->create(['full_name' => 'Pegawai Spesifik']); $otherEmployee = Employee::factory()->create(['full_name' => 'Biasa Saja']); Livewire::actingAs($this->user) ->test(Index::class) ->set('search', 'Spesifik') ->assertSee($targetEmployee->full_name) ->assertDontSee($otherEmployee->full_name); }); it('can filter employees by status', function () { $activeUser = User::factory()->active()->create(); $activeEmployee = Employee::factory()->for($activeUser)->create(['full_name' => 'Pegawai Aktif']); $inactiveUser = User::factory()->inactive()->create(); $inactiveEmployee = Employee::factory()->for($inactiveUser)->create(['full_name' => 'Pegawai Nonaktif']); Livewire::actingAs($this->user) ->test(Index::class) ->set('status', [\App\Enums\UserStatus::ACTIVE->value]) ->assertSee($activeEmployee->full_name) ->assertDontSee($inactiveEmployee->full_name); }); it('can delete a user', function () { $userToDelete = User::factory()->create(); Employee::factory()->for($userToDelete)->create(); Livewire::actingAs($this->user) ->test(Index::class) ->call('delete', $userToDelete->id); $this->assertSoftDeleted('users', ['id' => $userToDelete->id]); $this->assertSoftDeleted('employees', ['user_id' => $userToDelete->id]); }); it('can reset user password', function () { $userToReset = User::factory()->create(['password' => Hash::make('old-password')]); Livewire::actingAs($this->user) ->test(Index::class) ->call('resetPassword', $userToReset->id); $userToReset->refresh(); expect(Hash::check(config('myconfig.password_default'), $userToReset->password))->toBeTrue(); }); it('cannot access index page without permission', function () { $this->user->roles()->detach(); $this->user->permissions()->detach(); $this->actingAs($this->user) ->get(route('studio.master.user.index')) ->assertForbidden(); });