@@ -154,6 +154,113 @@ public function typeProvider(): iterable
154
154
];
155
155
}
156
156
157
+ /** @dataProvider openAPIV2typeProvider */
158
+ public function testGetTypeWithOpenAPIV2Syntax (array $ schema , Type $ type ): void
159
+ {
160
+ $ typeFactory = new TypeFactory ();
161
+ $ this ->assertSame ($ schema , $ typeFactory ->getType ($ type , 'json ' , null , [TypeFactory::CONTEXT_SERIALIZATION_FORMAT_OPENAPI_PRE_V3_0 => null ]));
162
+ }
163
+
164
+ public function openAPIV2typeProvider (): iterable
165
+ {
166
+ yield [['type ' => 'integer ' ], new Type (Type::BUILTIN_TYPE_INT )];
167
+ yield [['type ' => 'integer ' ], new Type (Type::BUILTIN_TYPE_INT , true )];
168
+ yield [['type ' => 'number ' ], new Type (Type::BUILTIN_TYPE_FLOAT )];
169
+ yield [['type ' => 'number ' ], new Type (Type::BUILTIN_TYPE_FLOAT , true )];
170
+ yield [['type ' => 'boolean ' ], new Type (Type::BUILTIN_TYPE_BOOL )];
171
+ yield [['type ' => 'boolean ' ], new Type (Type::BUILTIN_TYPE_BOOL , true )];
172
+ yield [['type ' => 'string ' ], new Type (Type::BUILTIN_TYPE_STRING )];
173
+ yield [['type ' => 'string ' ], new Type (Type::BUILTIN_TYPE_STRING , true )];
174
+ yield [['type ' => 'object ' ], new Type (Type::BUILTIN_TYPE_OBJECT )];
175
+ yield [['type ' => 'object ' ], new Type (Type::BUILTIN_TYPE_OBJECT , true )];
176
+ yield [['type ' => 'string ' , 'format ' => 'date-time ' ], new Type (Type::BUILTIN_TYPE_OBJECT , false , \DateTimeImmutable::class)];
177
+ yield [['type ' => 'string ' , 'format ' => 'date-time ' ], new Type (Type::BUILTIN_TYPE_OBJECT , true , \DateTimeImmutable::class)];
178
+ yield [['type ' => 'string ' , 'format ' => 'duration ' ], new Type (Type::BUILTIN_TYPE_OBJECT , false , \DateInterval::class)];
179
+ yield [['type ' => 'object ' ], new Type (Type::BUILTIN_TYPE_OBJECT , false , Dummy::class)];
180
+ yield [['type ' => 'object ' ], new Type (Type::BUILTIN_TYPE_OBJECT , true , Dummy::class)];
181
+ yield [['type ' => 'array ' , 'items ' => ['type ' => 'string ' ]], new Type (Type::BUILTIN_TYPE_STRING , false , null , true )];
182
+ yield 'array can be itself nullable, but ignored in OpenAPI V2 ' => [
183
+ ['type ' => 'array ' , 'items ' => ['type ' => 'string ' ]],
184
+ new Type (Type::BUILTIN_TYPE_STRING , true , null , true ),
185
+ ];
186
+
187
+ yield 'array can contain nullable values, but ignored in OpenAPI V2 ' => [
188
+ [
189
+ 'type ' => 'array ' ,
190
+ 'items ' => ['type ' => 'string ' ],
191
+ ],
192
+ new Type (Type::BUILTIN_TYPE_STRING , false , null , true , null , new Type (Type::BUILTIN_TYPE_STRING , true , null , false )),
193
+ ];
194
+
195
+ yield 'map with string keys becomes an object ' => [
196
+ ['type ' => 'object ' , 'additionalProperties ' => ['type ' => 'string ' ]],
197
+ new Type (
198
+ Type::BUILTIN_TYPE_STRING ,
199
+ false ,
200
+ null ,
201
+ true ,
202
+ new Type (Type::BUILTIN_TYPE_STRING , false , null , false )
203
+ ),
204
+ ];
205
+
206
+ yield 'nullable map with string keys becomes a nullable object, but ignored in OpenAPI V2 ' => [
207
+ [
208
+ 'type ' => 'object ' ,
209
+ 'additionalProperties ' => ['type ' => 'string ' ],
210
+ ],
211
+ new Type (
212
+ Type::BUILTIN_TYPE_STRING ,
213
+ true ,
214
+ null ,
215
+ true ,
216
+ new Type (Type::BUILTIN_TYPE_STRING , false , null , false ),
217
+ new Type (Type::BUILTIN_TYPE_STRING , false , null , false )
218
+ ),
219
+ ];
220
+
221
+ yield 'map value type will be considered ' => [
222
+ ['type ' => 'object ' , 'additionalProperties ' => ['type ' => 'integer ' ]],
223
+ new Type (
224
+ Type::BUILTIN_TYPE_ARRAY ,
225
+ false ,
226
+ null ,
227
+ true ,
228
+ new Type (Type::BUILTIN_TYPE_STRING , false , null , false ),
229
+ new Type (Type::BUILTIN_TYPE_INT , false , null , false )
230
+ ),
231
+ ];
232
+
233
+ yield 'map value type nullability will be considered, but ignored in OpenAPI V2 ' => [
234
+ [
235
+ 'type ' => 'object ' ,
236
+ 'additionalProperties ' => ['type ' => 'integer ' ],
237
+ ],
238
+ new Type (
239
+ Type::BUILTIN_TYPE_ARRAY ,
240
+ false ,
241
+ null ,
242
+ true ,
243
+ new Type (Type::BUILTIN_TYPE_STRING , false , null , false ),
244
+ new Type (Type::BUILTIN_TYPE_INT , true , null , false )
245
+ ),
246
+ ];
247
+
248
+ yield 'nullable map can contain nullable values, but ignored in OpenAPI V2 ' => [
249
+ [
250
+ 'type ' => 'object ' ,
251
+ 'additionalProperties ' => ['type ' => 'integer ' ],
252
+ ],
253
+ new Type (
254
+ Type::BUILTIN_TYPE_ARRAY ,
255
+ true ,
256
+ null ,
257
+ true ,
258
+ new Type (Type::BUILTIN_TYPE_STRING , false , null , false ),
259
+ new Type (Type::BUILTIN_TYPE_INT , true , null , false )
260
+ ),
261
+ ];
262
+ }
263
+
157
264
public function testGetClassType (): void
158
265
{
159
266
$ schemaFactoryProphecy = $ this ->prophesize (SchemaFactoryInterface::class);
0 commit comments