FunctionsTest.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <?php
  2. declare(strict_types=1);
  3. namespace Ramsey\Uuid\Test;
  4. use DateTimeImmutable;
  5. use DateTimeInterface;
  6. use Ramsey\Uuid\Rfc4122\FieldsInterface;
  7. use Ramsey\Uuid\Rfc4122\UuidV7;
  8. use Ramsey\Uuid\Rfc4122\UuidV8;
  9. use Ramsey\Uuid\Type\Hexadecimal;
  10. use Ramsey\Uuid\Type\Integer as IntegerObject;
  11. use Ramsey\Uuid\Uuid;
  12. use function Ramsey\Uuid\v1;
  13. use function Ramsey\Uuid\v2;
  14. use function Ramsey\Uuid\v3;
  15. use function Ramsey\Uuid\v4;
  16. use function Ramsey\Uuid\v5;
  17. use function Ramsey\Uuid\v6;
  18. use function Ramsey\Uuid\v7;
  19. use function Ramsey\Uuid\v8;
  20. class FunctionsTest extends TestCase
  21. {
  22. public function testV1ReturnsVersion1UuidString(): void
  23. {
  24. $v1 = v1();
  25. $this->assertIsString($v1);
  26. $this->assertSame(Uuid::UUID_TYPE_TIME, Uuid::fromString($v1)->getVersion());
  27. }
  28. public function testV2ReturnsVersion2UuidString(): void
  29. {
  30. $v2 = v2(
  31. Uuid::DCE_DOMAIN_PERSON,
  32. new IntegerObject('1004'),
  33. new Hexadecimal('aabbccdd0011'),
  34. 63
  35. );
  36. /** @var FieldsInterface $fields */
  37. $fields = Uuid::fromString($v2)->getFields();
  38. $this->assertIsString($v2);
  39. $this->assertSame(Uuid::UUID_TYPE_DCE_SECURITY, $fields->getVersion());
  40. }
  41. public function testV3ReturnsVersion3UuidString(): void
  42. {
  43. $ns = Uuid::fromString(Uuid::NAMESPACE_URL);
  44. $v3 = v3($ns, 'https://example.com/foo');
  45. $this->assertIsString($v3);
  46. $this->assertSame(Uuid::UUID_TYPE_HASH_MD5, Uuid::fromString($v3)->getVersion());
  47. }
  48. public function testV4ReturnsVersion4UuidString(): void
  49. {
  50. $v4 = v4();
  51. $this->assertIsString($v4);
  52. $this->assertSame(Uuid::UUID_TYPE_RANDOM, Uuid::fromString($v4)->getVersion());
  53. }
  54. public function testV5ReturnsVersion5UuidString(): void
  55. {
  56. $ns = Uuid::fromString(Uuid::NAMESPACE_URL);
  57. $v5 = v5($ns, 'https://example.com/foo');
  58. $this->assertIsString($v5);
  59. $this->assertSame(Uuid::UUID_TYPE_HASH_SHA1, Uuid::fromString($v5)->getVersion());
  60. }
  61. public function testV6ReturnsVersion6UuidString(): void
  62. {
  63. $v6 = v6(
  64. new Hexadecimal('aabbccdd0011'),
  65. 1234
  66. );
  67. /** @var FieldsInterface $fields */
  68. $fields = Uuid::fromString($v6)->getFields();
  69. $this->assertIsString($v6);
  70. $this->assertSame(Uuid::UUID_TYPE_REORDERED_TIME, $fields->getVersion());
  71. }
  72. public function testV7ReturnsVersion7UuidString(): void
  73. {
  74. $v7 = v7();
  75. /** @var UuidV7 $uuid */
  76. $uuid = Uuid::fromString($v7);
  77. /** @var FieldsInterface $fields */
  78. $fields = $uuid->getFields();
  79. $this->assertIsString($v7);
  80. $this->assertSame(Uuid::UUID_TYPE_UNIX_TIME, $fields->getVersion());
  81. $this->assertInstanceOf(DateTimeInterface::class, $uuid->getDateTime());
  82. }
  83. public function testV7WithCustomDateTimeReturnsVersion7UuidString(): void
  84. {
  85. $dateTime = new DateTimeImmutable('2022-09-14T22:44:33+00:00');
  86. $v7 = v7($dateTime);
  87. /** @var UuidV7 $uuid */
  88. $uuid = Uuid::fromString($v7);
  89. /** @var FieldsInterface $fields */
  90. $fields = $uuid->getFields();
  91. $this->assertIsString($v7);
  92. $this->assertSame(Uuid::UUID_TYPE_UNIX_TIME, $fields->getVersion());
  93. $this->assertInstanceOf(DateTimeInterface::class, $uuid->getDateTime());
  94. $this->assertSame(1663195473, $uuid->getDateTime()->getTimestamp());
  95. }
  96. public function testV8ReturnsVersion8UuidString(): void
  97. {
  98. $v8 = v8("\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff");
  99. /** @var UuidV8 $uuid */
  100. $uuid = Uuid::fromString($v8);
  101. /** @var FieldsInterface $fields */
  102. $fields = $uuid->getFields();
  103. $this->assertIsString($v8);
  104. $this->assertSame(Uuid::UUID_TYPE_CUSTOM, $fields->getVersion());
  105. }
  106. }