From 6b3abd9421eaf98a0fa6c706ea52b0c4a53e6bf0 Mon Sep 17 00:00:00 2001 From: Kuzma <57258237+ksvirkou-hubspot@users.noreply.github.com> Date: Mon, 25 Apr 2022 13:16:00 +0300 Subject: [PATCH] [Php] Exclude query params when they're not required (#12120) * exclude query params when they are not required * fix check on empty * update samples * fix * add tests * update test * Fix style I guess PHPCodeSniffer would find PSR12 violated but we use CS-Fixer instead. Anyway, conditions should contain spaces between logical operators for readability. * Apply CS-Fixer changes to templates * Refresh samples * Add required param to docblock Co-authored-by: Yuriy Belenko --- .../resources/php/ObjectSerializer.mustache | 20 ++- .../src/main/resources/php/api.mustache | 5 +- .../lib/Api/AnotherFakeApi.php | 2 +- .../OpenAPIClient-php/lib/Api/DefaultApi.php | 2 +- .../php/OpenAPIClient-php/lib/Api/FakeApi.php | 56 +++++--- .../lib/Api/FakeClassnameTags123Api.php | 2 +- .../php/OpenAPIClient-php/lib/Api/PetApi.php | 8 +- .../OpenAPIClient-php/lib/Api/StoreApi.php | 2 +- .../php/OpenAPIClient-php/lib/Api/UserApi.php | 8 +- .../lib/ObjectSerializer.php | 20 ++- .../tests/ObjectSerializerTest.php | 131 ++++++++++-------- 11 files changed, 157 insertions(+), 99 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/php/ObjectSerializer.mustache b/modules/openapi-generator/src/main/resources/php/ObjectSerializer.mustache index 3fbeb24abc4..9605716bfce 100644 --- a/modules/openapi-generator/src/main/resources/php/ObjectSerializer.mustache +++ b/modules/openapi-generator/src/main/resources/php/ObjectSerializer.mustache @@ -19,8 +19,8 @@ namespace {{invokerPackage}}; -use {{modelPackage}}\ModelInterface; use GuzzleHttp\Psr7\Utils; +use {{modelPackage}}\ModelInterface; /** * ObjectSerializer Class Doc Comment @@ -157,6 +157,7 @@ class ObjectSerializer * @param string $openApiType OpenAPIType eg. array or object * @param string $style Parameter serialization style * @param bool $explode Parameter explode option + * @param bool $required Whether query param is required or not * * @return array */ @@ -165,10 +166,19 @@ class ObjectSerializer string $paramName, string $openApiType = 'string', string $style = 'form', - bool $explode = true + bool $explode = true, + bool $required = true ): array { - // return empty string - if (empty($value)) return ["{$paramName}" => '']; + if ( + empty($value) + && ($value !== false || $openApiType !== 'boolean') // if $value === false and $openApiType ==='boolean' it isn't empty + ) { + if ($required) { + return ["{$paramName}" => '']; + } else { + return []; + } + } $query = []; $value = (in_array($openApiType, ['object', 'array'], true)) ? (array)$value : $value; @@ -350,7 +360,7 @@ class ObjectSerializer if ($class === 'object') { settype($data, 'array'); return $data; - } else if ($class === 'mixed') { + } elseif ($class === 'mixed') { settype($data, gettype($data)); return $data; } diff --git a/modules/openapi-generator/src/main/resources/php/api.mustache b/modules/openapi-generator/src/main/resources/php/api.mustache index baea050cb31..e1c08f2bf87 100644 --- a/modules/openapi-generator/src/main/resources/php/api.mustache +++ b/modules/openapi-generator/src/main/resources/php/api.mustache @@ -20,8 +20,8 @@ namespace {{apiPackage}}; use GuzzleHttp\Client; use GuzzleHttp\ClientInterface; -use GuzzleHttp\Exception\RequestException; use GuzzleHttp\Exception\ConnectException; +use GuzzleHttp\Exception\RequestException; use GuzzleHttp\Psr7\MultipartStream; use GuzzleHttp\Psr7\Request; use GuzzleHttp\RequestOptions; @@ -511,7 +511,8 @@ use {{invokerPackage}}\ObjectSerializer; '{{baseName}}', // param base name '{{#schema}}{{openApiType}}{{/schema}}', // openApiType '{{style}}', // style - {{#isExplode}}true{{/isExplode}}{{^isExplode}}false{{/isExplode}} // explode + {{#isExplode}}true{{/isExplode}}{{^isExplode}}false{{/isExplode}}, // explode + {{required}} // required ) ?? []); {{/queryParams}} diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/AnotherFakeApi.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/AnotherFakeApi.php index de487424169..24370ac59ca 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/AnotherFakeApi.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/AnotherFakeApi.php @@ -29,8 +29,8 @@ namespace OpenAPI\Client\Api; use GuzzleHttp\Client; use GuzzleHttp\ClientInterface; -use GuzzleHttp\Exception\RequestException; use GuzzleHttp\Exception\ConnectException; +use GuzzleHttp\Exception\RequestException; use GuzzleHttp\Psr7\MultipartStream; use GuzzleHttp\Psr7\Request; use GuzzleHttp\RequestOptions; diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/DefaultApi.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/DefaultApi.php index 92b7e95b2d1..0fe55677acf 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/DefaultApi.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/DefaultApi.php @@ -29,8 +29,8 @@ namespace OpenAPI\Client\Api; use GuzzleHttp\Client; use GuzzleHttp\ClientInterface; -use GuzzleHttp\Exception\RequestException; use GuzzleHttp\Exception\ConnectException; +use GuzzleHttp\Exception\RequestException; use GuzzleHttp\Psr7\MultipartStream; use GuzzleHttp\Psr7\Request; use GuzzleHttp\RequestOptions; diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeApi.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeApi.php index a6bdf39f6c0..661502e68fa 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeApi.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeApi.php @@ -29,8 +29,8 @@ namespace OpenAPI\Client\Api; use GuzzleHttp\Client; use GuzzleHttp\ClientInterface; -use GuzzleHttp\Exception\RequestException; use GuzzleHttp\Exception\ConnectException; +use GuzzleHttp\Exception\RequestException; use GuzzleHttp\Psr7\MultipartStream; use GuzzleHttp\Psr7\Request; use GuzzleHttp\RequestOptions; @@ -549,7 +549,8 @@ class FakeApi 'query_1', // param base name 'string', // openApiType 'form', // style - true // explode + true, // explode + false // required ) ?? []); // header params @@ -2546,7 +2547,8 @@ class FakeApi 'query', // param base name 'string', // openApiType 'form', // style - true // explode + true, // explode + true // required ) ?? []); @@ -3506,7 +3508,8 @@ class FakeApi 'enum_query_string_array', // param base name 'array', // openApiType 'form', // style - true // explode + true, // explode + false // required ) ?? []); // query params $queryParams = array_merge($queryParams, ObjectSerializer::toQueryValue( @@ -3514,7 +3517,8 @@ class FakeApi 'enum_query_string', // param base name 'string', // openApiType 'form', // style - true // explode + true, // explode + false // required ) ?? []); // query params $queryParams = array_merge($queryParams, ObjectSerializer::toQueryValue( @@ -3522,7 +3526,8 @@ class FakeApi 'enum_query_integer', // param base name 'integer', // openApiType 'form', // style - true // explode + true, // explode + false // required ) ?? []); // query params $queryParams = array_merge($queryParams, ObjectSerializer::toQueryValue( @@ -3530,7 +3535,8 @@ class FakeApi 'enum_query_double', // param base name 'number', // openApiType 'form', // style - true // explode + true, // explode + false // required ) ?? []); // query params $queryParams = array_merge($queryParams, ObjectSerializer::toQueryValue( @@ -3538,7 +3544,8 @@ class FakeApi 'enum_query_model_array', // param base name 'array', // openApiType 'form', // style - true // explode + true, // explode + false // required ) ?? []); // header params @@ -3838,7 +3845,8 @@ class FakeApi 'required_string_group', // param base name 'integer', // openApiType 'form', // style - true // explode + true, // explode + true // required ) ?? []); // query params $queryParams = array_merge($queryParams, ObjectSerializer::toQueryValue( @@ -3846,7 +3854,8 @@ class FakeApi 'required_int64_group', // param base name 'integer', // openApiType 'form', // style - true // explode + true, // explode + true // required ) ?? []); // query params $queryParams = array_merge($queryParams, ObjectSerializer::toQueryValue( @@ -3854,7 +3863,8 @@ class FakeApi 'string_group', // param base name 'integer', // openApiType 'form', // style - true // explode + true, // explode + false // required ) ?? []); // query params $queryParams = array_merge($queryParams, ObjectSerializer::toQueryValue( @@ -3862,7 +3872,8 @@ class FakeApi 'int64_group', // param base name 'integer', // openApiType 'form', // style - true // explode + true, // explode + false // required ) ?? []); // header params @@ -4613,7 +4624,8 @@ class FakeApi 'pipe', // param base name 'array', // openApiType 'pipeDelimited', // style - false // explode + false, // explode + true // required ) ?? []); // query params $queryParams = array_merge($queryParams, ObjectSerializer::toQueryValue( @@ -4621,7 +4633,8 @@ class FakeApi 'ioutil', // param base name 'array', // openApiType 'form', // style - false // explode + false, // explode + true // required ) ?? []); // query params $queryParams = array_merge($queryParams, ObjectSerializer::toQueryValue( @@ -4629,7 +4642,8 @@ class FakeApi 'http', // param base name 'array', // openApiType 'spaceDelimited', // style - false // explode + false, // explode + true // required ) ?? []); // query params $queryParams = array_merge($queryParams, ObjectSerializer::toQueryValue( @@ -4637,7 +4651,8 @@ class FakeApi 'url', // param base name 'array', // openApiType 'form', // style - false // explode + false, // explode + true // required ) ?? []); // query params $queryParams = array_merge($queryParams, ObjectSerializer::toQueryValue( @@ -4645,7 +4660,8 @@ class FakeApi 'context', // param base name 'array', // openApiType 'form', // style - true // explode + true, // explode + true // required ) ?? []); // query params $queryParams = array_merge($queryParams, ObjectSerializer::toQueryValue( @@ -4653,7 +4669,8 @@ class FakeApi 'language', // param base name 'object', // openApiType 'form', // style - true // explode + true, // explode + false // required ) ?? []); // query params $queryParams = array_merge($queryParams, ObjectSerializer::toQueryValue( @@ -4661,7 +4678,8 @@ class FakeApi 'allowEmpty', // param base name 'string', // openApiType 'form', // style - true // explode + true, // explode + true // required ) ?? []); diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeClassnameTags123Api.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeClassnameTags123Api.php index faead8d187f..2e3975bb532 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeClassnameTags123Api.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeClassnameTags123Api.php @@ -29,8 +29,8 @@ namespace OpenAPI\Client\Api; use GuzzleHttp\Client; use GuzzleHttp\ClientInterface; -use GuzzleHttp\Exception\RequestException; use GuzzleHttp\Exception\ConnectException; +use GuzzleHttp\Exception\RequestException; use GuzzleHttp\Psr7\MultipartStream; use GuzzleHttp\Psr7\Request; use GuzzleHttp\RequestOptions; diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/PetApi.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/PetApi.php index a874cf18b1c..d0fa9cdfc45 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/PetApi.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/PetApi.php @@ -29,8 +29,8 @@ namespace OpenAPI\Client\Api; use GuzzleHttp\Client; use GuzzleHttp\ClientInterface; -use GuzzleHttp\Exception\RequestException; use GuzzleHttp\Exception\ConnectException; +use GuzzleHttp\Exception\RequestException; use GuzzleHttp\Psr7\MultipartStream; use GuzzleHttp\Psr7\Request; use GuzzleHttp\RequestOptions; @@ -825,7 +825,8 @@ class PetApi 'status', // param base name 'array', // openApiType 'form', // style - false // explode + false, // explode + true // required ) ?? []); @@ -1115,7 +1116,8 @@ class PetApi 'tags', // param base name 'array', // openApiType 'form', // style - false // explode + false, // explode + true // required ) ?? []); diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/StoreApi.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/StoreApi.php index b246f828202..6e9315b0f19 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/StoreApi.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/StoreApi.php @@ -29,8 +29,8 @@ namespace OpenAPI\Client\Api; use GuzzleHttp\Client; use GuzzleHttp\ClientInterface; -use GuzzleHttp\Exception\RequestException; use GuzzleHttp\Exception\ConnectException; +use GuzzleHttp\Exception\RequestException; use GuzzleHttp\Psr7\MultipartStream; use GuzzleHttp\Psr7\Request; use GuzzleHttp\RequestOptions; diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/UserApi.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/UserApi.php index 54fb9239a67..06d0e62e96e 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/UserApi.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/UserApi.php @@ -29,8 +29,8 @@ namespace OpenAPI\Client\Api; use GuzzleHttp\Client; use GuzzleHttp\ClientInterface; -use GuzzleHttp\Exception\RequestException; use GuzzleHttp\Exception\ConnectException; +use GuzzleHttp\Exception\RequestException; use GuzzleHttp\Psr7\MultipartStream; use GuzzleHttp\Psr7\Request; use GuzzleHttp\RequestOptions; @@ -1521,7 +1521,8 @@ class UserApi 'username', // param base name 'string', // openApiType 'form', // style - true // explode + true, // explode + true // required ) ?? []); // query params $queryParams = array_merge($queryParams, ObjectSerializer::toQueryValue( @@ -1529,7 +1530,8 @@ class UserApi 'password', // param base name 'string', // openApiType 'form', // style - true // explode + true, // explode + true // required ) ?? []); diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/ObjectSerializer.php b/samples/client/petstore/php/OpenAPIClient-php/lib/ObjectSerializer.php index 599da5492da..f8bacf779cb 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/ObjectSerializer.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/ObjectSerializer.php @@ -28,8 +28,8 @@ namespace OpenAPI\Client; -use OpenAPI\Client\Model\ModelInterface; use GuzzleHttp\Psr7\Utils; +use OpenAPI\Client\Model\ModelInterface; /** * ObjectSerializer Class Doc Comment @@ -166,6 +166,7 @@ class ObjectSerializer * @param string $openApiType OpenAPIType eg. array or object * @param string $style Parameter serialization style * @param bool $explode Parameter explode option + * @param bool $required Whether query param is required or not * * @return array */ @@ -174,10 +175,19 @@ class ObjectSerializer string $paramName, string $openApiType = 'string', string $style = 'form', - bool $explode = true + bool $explode = true, + bool $required = true ): array { - // return empty string - if (empty($value)) return ["{$paramName}" => '']; + if ( + empty($value) + && ($value !== false || $openApiType !== 'boolean') // if $value === false and $openApiType ==='boolean' it isn't empty + ) { + if ($required) { + return ["{$paramName}" => '']; + } else { + return []; + } + } $query = []; $value = (in_array($openApiType, ['object', 'array'], true)) ? (array)$value : $value; @@ -359,7 +369,7 @@ class ObjectSerializer if ($class === 'object') { settype($data, 'array'); return $data; - } else if ($class === 'mixed') { + } elseif ($class === 'mixed') { settype($data, gettype($data)); return $data; } diff --git a/samples/client/petstore/php/OpenAPIClient-php/tests/ObjectSerializerTest.php b/samples/client/petstore/php/OpenAPIClient-php/tests/ObjectSerializerTest.php index 2d41d9e726e..de5be5cd787 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/tests/ObjectSerializerTest.php +++ b/samples/client/petstore/php/OpenAPIClient-php/tests/ObjectSerializerTest.php @@ -141,9 +141,10 @@ class ObjectSerializerTest extends TestCase string $openApiType, string $style, bool $explode, + bool $required, $expected ): void { - $value = ObjectSerializer::toQueryValue($data, $paramName, $openApiType, $style, $explode); + $value = ObjectSerializer::toQueryValue($data, $paramName, $openApiType, $style, $explode, $required); $query = ObjectSerializer::buildQuery($value); $this->assertEquals($expected, $query); } @@ -155,124 +156,137 @@ class ObjectSerializerTest extends TestCase return [ // style form - // color= - 'form empty, explode on' => [ - '', 'color', 'string', 'form', true, 'color=', + // skipValidation + 'form boolean, explode on, required false' => [ + false, 'skipValidation', 'boolean', 'form', true, false, 'skipValidation=0', + ], + 'form empty boolean, explode on, required false' => [ + null, 'skipValidation', 'boolean', 'form', true, false, '', + ], + 'form empty boolean, explode on, required true' => [ + null, 'skipValidation', 'boolean', 'form', true, true, 'skipValidation=', ], // color= - 'form empty, explode off' => [ - '', 'color', 'string', 'form', false, 'color=', + 'form empty, explode on, required true' => [ + '', 'color', 'string', 'form', true, true, 'color=', + ], + 'form empty, explode on, required false' => [ + '', 'color', 'string', 'form', true, false, '', + ], + // color= + 'form empty, explode off, required true' => [ + '', 'color', 'string', 'form', false, true, 'color=', ], // color=blue - 'form string, explode on' => [ - 'blue', 'color', 'string', 'form', true, 'color=blue', + 'form string, explode on, required true' => [ + 'blue', 'color', 'string', 'form', true, true, 'color=blue', ], // color=blue - 'form string, explode off' => [ - 'blue', 'color', 'string', 'form', false, 'color=blue', + 'form string, explode off, required true' => [ + 'blue', 'color', 'string', 'form', false, true, 'color=blue', ], // color=blue&color=black&color=brown - 'form array, explode on' => [ - $array, 'color', 'array', 'form', true, 'color=blue&color=black&color=brown', + 'form array, explode on, required true' => [ + $array, 'color', 'array', 'form', true, true, 'color=blue&color=black&color=brown', ], // color=blue&color=black&color=brown - 'form nested array, explode on' => [ - ['foobar' => $array], 'color', 'array', 'form', true, 'color=blue&color=black&color=brown', + 'form nested array, explode on, required true' => [ + ['foobar' => $array], 'color', 'array', 'form', true, true, 'color=blue&color=black&color=brown', ], // color=blue,black,brown - 'form array, explode off' => [ - $array, 'color', 'array', 'form', false, 'color=blue%2Cblack%2Cbrown', + 'form array, explode off, required true' => [ + $array, 'color', 'array', 'form', false, true, 'color=blue%2Cblack%2Cbrown', ], // color=blue,black,brown - 'form nested array, explode off' => [ - ['foobar' => $array], 'color', 'array', 'form', false, 'color=blue%2Cblack%2Cbrown', + 'form nested array, explode off, required true' => [ + ['foobar' => $array], 'color', 'array', 'form', false, true, 'color=blue%2Cblack%2Cbrown', ], // R=100&G=200&B=150 - 'form object, explode on' => [ - $object, 'color', 'object', 'form', true, 'R=100&G=200&B=150', + 'form object, explode on, required true' => [ + $object, 'color', 'object', 'form', true, true, 'R=100&G=200&B=150', ], // color=R,100,G,200,B,150 - 'form object, explode off' => [ - $object, 'color', 'object', 'form', false, 'color=R%2C100%2CG%2C200%2CB%2C150', + 'form object, explode off, required true' => [ + $object, 'color', 'object', 'form', false, true, 'color=R%2C100%2CG%2C200%2CB%2C150', ], // SPACE DELIMITED // color=blue - 'spaceDelimited primitive, explode off' => [ - 'blue', 'color', 'string', 'spaceDelimited', false, 'color=blue', + 'spaceDelimited primitive, explode off, required true' => [ + 'blue', 'color', 'string', 'spaceDelimited', false, true, 'color=blue', ], // color=blue - 'spaceDelimited primitive, explode on' => [ - 'blue', 'color', 'string', 'spaceDelimited', true, 'color=blue', + 'spaceDelimited primitive, explode on, required true' => [ + 'blue', 'color', 'string', 'spaceDelimited', true, true, 'color=blue', ], // color=blue%20black%20brown - 'spaceDelimited array, explode off' => [ - $array, 'color', 'array', 'spaceDelimited', false, 'color=blue%20black%20brown', + 'spaceDelimited array, explode off, required true' => [ + $array, 'color', 'array', 'spaceDelimited', false, true, 'color=blue%20black%20brown', ], // color=blue&color=black&color=brown - 'spaceDelimited array, explode on' => [ - $array, 'color', 'array', 'spaceDelimited', true, 'color=blue&color=black&color=brown', + 'spaceDelimited array, explode on, required true' => [ + $array, 'color', 'array', 'spaceDelimited', true, true, 'color=blue&color=black&color=brown', ], // color=R%20100%20G%20200%20B%20150 // swagger editor gives color=R,100,G,200,B,150 - 'spaceDelimited object, explode off' => [ - $object, 'color', 'object', 'spaceDelimited', false, 'color=R%20100%20G%20200%20B%20150', + 'spaceDelimited object, explode off, required true' => [ + $object, 'color', 'object', 'spaceDelimited', false, true, 'color=R%20100%20G%20200%20B%20150', ], // R=100&G=200&B=150 - 'spaceDelimited object, explode on' => [ - $object, 'color', 'object', 'spaceDelimited', true, 'R=100&G=200&B=150', + 'spaceDelimited object, explode on, required true' => [ + $object, 'color', 'object', 'spaceDelimited', true, true, 'R=100&G=200&B=150', ], // PIPE DELIMITED // color=blue - 'pipeDelimited primitive, explode off' => [ - 'blue', 'color', 'string', 'pipeDelimited', false, 'color=blue', + 'pipeDelimited primitive, explode off, required true' => [ + 'blue', 'color', 'string', 'pipeDelimited', false, true, 'color=blue', ], // color=blue - 'pipeDelimited primitive, explode on' => [ - 'blue', 'color', 'string', 'pipeDelimited', true, 'color=blue', + 'pipeDelimited primitive, explode on, required true' => [ + 'blue', 'color', 'string', 'pipeDelimited', true, true, 'color=blue', ], // color=blue|black|brown - 'pipeDelimited array, explode off' => [ - $array, 'color', 'array', 'pipeDelimited', false, 'color=blue%7Cblack%7Cbrown', + 'pipeDelimited array, explode off, required true' => [ + $array, 'color', 'array', 'pipeDelimited', false, true, 'color=blue%7Cblack%7Cbrown', ], // color=blue&color=black&color=brown - 'pipeDelimited array, explode on' => [ - $array, 'color', 'array', 'pipeDelimited', true, 'color=blue&color=black&color=brown', + 'pipeDelimited array, explode on, required true' => [ + $array, 'color', 'array', 'pipeDelimited', true, true, 'color=blue&color=black&color=brown', ], // color=R|100|G|200|B|150 // swagger editor gives color=R,100,G,200,B,150 - 'pipeDelimited object, explode off' => [ - $object, 'color', 'object', 'pipeDelimited', false, 'color=R%7C100%7CG%7C200%7CB%7C150', + 'pipeDelimited object, explode off, required true' => [ + $object, 'color', 'object', 'pipeDelimited', false, true, 'color=R%7C100%7CG%7C200%7CB%7C150', ], // R=100&G=200&B=150 - 'pipeDelimited object, explode on' => [ - $object, 'color', 'object', 'pipeDelimited', true, 'R=100&G=200&B=150', + 'pipeDelimited object, explode on, required true' => [ + $object, 'color', 'object', 'pipeDelimited', true, true, 'R=100&G=200&B=150', ], // DEEP OBJECT // color=blue - 'deepObject primitive, explode off' => [ - 'blue', 'color', 'string', 'deepObject', false, 'color=blue', + 'deepObject primitive, explode off, required true' => [ + 'blue', 'color', 'string', 'deepObject', false, true, 'color=blue', ], - 'deepObject primitive, explode on' => [ - 'blue', 'color', 'string', 'deepObject', true, 'color=blue', + 'deepObject primitive, explode on, required true' => [ + 'blue', 'color', 'string', 'deepObject', true, true, 'color=blue', ], // color=blue,black,brown - 'deepObject array, explode off' => [ - $array, 'color', 'array', 'deepObject', false, 'color=blue%2Cblack%2Cbrown', + 'deepObject array, explode off, required true' => [ + $array, 'color', 'array', 'deepObject', false, true, 'color=blue%2Cblack%2Cbrown', ], // color=blue&color=black&color=brown - 'deepObject array, explode on' => [ - $array, 'color', 'array', 'deepObject', true, 'color=blue&color=black&color=brown', + 'deepObject array, explode on, required true' => [ + $array, 'color', 'array', 'deepObject', true, true, 'color=blue&color=black&color=brown', ], // color[R]=100&color[G]=200&color[B]=150 - 'deepObject object, explode off' => [ - $object, 'color', 'object', 'deepObject', false, 'color%5BR%5D=100&color%5BG%5D=200&color%5BB%5D=150', + 'deepObject object, explode off, required true' => [ + $object, 'color', 'object', 'deepObject', false, true, 'color%5BR%5D=100&color%5BG%5D=200&color%5BB%5D=150', ], // color[R]=100&color[G]=200&color[B]=150 - 'deepObject object, explode on' => [ - $object, 'color', 'object', 'deepObject', true, 'color%5BR%5D=100&color%5BG%5D=200&color%5BB%5D=150', + 'deepObject object, explode on, required true' => [ + $object, 'color', 'object', 'deepObject', true, true, 'color%5BR%5D=100&color%5BG%5D=200&color%5BB%5D=150', ], // filter[or][0][name]=John&filter[or][1][email]=john@doe.com 'example from @nadar' => [ @@ -287,6 +301,7 @@ class ObjectSerializerTest extends TestCase 'object', 'deepObject', true, + true, 'filter%5Bor%5D%5B0%5D%5Bname%5D=John&filter%5Bor%5D%5B1%5D%5Bemail%5D=john%40doe.com' ], ];