refactor: remove email verification reset on profile update and add feature tests for profile settings

This commit is contained in:
Yoga Pangestu 2026-04-30 09:05:29 +07:00
parent 1d2e25e57f
commit 00586e168f
2 changed files with 116 additions and 4 deletions

View File

@ -40,10 +40,6 @@ public function update(ProfileUpdateRequest $request): RedirectResponse
'email' => $validated['email'],
]);
if ($user->isDirty('email')) {
$user->email_verified_at = null;
}
$user->save();
$user->profile()->update([

View File

@ -0,0 +1,116 @@
<?php
use App\Models\User;
use Illuminate\Support\Facades\Hash;
use function Pest\Laravel\actingAs;
use function Pest\Laravel\assertDatabaseHas;
use function Pest\Laravel\assertGuest;
use function Pest\Laravel\assertSoftDeleted;
use function Pest\Laravel\delete;
use function Pest\Laravel\get;
use function Pest\Laravel\patch;
use function Pest\Laravel\put;
/*
|--------------------------------------------------------------------------
| Profile Settings Module Tests
|--------------------------------------------------------------------------
*/
describe('Profile Settings Module - Authorization', function () {
it('redirects to login when accessing profile settings unauthenticated', function () {
get(route('profile.edit'))->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')
);
});
});