Initial commit
This commit is contained in:
78
tests/Feature/DeleteAccountTest.php
Normal file
78
tests/Feature/DeleteAccountTest.php
Normal file
@@ -0,0 +1,78 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Feature;
|
||||
|
||||
use App\Http\Livewire\Profile\DeleteUserForm;
|
||||
use App\Models\User;
|
||||
use Carbon\Carbon; // Import Carbon
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Livewire\Livewire;
|
||||
use Tests\TestCase;
|
||||
|
||||
class DeleteAccountTest extends TestCase
|
||||
{
|
||||
use RefreshDatabase;
|
||||
|
||||
public function test_user_profile_can_be_deleted()
|
||||
{
|
||||
$this->actingAs($initialUser = User::factory()->create());
|
||||
|
||||
// Assuming 'password' is the default factory password or the one set for the user
|
||||
$component = Livewire::test(DeleteUserForm::class)
|
||||
->set('password', 'password')
|
||||
->call('deleteUser');
|
||||
|
||||
// Fetch the user again from the database to get the updated attributes
|
||||
$userAfterDeletionAttempt = User::find($initialUser->id);
|
||||
|
||||
// 1. Assert that the user record still exists (since it's a custom soft delete)
|
||||
$this->assertNotNull($userAfterDeletionAttempt, 'User record should still exist in the database.');
|
||||
|
||||
// 2. Assert that the 'deleted_at' column is not null
|
||||
$this->assertNotNull(
|
||||
$userAfterDeletionAttempt->deleted_at,
|
||||
"The 'deleted_at' column should be populated."
|
||||
);
|
||||
|
||||
// 3. Optional: Assert that 'deleted_at' is a valid date instance (if cast)
|
||||
// or a string in the expected format.
|
||||
// If 'deleted_at' is cast to a Carbon instance in your User model:
|
||||
if (isset($userAfterDeletionAttempt->getCasts()['deleted_at']) &&
|
||||
in_array($userAfterDeletionAttempt->getCasts()['deleted_at'], ['date', 'datetime', 'immutable_date', 'immutable_datetime'])) {
|
||||
$this->assertInstanceOf(
|
||||
Carbon::class,
|
||||
$userAfterDeletionAttempt->deleted_at,
|
||||
"The 'deleted_at' column should be a Carbon instance."
|
||||
);
|
||||
} else {
|
||||
// If it's a string, you might check its format (less robust)
|
||||
$this->assertIsString($userAfterDeletionAttempt->deleted_at);
|
||||
// Example: Basic check if it looks like a datetime string
|
||||
$this->assertMatchesRegularExpression(
|
||||
'/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/',
|
||||
$userAfterDeletionAttempt->deleted_at,
|
||||
"The 'deleted_at' column should be a valid datetime string."
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
// Assert that the user is no longer authenticated
|
||||
$this->assertFalse(Auth::check(), 'User should be logged out after deletion.');
|
||||
|
||||
// Assert the redirect
|
||||
$component->assertRedirect(route('goodbye-deleted-user'));
|
||||
}
|
||||
|
||||
public function test_correct_password_must_be_provided_before_account_can_be_deleted()
|
||||
{
|
||||
$this->actingAs($user = User::factory()->create());
|
||||
|
||||
Livewire::test(DeleteUserForm::class)
|
||||
->set('password', 'wrong-password')
|
||||
->call('deleteUser')
|
||||
->assertHasErrors(['password']);
|
||||
|
||||
$this->assertNotNull($user->fresh());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user