File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -30,7 +30,8 @@ protected function listParameters(
3030 $ filterProperties = [];
3131
3232 foreach ($ filters as $ filter ) {
33- $ filterProperties [$ filter ->name ] = $ filter ->getSchema ();
33+ $ schema = $ filter ->getSchema ();
34+ $ filterProperties [$ filter ->name ] = $ schema === [] ? (object ) [] : $ schema ;
3435 }
3536
3637 $ params [] = Parameter::make ('filter ' )
Original file line number Diff line number Diff line change @@ -1265,4 +1265,40 @@ public function test_filter_types_are_included_in_openapi_parameters()
12651265 $ this ->assertInstanceOf (\stdClass::class, $ rawOperatorSchema ['properties ' ]['gt ' ]);
12661266 $ this ->assertSame ('{} ' , json_encode ($ rawOperatorSchema ['properties ' ]['eq ' ]));
12671267 }
1268+
1269+ public function test_untyped_filter_schema_serializes_as_object ()
1270+ {
1271+ $ api = new JsonApi ();
1272+
1273+ $ api ->resource (
1274+ new MockResource (
1275+ 'users ' ,
1276+ endpoints: [Index::make ()],
1277+ filters: [
1278+ CustomFilter::make ('products ' , fn () => null ),
1279+ CustomFilter::make ('mine ' , fn () => null ),
1280+ ],
1281+ ),
1282+ );
1283+
1284+ $ definition = (new OpenApiGenerator ())->generate ($ api );
1285+ $ parameters = $ definition ['paths ' ]['/users ' ]['get ' ]['parameters ' ];
1286+
1287+ $ filterParameter = null ;
1288+ foreach ($ parameters as $ parameter ) {
1289+ if ($ parameter ['name ' ] === 'filter ' ) {
1290+ $ filterParameter = $ parameter ;
1291+ break ;
1292+ }
1293+ }
1294+
1295+ $ filterProperties = $ filterParameter ['schema ' ]['properties ' ];
1296+
1297+ $ this ->assertInstanceOf (\stdClass::class, $ filterProperties ['products ' ]);
1298+ $ this ->assertInstanceOf (\stdClass::class, $ filterProperties ['mine ' ]);
1299+ $ this ->assertSame (
1300+ '{"products":{},"mine":{}} ' ,
1301+ json_encode ($ filterProperties ),
1302+ );
1303+ }
12681304}
You can’t perform that action at this time.
0 commit comments