ThrottleLoginsTest.php 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. <?php
  2. namespace Laravel\Ui\Tests\AuthBackend;
  3. use Illuminate\Foundation\Auth\ThrottlesLogins as ThrottlesLoginsTrait;
  4. use Orchestra\Testbench\TestCase;
  5. use Illuminate\Http\Request;
  6. use PHPUnit\Framework\Attributes\DataProvider;
  7. use PHPUnit\Framework\Attributes\Test;
  8. class ThrottleLoginsTest extends TestCase
  9. {
  10. #[Test]
  11. #[DataProvider('emailProvider')]
  12. public function it_can_generate_throttle_key(string $email, string $expectedEmail): void
  13. {
  14. $throttle = $this->createMock(ThrottlesLogins::class);
  15. $throttle->method('username')->willReturn('email');
  16. $reflection = new \ReflectionClass($throttle);
  17. $method = $reflection->getMethod('throttleKey');
  18. $method->setAccessible(true);
  19. $request = $this->mock(Request::class);
  20. $request->expects('input')->with('email')->andReturn($email);
  21. $request->expects('ip')->andReturn('192.168.0.1');
  22. $this->assertSame($expectedEmail . '|192.168.0.1', $method->invoke($throttle, $request));
  23. }
  24. public static function emailProvider(): array
  25. {
  26. return [
  27. 'lowercase special characters' => ['ⓣⓔⓢⓣ@ⓛⓐⓡⓐⓥⓔⓛ.ⓒⓞⓜ', 'test@laravel.com'],
  28. 'uppercase special characters' => ['ⓉⒺⓈⓉ@ⓁⒶⓇⒶⓋⒺⓁ.ⒸⓄⓂ', 'test@laravel.com'],
  29. 'special character numbers' => ['test⑩⓸③@laravel.com', 'test1043@laravel.com'],
  30. 'default email' => ['test@laravel.com', 'test@laravel.com'],
  31. ];
  32. }
  33. }
  34. class ThrottlesLogins
  35. {
  36. use ThrottlesLoginsTrait;
  37. public function username()
  38. {
  39. return 'email';
  40. }
  41. }