EmailVerificationTest.php 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. <?php
  2. use App\Models\User;
  3. use Illuminate\Auth\Events\Verified;
  4. use Illuminate\Support\Facades\Event;
  5. use Illuminate\Support\Facades\URL;
  6. test('email verification screen can be rendered', function () {
  7. $user = User::factory()->unverified()->create();
  8. $response = $this->actingAs($user)->get('/verify-email');
  9. $response->assertStatus(200);
  10. });
  11. test('email can be verified', function () {
  12. $user = User::factory()->unverified()->create();
  13. Event::fake();
  14. $verificationUrl = URL::temporarySignedRoute(
  15. 'verification.verify',
  16. now()->addMinutes(60),
  17. ['id' => $user->id, 'hash' => sha1($user->email)]
  18. );
  19. $response = $this->actingAs($user)->get($verificationUrl);
  20. Event::assertDispatched(Verified::class);
  21. expect($user->fresh()->hasVerifiedEmail())->toBeTrue();
  22. $response->assertRedirect(route('dashboard', absolute: false).'?verified=1');
  23. });
  24. test('email is not verified with invalid hash', function () {
  25. $user = User::factory()->unverified()->create();
  26. $verificationUrl = URL::temporarySignedRoute(
  27. 'verification.verify',
  28. now()->addMinutes(60),
  29. ['id' => $user->id, 'hash' => sha1('wrong-email')]
  30. );
  31. $this->actingAs($user)->get($verificationUrl);
  32. expect($user->fresh()->hasVerifiedEmail())->toBeFalse();
  33. });