assertRedirect(route('login')); get(route('security.edit'))->assertRedirect(route('login')); get(route('appearance.edit'))->assertRedirect(route('login')); }); }); describe('Profile Settings Module - Actions', function () { beforeEach(function () { $this->user = User::factory()->create(); actingAs($this->user); }); it('can access profile edit page', function () { get(route('profile.edit')) ->assertOk() ->assertInertia(fn ($page) => $page ->component('settings/profile') ); }); it('can update profile information', function () { $newData = [ 'username' => 'newusername', 'email' => 'newemail@example.com', 'nik' => '1234567890123456', 'full_name' => 'New Full Name', 'phone_number' => '081234567890', 'address' => 'New Address', 'birth_place' => 'New City', 'birth_date' => '1990-01-01', ]; patch(route('profile.update'), $newData) ->assertRedirect(route('profile.edit')) ->assertSessionHas('success'); assertDatabaseHas('users', [ 'id' => $this->user->id, 'username' => 'newusername', 'email' => 'newemail@example.com', ]); assertDatabaseHas('user_profiles', [ 'user_id' => $this->user->id, 'nik' => '1234567890123456', 'full_name' => 'New Full Name', ]); }); it('can delete profile', function () { delete(route('profile.destroy'), [ 'password' => 'password', ])->assertRedirect('/'); assertGuest(); assertSoftDeleted('users', ['id' => $this->user->id]); }); it('can access security edit page', function () { get(route('security.edit')) ->assertOk() ->assertInertia(fn ($page) => $page ->component('settings/security') ); }); it('can update password', function () { $response = put(route('user-password.update'), [ 'current_password' => 'password', // Default factory password 'password' => 'newpassword123', 'password_confirmation' => 'newpassword123', ]); $response->assertRedirect(); expect(Hash::check('newpassword123', $this->user->fresh()->password))->toBeTrue(); }); it('validates password update', function () { put(route('user-password.update'), [ 'current_password' => 'wrongpassword', 'password' => 'newpassword123', 'password_confirmation' => 'newpassword123', ])->assertSessionHasErrors(['current_password']); }); it('can access appearance page', function () { get(route('appearance.edit')) ->assertOk() ->assertInertia(fn ($page) => $page ->component('settings/appearance') ); }); });