@@ -57,6 +57,148 @@ public function testNotTypedArgument()
57
57
$ resolver ->onKernelControllerArguments ($ event );
58
58
}
59
59
60
+ public function testDefaultValueArgument ()
61
+ {
62
+ $ payload = new RequestPayload (50 );
63
+
64
+ $ validator = $ this ->createMock (ValidatorInterface::class);
65
+ $ validator ->expects ($ this ->never ())
66
+ ->method ('validate ' );
67
+
68
+ $ resolver = new RequestPayloadValueResolver (new Serializer (), $ validator );
69
+
70
+ $ argument = new ArgumentMetadata ('valid ' , RequestPayload::class, false , true , $ payload , false , [
71
+ MapRequestPayload::class => new MapRequestPayload (),
72
+ ]);
73
+ $ request = Request::create ('/ ' , 'POST ' , server: ['CONTENT_TYPE ' => 'application/json ' ]);
74
+
75
+ $ kernel = $ this ->createMock (HttpKernelInterface::class);
76
+ $ arguments = $ resolver ->resolve ($ request , $ argument );
77
+ $ event = new ControllerArgumentsEvent ($ kernel , fn () => null , $ arguments , $ request , HttpKernelInterface::MAIN_REQUEST );
78
+
79
+ $ resolver ->onKernelControllerArguments ($ event );
80
+
81
+ $ this ->assertEquals ([$ payload ], $ event ->getArguments ());
82
+ }
83
+
84
+ public function testQueryDefaultValueArgument ()
85
+ {
86
+ $ payload = new RequestPayload (50 );
87
+
88
+ $ validator = $ this ->createMock (ValidatorInterface::class);
89
+ $ validator ->expects ($ this ->never ())
90
+ ->method ('validate ' );
91
+
92
+ $ resolver = new RequestPayloadValueResolver (new Serializer (), $ validator );
93
+
94
+ $ argument = new ArgumentMetadata ('valid ' , RequestPayload::class, false , true , $ payload , false , [
95
+ MapQueryString::class => new MapQueryString (),
96
+ ]);
97
+ $ request = Request::create ('/ ' , 'GET ' );
98
+
99
+ $ kernel = $ this ->createMock (HttpKernelInterface::class);
100
+ $ arguments = $ resolver ->resolve ($ request , $ argument );
101
+ $ event = new ControllerArgumentsEvent ($ kernel , fn () => null , $ arguments , $ request , HttpKernelInterface::MAIN_REQUEST );
102
+
103
+ $ resolver ->onKernelControllerArguments ($ event );
104
+
105
+ $ this ->assertEquals ([$ payload ], $ event ->getArguments ());
106
+ }
107
+
108
+ public function testNullableValueArgument ()
109
+ {
110
+ $ validator = $ this ->createMock (ValidatorInterface::class);
111
+ $ validator ->expects ($ this ->never ())
112
+ ->method ('validate ' );
113
+
114
+ $ resolver = new RequestPayloadValueResolver (new Serializer (), $ validator );
115
+
116
+ $ argument = new ArgumentMetadata ('valid ' , RequestPayload::class, false , false , null , true , [
117
+ MapRequestPayload::class => new MapRequestPayload (),
118
+ ]);
119
+ $ request = Request::create ('/ ' , 'POST ' , server: ['CONTENT_TYPE ' => 'application/json ' ]);
120
+
121
+ $ kernel = $ this ->createMock (HttpKernelInterface::class);
122
+ $ arguments = $ resolver ->resolve ($ request , $ argument );
123
+ $ event = new ControllerArgumentsEvent ($ kernel , fn () => null , $ arguments , $ request , HttpKernelInterface::MAIN_REQUEST );
124
+
125
+ $ resolver ->onKernelControllerArguments ($ event );
126
+
127
+ $ this ->assertEquals ([null ], $ event ->getArguments ());
128
+ }
129
+
130
+ public function testQueryNullableValueArgument ()
131
+ {
132
+ $ validator = $ this ->createMock (ValidatorInterface::class);
133
+ $ validator ->expects ($ this ->never ())
134
+ ->method ('validate ' );
135
+
136
+ $ resolver = new RequestPayloadValueResolver (new Serializer (), $ validator );
137
+
138
+ $ argument = new ArgumentMetadata ('valid ' , RequestPayload::class, false , false , null , true , [
139
+ MapQueryString::class => new MapQueryString (),
140
+ ]);
141
+ $ request = Request::create ('/ ' , 'GET ' );
142
+
143
+ $ kernel = $ this ->createMock (HttpKernelInterface::class);
144
+ $ arguments = $ resolver ->resolve ($ request , $ argument );
145
+ $ event = new ControllerArgumentsEvent ($ kernel , fn () => null , $ arguments , $ request , HttpKernelInterface::MAIN_REQUEST );
146
+
147
+ $ resolver ->onKernelControllerArguments ($ event );
148
+
149
+ $ this ->assertSame ([null ], $ event ->getArguments ());
150
+ }
151
+
152
+ public function testNullPayloadAndNotDefaultOrNullableArgument ()
153
+ {
154
+ $ validator = $ this ->createMock (ValidatorInterface::class);
155
+ $ validator ->expects ($ this ->never ())
156
+ ->method ('validate ' );
157
+
158
+ $ resolver = new RequestPayloadValueResolver (new Serializer (), $ validator );
159
+
160
+ $ argument = new ArgumentMetadata ('valid ' , RequestPayload::class, false , false , null , false , [
161
+ MapRequestPayload::class => new MapRequestPayload (),
162
+ ]);
163
+ $ request = Request::create ('/ ' , 'POST ' , server: ['CONTENT_TYPE ' => 'application/json ' ]);
164
+
165
+ $ kernel = $ this ->createMock (HttpKernelInterface::class);
166
+ $ arguments = $ resolver ->resolve ($ request , $ argument );
167
+ $ event = new ControllerArgumentsEvent ($ kernel , fn () => null , $ arguments , $ request , HttpKernelInterface::MAIN_REQUEST );
168
+
169
+ try {
170
+ $ resolver ->onKernelControllerArguments ($ event );
171
+ $ this ->fail (sprintf ('Expected "%s" to be thrown. ' , HttpException::class));
172
+ } catch (HttpException $ e ) {
173
+ $ this ->assertSame (422 , $ e ->getStatusCode ());
174
+ }
175
+ }
176
+
177
+ public function testQueryNullPayloadAndNotDefaultOrNullableArgument ()
178
+ {
179
+ $ validator = $ this ->createMock (ValidatorInterface::class);
180
+ $ validator ->expects ($ this ->never ())
181
+ ->method ('validate ' );
182
+
183
+ $ resolver = new RequestPayloadValueResolver (new Serializer (), $ validator );
184
+
185
+ $ argument = new ArgumentMetadata ('valid ' , RequestPayload::class, false , false , null , false , [
186
+ MapQueryString::class => new MapQueryString (),
187
+ ]);
188
+ $ request = Request::create ('/ ' , 'GET ' );
189
+
190
+ $ kernel = $ this ->createMock (HttpKernelInterface::class);
191
+ $ arguments = $ resolver ->resolve ($ request , $ argument );
192
+ $ event = new ControllerArgumentsEvent ($ kernel , fn () => null , $ arguments , $ request , HttpKernelInterface::MAIN_REQUEST );
193
+
194
+ try {
195
+ $ resolver ->onKernelControllerArguments ($ event );
196
+ $ this ->fail (sprintf ('Expected "%s" to be thrown. ' , HttpException::class));
197
+ } catch (HttpException $ e ) {
198
+ $ this ->assertSame (404 , $ e ->getStatusCode ());
199
+ }
200
+ }
201
+
60
202
public function testWithoutValidatorAndCouldNotDenormalize ()
61
203
{
62
204
$ content = '{"price": 50, "title": ["not a string"]} ' ;
0 commit comments