EmailVerificationTest.php 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. <?php
  2. namespace Tests\Feature\Auth;
  3. use App\Models\User;
  4. use Illuminate\Auth\Events\Verified;
  5. use Illuminate\Foundation\Testing\RefreshDatabase;
  6. use Illuminate\Support\Facades\Event;
  7. use Illuminate\Support\Facades\URL;
  8. use Tests\TestCase;
  9. class EmailVerificationTest extends TestCase
  10. {
  11. use RefreshDatabase;
  12. public function test_email_can_be_verified(): void
  13. {
  14. $user = User::factory()->unverified()->create();
  15. Event::fake();
  16. $verificationUrl = URL::temporarySignedRoute(
  17. 'verification.verify',
  18. now()->addMinutes(60),
  19. ['id' => $user->id, 'hash' => sha1($user->email)]
  20. );
  21. $response = $this->actingAs($user)->get($verificationUrl);
  22. Event::assertDispatched(Verified::class);
  23. $this->assertTrue($user->fresh()->hasVerifiedEmail());
  24. $response->assertRedirect(config('app.frontend_url').'/dashboard?verified=1');
  25. }
  26. public function test_email_is_not_verified_with_invalid_hash(): void
  27. {
  28. $user = User::factory()->unverified()->create();
  29. $verificationUrl = URL::temporarySignedRoute(
  30. 'verification.verify',
  31. now()->addMinutes(60),
  32. ['id' => $user->id, 'hash' => sha1('wrong-email')]
  33. );
  34. $this->actingAs($user)->get($verificationUrl);
  35. $this->assertFalse($user->fresh()->hasVerifiedEmail());
  36. }
  37. }