Fix: Ensure demo account is always email-verified (#118)

## Summary
- Ensure `email_verified_at` is set when the demo account is created or
already exists but is unverified
- `email_verified_at` is not in the User model's `$fillable` array, so
set it directly on the model instead of via `create()`/`update()`

## Test plan
- [x] Added test that an existing unverified demo user gets verified on
`demo:reset`
- [x] Added assertion that newly created demo user has
`email_verified_at` set
- [x] All 3 demo reset tests pass
This commit is contained in:
Víctor Falcón 2026-02-13 07:36:54 +01:00 committed by GitHub
parent b69138df60
commit 79164345d9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 22 additions and 3 deletions

View File

@ -90,20 +90,25 @@ class ResetDemoAccountCommand extends Command
$user = User::where('email', $email)->first();
if ($user) {
$user->update(['encryption_salt' => $salt]);
$user->encryption_salt = $salt;
$user->email_verified_at ??= now();
$user->save();
return $user;
}
return User::create([
$user = new User([
'email' => $email,
'name' => 'Demo User',
'password' => $password,
'email_verified_at' => now(),
'onboarded_at' => now(),
'encryption_salt' => $salt,
'currency_code' => 'USD',
]);
$user->email_verified_at = now();
$user->save();
return $user;
}
private function deleteExistingData(User $user): void

View File

@ -23,7 +23,21 @@ test('demo:reset creates demo user with basic data structure', function () {
// Verify core data exists
expect($user)->not->toBeNull();
expect($user->email_verified_at)->not->toBeNull();
expect($user->accounts()->count())->toBe(6);
expect($user->transactions()->count())->toBeGreaterThan(2000);
expect($user->categories()->count())->toBe(63);
})->group('slow');
test('demo:reset verifies existing unverified demo user', function () {
User::factory()->create([
'email' => 'demo@whisper.money',
'email_verified_at' => null,
]);
$this->artisan('demo:reset')->assertSuccessful();
$user = User::where('email', 'demo@whisper.money')->first();
expect($user->email_verified_at)->not->toBeNull();
})->group('slow');