1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- <?php
- use App\Models\User;
- use Illuminate\Auth\Events\Verified;
- use Illuminate\Support\Facades\Event;
- use Illuminate\Support\Facades\URL;
- test('email verification screen can be rendered', function () {
- $user = User::factory()->unverified()->create();
- $response = $this->actingAs($user)->get(route('verification.notice'));
- $response->assertStatus(200);
- });
- test('email can be verified', function () {
- $user = User::factory()->unverified()->create();
- Event::fake();
- $verificationUrl = URL::temporarySignedRoute(
- 'verification.verify',
- now()->addMinutes(60),
- ['id' => $user->id, 'hash' => sha1($user->email)]
- );
- $response = $this->actingAs($user)->get($verificationUrl);
- Event::assertDispatched(Verified::class);
- expect($user->fresh()->hasVerifiedEmail())->toBeTrue();
- $response->assertRedirect(route('dashboard', absolute: false).'?verified=1');
- });
- test('email is not verified with invalid hash', function () {
- $user = User::factory()->unverified()->create();
- $verificationUrl = URL::temporarySignedRoute(
- 'verification.verify',
- now()->addMinutes(60),
- ['id' => $user->id, 'hash' => sha1('wrong-email')]
- );
- $this->actingAs($user)->get($verificationUrl);
- expect($user->fresh()->hasVerifiedEmail())->toBeFalse();
- });
- test('email is not verified with invalid user id', function () {
- $user = User::factory()->create([
- 'email_verified_at' => null,
- ]);
- $verificationUrl = URL::temporarySignedRoute(
- 'verification.verify',
- now()->addMinutes(60),
- ['id' => 123, 'hash' => sha1($user->email)]
- );
- $this->actingAs($user)->get($verificationUrl);
- expect($user->fresh()->hasVerifiedEmail())->toBeFalse();
- });
- test('verified user is redirected to dashboard from verification prompt', function () {
- $user = User::factory()->create([
- 'email_verified_at' => now(),
- ]);
- $response = $this->actingAs($user)->get(route('verification.notice'));
- $response->assertRedirect(route('dashboard', absolute: false));
- });
- test('already verified user visiting verification link is redirected without firing event again', function () {
- $user = User::factory()->create([
- 'email_verified_at' => now(),
- ]);
- Event::fake();
- $verificationUrl = URL::temporarySignedRoute(
- 'verification.verify',
- now()->addMinutes(60),
- ['id' => $user->id, 'hash' => sha1($user->email)]
- );
- $this->actingAs($user)->get($verificationUrl)
- ->assertRedirect(route('dashboard', absolute: false).'?verified=1');
- expect($user->fresh()->hasVerifiedEmail())->toBeTrue();
- Event::assertNotDispatched(Verified::class);
- });
|