4
4
5
5
use PHPUnit \Framework \TestCase ;
6
6
use Symfony \Component \Serializer \Exception \InvalidArgumentException ;
7
+ use Symfony \Component \Serializer \Exception \LogicException ;
7
8
use Symfony \Component \Serializer \Normalizer \UidNormalizer ;
8
9
use Symfony \Component \Uid \AbstractUid ;
9
10
use Symfony \Component \Uid \Ulid ;
@@ -26,19 +27,6 @@ protected function setUp(): void
26
27
$ this ->normalizer = new UidNormalizer ();
27
28
}
28
29
29
- public function dataProvider ()
30
- {
31
- return [
32
- ['9b7541de-6f87-11ea-ab3c-9da9a81562fc ' , UuidV1::class],
33
- ['e576629b-ff34-3642-9c08-1f5219f0d45b ' , UuidV3::class],
34
- ['4126dbc1-488e-4f6e-aadd-775dcbac482e ' , UuidV4::class],
35
- ['18cdf3d3-ea1b-5b23-a9c5-40abd0e2df22 ' , UuidV5::class],
36
- ['1ea6ecef-eb9a-66fe-b62b-957b45f17e43 ' , UuidV6::class],
37
- ['1ea6ecef-eb9a-66fe-b62b-957b45f17e43 ' , AbstractUid::class],
38
- ['01E4BYF64YZ97MDV6RH0HAMN6X ' , Ulid::class],
39
- ];
40
- }
41
-
42
30
public function testSupportsNormalization ()
43
31
{
44
32
$ this ->assertTrue ($ this ->normalizer ->supportsNormalization (Uuid::v1 ()));
@@ -50,16 +38,88 @@ public function testSupportsNormalization()
50
38
$ this ->assertFalse ($ this ->normalizer ->supportsNormalization (new \stdClass ()));
51
39
}
52
40
41
+ public function normalizeProvider ()
42
+ {
43
+ $ uidFormats = [null , 'canonical ' , 'base_58 ' , 'base_32 ' , 'rfc_4122 ' ];
44
+ $ data = [
45
+ [
46
+ UuidV1::fromString ('9b7541de-6f87-11ea-ab3c-9da9a81562fc ' ),
47
+ '9b7541de-6f87-11ea-ab3c-9da9a81562fc ' ,
48
+ '9b7541de-6f87-11ea-ab3c-9da9a81562fc ' ,
49
+ 'LCQS8f2p5SDSiAt9V7ZYnF ' ,
50
+ '4VEN0XWVW727NAPF4XN6M1ARQW ' ,
51
+ '9b7541de-6f87-11ea-ab3c-9da9a81562fc '
52
+ ],
53
+ [
54
+ UuidV3::fromString ('e576629b-ff34-3642-9c08-1f5219f0d45b ' ),
55
+ 'e576629b-ff34-3642-9c08-1f5219f0d45b ' ,
56
+ 'e576629b-ff34-3642-9c08-1f5219f0d45b ' ,
57
+ 'VLRwe3qfi66uUAE3mYQ4Dp ' ,
58
+ '75ESH9QZSM6S19R20ZA8CZ1N2V ' ,
59
+ 'e576629b-ff34-3642-9c08-1f5219f0d45b ' ,
60
+ ],
61
+ [
62
+ UuidV4::fromString ('4126dbc1-488e-4f6e-aadd-775dcbac482e ' ),
63
+ '4126dbc1-488e-4f6e-aadd-775dcbac482e ' ,
64
+ '4126dbc1-488e-4f6e-aadd-775dcbac482e ' ,
65
+ '93d88pS3fdrDXNR2XxU9nu ' ,
66
+ '214VDW2J4E9XQANQBQBQ5TRJ1E ' ,
67
+ '4126dbc1-488e-4f6e-aadd-775dcbac482e ' ,
68
+ ],
69
+ [
70
+ UuidV5::fromString ('18cdf3d3-ea1b-5b23-a9c5-40abd0e2df22 ' ),
71
+ '18cdf3d3-ea1b-5b23-a9c5-40abd0e2df22 ' ,
72
+ '18cdf3d3-ea1b-5b23-a9c5-40abd0e2df22 ' ,
73
+ '44epMFQYZ9byVSGis5dofo ' ,
74
+ '0RSQSX7TGVBCHTKHA0NF8E5QS2 ' ,
75
+ '18cdf3d3-ea1b-5b23-a9c5-40abd0e2df22 ' ,
76
+ ],
77
+ [
78
+ UuidV6::fromString ('1ea6ecef-eb9a-66fe-b62b-957b45f17e43 ' ),
79
+ '1ea6ecef-eb9a-66fe-b62b-957b45f17e43 ' ,
80
+ '1ea6ecef-eb9a-66fe-b62b-957b45f17e43 ' ,
81
+ '4nXtvo2iuyYefrqTMhvogn ' ,
82
+ '0YMVPEZTWTCVZBCAWNFD2Z2ZJ3 ' ,
83
+ '1ea6ecef-eb9a-66fe-b62b-957b45f17e43 ' ,
84
+ ],
85
+ [
86
+ Ulid::fromString ('01E4BYF64YZ97MDV6RH0HAMN6X ' ),
87
+ '01E4BYF64YZ97MDV6RH0HAMN6X ' ,
88
+ '01E4BYF64YZ97MDV6RH0HAMN6X ' ,
89
+ '1BKuy2YWf8Yf9vSkA2wDpg ' ,
90
+ '01E4BYF64YZ97MDV6RH0HAMN6X ' ,
91
+ '017117e7-989e-fa4f-46ec-d88822aa54dd ' ,
92
+ ],
93
+ ];
94
+
95
+ foreach ($ uidFormats as $ i => $ uidFormat ) {
96
+ foreach ($ data as $ uidClass => $ row ) {
97
+ yield [$ row [$ i + 1 ], $ row [0 ], $ uidFormat ];
98
+ }
99
+ }
100
+ }
101
+
53
102
/**
54
- * @dataProvider dataProvider
103
+ * @dataProvider normalizeProvider
55
104
*/
56
- public function testNormalize ($ uuidString , $ class )
105
+ public function testNormalize (string $ expected , AbstractUid $ uid , ? string $ uidFormat )
57
106
{
58
- if (Ulid::class === $ class ) {
59
- $ this ->assertEquals ($ uuidString , $ this ->normalizer ->normalize (Ulid::fromString ($ uuidString )));
60
- } else {
61
- $ this ->assertEquals ($ uuidString , $ this ->normalizer ->normalize (Uuid::fromString ($ uuidString )));
62
- }
107
+ $ this ->assertSame ($ expected , $ this ->normalizer ->normalize ($ uid , null , null !== $ uidFormat ? [
108
+ 'uid_normalization_format ' => $ uidFormat ,
109
+ ] : []));
110
+ }
111
+
112
+ public function dataProvider ()
113
+ {
114
+ return [
115
+ ['9b7541de-6f87-11ea-ab3c-9da9a81562fc ' , UuidV1::class],
116
+ ['e576629b-ff34-3642-9c08-1f5219f0d45b ' , UuidV3::class],
117
+ ['4126dbc1-488e-4f6e-aadd-775dcbac482e ' , UuidV4::class],
118
+ ['18cdf3d3-ea1b-5b23-a9c5-40abd0e2df22 ' , UuidV5::class],
119
+ ['1ea6ecef-eb9a-66fe-b62b-957b45f17e43 ' , UuidV6::class],
120
+ ['1ea6ecef-eb9a-66fe-b62b-957b45f17e43 ' , AbstractUid::class],
121
+ ['01E4BYF64YZ97MDV6RH0HAMN6X ' , Ulid::class],
122
+ ];
63
123
}
64
124
65
125
/**
@@ -86,4 +146,27 @@ public function testDenormalize($uuidString, $class)
86
146
$ this ->assertEquals (Uuid::fromString ($ uuidString ), $ this ->normalizer ->denormalize ($ uuidString , $ class ));
87
147
}
88
148
}
149
+
150
+ public function testNormalizeWithNormalizationFormatPassedInConstructor ()
151
+ {
152
+ $ uidNormalizer = new UidNormalizer ([
153
+ 'uid_normalization_format ' => 'rfc_4122 ' ,
154
+ ]);
155
+ $ ulid = Ulid::fromString ('01ETWV01C0GYQ5N92ZK7QRGB10 ' );
156
+
157
+ $ this ->assertSame ('0176b9b0-0580-87ae-5aa4-5f99ef882c20 ' , $ uidNormalizer ->normalize ($ ulid ));
158
+ $ this ->assertSame ('01ETWV01C0GYQ5N92ZK7QRGB10 ' , $ uidNormalizer ->normalize ($ ulid , null , [
159
+ 'uid_normalization_format ' => 'canonical ' ,
160
+ ]));
161
+ }
162
+
163
+ public function testNormalizeWithNormalizationFormatNotValid ()
164
+ {
165
+ $ this ->expectException (LogicException::class);
166
+ $ this ->expectDeprecationMessage ('The "ccc" format is not valid. ' );
167
+
168
+ $ this ->normalizer ->normalize (new Ulid (), null , [
169
+ 'uid_normalization_format ' => 'ccc ' ,
170
+ ]);
171
+ }
89
172
}
0 commit comments