5
5
namespace DoclerLabs \ApiClientGenerator \Test \Unit \Output \Copy \Serializer ;
6
6
7
7
use DateTimeImmutable ;
8
+ use DateTimeInterface ;
8
9
use DateTimeZone ;
9
10
use DoclerLabs \ApiClientGenerator \Output \Copy \Request \RequestInterface ;
10
11
use DoclerLabs \ApiClientGenerator \Output \Copy \Schema \SerializableInterface ;
@@ -21,41 +22,104 @@ protected function setUp(): void
21
22
$ this ->sut = new QuerySerializer ();
22
23
}
23
24
24
- public function testSerialization (): void
25
+ /**
26
+ * @dataProvider dataProvider
27
+ */
28
+ public function testSerialization (array $ rawQueryParameters , array $ expected ): void
29
+ {
30
+ $ request = $ this ->createMock (RequestInterface::class);
31
+ $ request ->expects (self ::once ())
32
+ ->method ('getRawQueryParameters ' )
33
+ ->willReturn ($ rawQueryParameters );
34
+
35
+ parse_str ($ this ->sut ->serializeRequest ($ request ), $ actual );
36
+ self ::assertSame (
37
+ $ expected ,
38
+ $ actual
39
+ );
40
+ }
41
+
42
+ public function dataProvider (): array
25
43
{
26
44
$ serializable = $ this ->createMock (SerializableInterface::class);
27
- $ serializable ->expects ($ this -> once ())
45
+ $ serializable ->expects (self :: once ())
28
46
->method ('toArray ' )
29
- ->willReturn (['foo ' => 'bar ' ]);
47
+ ->willReturn ($ serialized = ['foo ' => 'bar ' ]);
30
48
31
49
$ jsonSerializable = $ this ->createMock (JsonSerializable::class);
32
- $ jsonSerializable ->expects ($ this -> once ())
50
+ $ jsonSerializable ->expects (self :: once ())
33
51
->method ('jsonSerialize ' )
34
- ->willReturn (['bar ' => 'foo ' ]);
52
+ ->willReturn ($ jsonSerialized = ['bar ' => 'foo ' ]);
35
53
36
- $ request = $ this ->createMock (RequestInterface::class);
37
- $ request ->expects ($ this ->once ())
38
- ->method ('getRawQueryParameters ' )
39
- ->willReturn (
54
+ return [
55
+ 'DateTime ' => [
40
56
[
41
- 'dateTime ' => new DateTimeImmutable (
57
+ 'dateTime ' => $ dateTime = new DateTimeImmutable (
42
58
'2020-11-24 01:02:03 ' ,
43
59
new DateTimeZone ('Europe/Luxembourg ' )
44
60
),
45
- 'nullable ' => null ,
46
- 'integer ' => 11 ,
47
- 'string ' => 'simple string ' ,
48
- 'float ' => 42.13 ,
49
- 'booleanTrue ' => true ,
50
- 'booleanFalse ' => false ,
51
- 'serializable ' => $ serializable ,
52
- 'jsonSerializable ' => $ jsonSerializable ,
53
- ]
54
- );
61
+ ],
62
+ [
63
+ 'dateTime ' => $ dateTime ->format (DateTimeInterface::RFC3339 ),
64
+ ],
65
+ ],
66
+ 'Nullable ' => [
67
+ [
68
+ 'nullable ' => null ,
69
+ ],
70
+ [],
71
+ ],
72
+ 'Integer ' => [
73
+ [
74
+ 'integer ' => $ integer = 11 ,
75
+ ],
76
+ [
77
+ 'integer ' => (string )$ integer ,
78
+ ],
79
+ ],
80
+ 'String ' => [
81
+ [
82
+ 'string ' => $ string = 'simple string ' ,
83
+ ],
84
+ [
85
+ 'string ' => $ string ,
86
+ ],
87
+ ],
88
+ 'Float ' => [
89
+ [
90
+ 'float ' => $ float = 42.13 ,
91
+ ],
92
+ [
93
+ 'float ' => (string )$ float ,
94
+ ],
95
+ ],
96
+ 'Boolean ' => [
97
+ [
98
+ 'booleanTrue ' => $ booleanTrue = true ,
99
+ 'booleanFalse ' => $ booleanFalse = false ,
100
+ ],
101
+ [
102
+ 'booleanTrue ' => (string )(int )$ booleanTrue ,
103
+ 'booleanFalse ' => (string )(int )$ booleanFalse ,
104
+ ],
105
+ ],
106
+ 'Serializable interface ' => [
107
+ [
108
+ 'serializable ' => $ serializable ,
55
109
56
- $ this ->assertEquals (
57
- 'dateTime=2020-11-24T01%3A02%3A03%2B01%3A00&integer=11&string=simple%20string&float=42.13&booleanTrue=1&booleanFalse=0&serializable%5Bfoo%5D=bar&jsonSerializable%5Bbar%5D=foo ' ,
58
- $ this ->sut ->serializeRequest ($ request )
59
- );
110
+ ],
111
+ [
112
+ 'serializable ' => $ serialized ,
113
+ ],
114
+ ],
115
+ 'JsonSerializable interface ' => [
116
+ [
117
+ 'jsonSerializable ' => $ jsonSerializable ,
118
+ ],
119
+ [
120
+ 'jsonSerializable ' => $ jsonSerialized ,
121
+ ],
122
+ ],
123
+ ];
60
124
}
61
125
}
0 commit comments