lernschiff/tests/Feature/ProfileTest.php

96 lines
2.6 KiB
PHP

<?php
use App\Models\User;
use App\Scopes\TenantScope;
use Livewire\Volt\Volt;
test('profile page is displayed', function () {
$user = User::factory()->create();
$this->actingAs($user);
$response = $this->get('/profile');
$response
->assertOk()
->assertSeeVolt('profile.update-profile-information-form')
->assertSeeVolt('profile.update-password-form')
->assertSeeVolt('profile.delete-user-form');
});
test('profile information can be updated', function () {
$user = User::factory()->create();
$this->actingAs($user);
$component = Volt::test('profile.update-profile-information-form')
->set('name', 'Test User')
->set('email', 'test@example.com')
->call('updateProfileInformation');
$component
->assertHasNoErrors()
->assertNoRedirect();
$user->refresh();
$this->assertSame('Test User', $user->name);
$this->assertSame('test@example.com', $user->email);
$this->assertNull($user->email_verified_at);
});
test('email verification status is unchanged when the email address is unchanged', function () {
$user = User::factory()->create();
$this->actingAs($user);
$component = Volt::test('profile.update-profile-information-form')
->set('name', 'Test User')
->set('email', $user->email)
->call('updateProfileInformation');
$component
->assertHasNoErrors()
->assertNoRedirect();
$this->assertNotNull($user->refresh()->email_verified_at);
});
test('user can delete their account', function () {
$user = User::factory()->create();
$userId = $user->id;
$this->actingAs($user);
$component = Volt::test('profile.delete-user-form')
->set('password', 'password')
->call('deleteUser');
$component
->assertHasNoErrors()
->assertRedirect('/');
$this->assertGuest();
// Lernschiff uses SoftDeletes — user record is soft-deleted (deleted_at is set).
$deletedUser = User::withoutGlobalScope(TenantScope::class)->withTrashed()->find($userId);
$this->assertNotNull($deletedUser, 'User record should still exist (soft-deleted)');
$this->assertNotNull($deletedUser->deleted_at, 'User should be soft-deleted (deleted_at not null)');
});
test('correct password must be provided to delete account', function () {
$user = User::factory()->create();
$this->actingAs($user);
$component = Volt::test('profile.delete-user-form')
->set('password', 'wrong-password')
->call('deleteUser');
$component
->assertHasErrors('password')
->assertNoRedirect();
$this->assertNotNull($user->fresh());
});