117 lines
3.7 KiB
PHP
117 lines
3.7 KiB
PHP
<?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')
|
|
);
|
|
});
|
|
});
|