1
0

TokenTest.php 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Tests\Unit\Auth;
  4. use App\Domain\Auth\Token;
  5. use App\Domain\Auth\TokenKind;
  6. use PHPUnit\Framework\Attributes\DataProvider;
  7. use PHPUnit\Framework\TestCase;
  8. final class TokenTest extends TestCase
  9. {
  10. #[DataProvider('validTokens')]
  11. public function testParsesValidTokens(string $raw, TokenKind $expectedKind): void
  12. {
  13. $token = Token::parse($raw);
  14. self::assertNotNull($token);
  15. self::assertSame($expectedKind, $token->kind);
  16. self::assertSame(substr($raw, 0, 8), $token->prefix());
  17. }
  18. /**
  19. * @return iterable<string, array{string, TokenKind}>
  20. */
  21. public static function validTokens(): iterable
  22. {
  23. // 32 chars from base32 alphabet
  24. $body = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';
  25. yield 'reporter' => ['irdb_rep_' . $body, TokenKind::Reporter];
  26. yield 'consumer' => ['irdb_con_' . $body, TokenKind::Consumer];
  27. yield 'admin' => ['irdb_adm_' . $body, TokenKind::Admin];
  28. yield 'service' => ['irdb_svc_' . $body, TokenKind::Service];
  29. }
  30. #[DataProvider('invalidTokens')]
  31. public function testRejectsInvalidTokens(string $raw): void
  32. {
  33. self::assertNull(Token::parse($raw));
  34. }
  35. /**
  36. * @return iterable<string, array{string}>
  37. */
  38. public static function invalidTokens(): iterable
  39. {
  40. yield 'empty' => [''];
  41. yield 'no prefix' => ['foo_bar_baz'];
  42. yield 'wrong tag' => ['irdb_xyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'];
  43. yield 'too short body' => ['irdb_adm_ABCDEFGH'];
  44. yield 'lowercase body' => ['irdb_adm_abcdefghijklmnopqrstuvwxyz234567'];
  45. yield 'invalid base32 char' => ['irdb_adm_ABCDEFGHIJKLMNOPQRSTUVWXYZ234560'];
  46. yield 'too long body' => ['irdb_adm_ABCDEFGHIJKLMNOPQRSTUVWXYZ234567ABCD'];
  47. yield 'missing underscore' => ['irdbadmABCDEFGHIJKLMNOPQRSTUVWXYZ234567'];
  48. }
  49. }