GuidStringCodecTest.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <?php
  2. declare(strict_types=1);
  3. namespace Ramsey\Uuid\Test\Codec;
  4. use Mockery;
  5. use PHPUnit\Framework\MockObject\MockObject;
  6. use Ramsey\Uuid\Builder\UuidBuilderInterface;
  7. use Ramsey\Uuid\Codec\GuidStringCodec;
  8. use Ramsey\Uuid\Converter\NumberConverterInterface;
  9. use Ramsey\Uuid\Converter\TimeConverterInterface;
  10. use Ramsey\Uuid\Guid\Fields;
  11. use Ramsey\Uuid\Guid\Guid;
  12. use Ramsey\Uuid\Guid\GuidBuilder;
  13. use Ramsey\Uuid\Test\TestCase;
  14. use Ramsey\Uuid\UuidInterface;
  15. use function hex2bin;
  16. use function pack;
  17. class GuidStringCodecTest extends TestCase
  18. {
  19. /**
  20. * @var UuidBuilderInterface & MockObject
  21. */
  22. private $builder;
  23. /**
  24. * @var UuidInterface & MockObject
  25. */
  26. private $uuid;
  27. /**
  28. * @var Fields
  29. */
  30. private $fields;
  31. protected function setUp(): void
  32. {
  33. parent::setUp();
  34. $this->builder = $this->getMockBuilder(UuidBuilderInterface::class)->getMock();
  35. $this->uuid = $this->getMockBuilder(UuidInterface::class)->getMock();
  36. $this->fields = new Fields((string) hex2bin('785634123412cd4babef1234abcd4321'));
  37. }
  38. protected function tearDown(): void
  39. {
  40. parent::tearDown();
  41. unset($this->builder, $this->fields, $this->uuid);
  42. }
  43. public function testEncodeUsesFieldsArray(): void
  44. {
  45. $this->uuid->expects($this->once())
  46. ->method('getFields')
  47. ->willReturn($this->fields);
  48. $codec = new GuidStringCodec($this->builder);
  49. $codec->encode($this->uuid);
  50. }
  51. public function testEncodeReturnsFormattedString(): void
  52. {
  53. $this->uuid->method('getFields')
  54. ->willReturn($this->fields);
  55. $codec = new GuidStringCodec($this->builder);
  56. $result = $codec->encode($this->uuid);
  57. $this->assertSame('12345678-1234-4bcd-abef-1234abcd4321', $result);
  58. }
  59. public function testEncodeBinary(): void
  60. {
  61. $expectedBytes = (string) hex2bin('785634123412cd4babef1234abcd4321');
  62. $fields = new Fields($expectedBytes);
  63. $codec = new GuidStringCodec($this->builder);
  64. $numberConverter = Mockery::mock(NumberConverterInterface::class);
  65. $timeConverter = Mockery::mock(TimeConverterInterface::class);
  66. $uuid = new Guid($fields, $numberConverter, $codec, $timeConverter);
  67. $bytes = $codec->encodeBinary($uuid);
  68. $this->assertSame($expectedBytes, $bytes);
  69. }
  70. public function testDecodeReturnsGuid(): void
  71. {
  72. $string = 'uuid:12345678-1234-4bcd-abef-1234abcd4321';
  73. $numberConverter = Mockery::mock(NumberConverterInterface::class);
  74. $timeConverter = Mockery::mock(TimeConverterInterface::class);
  75. $builder = new GuidBuilder($numberConverter, $timeConverter);
  76. $codec = new GuidStringCodec($builder);
  77. $guid = $codec->decode($string);
  78. $this->assertInstanceOf(Guid::class, $guid);
  79. $this->assertSame('12345678-1234-4bcd-abef-1234abcd4321', $guid->toString());
  80. }
  81. public function testDecodeReturnsUuidFromBuilder(): void
  82. {
  83. $string = 'uuid:78563412-3412-cd4b-abef-1234abcd4321';
  84. $this->builder->method('build')
  85. ->willReturn($this->uuid);
  86. $codec = new GuidStringCodec($this->builder);
  87. $result = $codec->decode($string);
  88. $this->assertSame($this->uuid, $result);
  89. }
  90. public function testDecodeBytesReturnsUuid(): void
  91. {
  92. $string = '1234567812344bcd4bef1234abcd4321';
  93. $bytes = pack('H*', $string);
  94. $codec = new GuidStringCodec($this->builder);
  95. $this->builder->method('build')
  96. ->willReturn($this->uuid);
  97. $result = $codec->decodeBytes($bytes);
  98. $this->assertSame($this->uuid, $result);
  99. }
  100. }