setupUser(); $role = Role::firstOrCreate(['name' => 'Owner']); Permission::firstOrCreate(['name' => 'update user']); $role->givePermissionTo('update user'); $this->user->assignRole($role); $this->targetUser = User::factory()->create(); $this->targetEmployee = Employee::factory()->for($this->targetUser)->create(); $this->targetUser->outlets()->attach($this->outlet); $this->targetUser->assignRole(Role::firstOrCreate(['name' => 'Admin'])); }); it('renders the edit user page correctly', function () { $this->actingAs($this->user) ->get(route('studio.master.user.edit', $this->targetUser)) ->assertOk() ->assertSeeLivewire(Edit::class); }); it('loads existing user data correctly', function () { Livewire::actingAs($this->user) ->test(Edit::class, ['user' => $this->targetUser]) ->assertSet('form.full_name', $this->targetEmployee->full_name) ->assertSet('form.username', $this->targetUser->username); }); it('can update a user', function () { Livewire::actingAs($this->user) ->test(Edit::class, ['user' => $this->targetUser]) ->set('form.full_name', 'Pegawai Diperbarui') ->set('form.status', UserStatus::INACTIVE->value) ->call('save') ->assertHasNoErrors() ->assertRedirect(route('studio.master.user.index', ['notification' => 'Pegawai berhasil diperbarui.'])); $this->targetUser->refresh(); $this->targetEmployee->refresh(); expect($this->targetEmployee->full_name)->toBe('Pegawai Diperbarui'); expect($this->targetUser->status)->toBe(UserStatus::INACTIVE); }); it('cannot update user without permission', function () { $this->user->roles()->detach(); $this->user->permissions()->detach(); Livewire::actingAs($this->user) ->test(Edit::class, ['user' => $this->targetUser]) ->set('form.full_name', 'Unauthorized Edit') ->call('save') ->assertForbidden(); });