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()); } }