Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion src/ObjectSerializer.php
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,13 @@ public static function toQueryValue(
return [];
}

# Handle int and DateTime union in query
if ('int|\DateTime' === $openApiType || '\DateTime|int' === $openApiType) {
if ($value instanceof \DateTime) {
return ["$paramName" => $value->format(self::$dateTimeFormat)];
}
}
Comment thread
mcnulty-fp marked this conversation as resolved.

# Handle DateTime objects in query
if ('\DateTime' === $openApiType && $value instanceof \DateTime) {
return ["$paramName" => $value->format(self::$dateTimeFormat)];
Expand Down Expand Up @@ -546,7 +553,7 @@ private static function isEmptyValue(mixed $value, string $openApiType): bool
# For numeric values, false and '' are considered empty.
# This comparison is safe for floating point values, since the previous call to empty() will
# filter out values that don't match 0.
'int', 'integer' => 0 !== $value,
'int', 'integer', 'int|\DateTime', '\DateTime|int' => 0 !== $value,
'number', 'float' => 0 !== $value && 0.0 !== $value,
# For boolean values, '' is considered empty
'bool', 'boolean' => !in_array($value, [false, 0], true),
Expand Down
9 changes: 8 additions & 1 deletion template/ObjectSerializer.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ class ObjectSerializer
# For numeric values, false and '' are considered empty.
# This comparison is safe for floating point values, since the previous call to empty() will
# filter out values that don't match 0.
'int', 'integer' => 0 !== $value,
'int', 'integer', 'int|\DateTime', '\DateTime|int' => 0 !== $value,
'number', 'float' => 0 !== $value && 0.0 !== $value,
# For boolean values, '' is considered empty
'bool', 'boolean' => !in_array($value, [false, 0], true),
Expand Down Expand Up @@ -211,6 +211,13 @@ class ObjectSerializer
}
}

# Handle int and DateTime union in query
if ('int|\DateTime' === $openApiType || '\DateTime|int' === $openApiType) {
if ($value instanceof \DateTime) {
return ["$paramName" => $value->format(self::$dateTimeFormat)];
}
Comment thread
mcnulty-fp marked this conversation as resolved.
}

# Handle DateTime objects in query
if ('\DateTime' === $openApiType && $value instanceof \DateTime) {
return ["$paramName" => $value->format(self::$dateTimeFormat)];
Expand Down
4 changes: 2 additions & 2 deletions template/README.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -235,8 +235,8 @@ Class | Method | HTTP request | Description

## Documentation for Models

{{#models}}{{#model}} - [{{{classname}}}]({{modelDocPath}}/{{{classname}}}.md)
{{/model}}{{/models}}
{{#models}}{{#model}}{{^emptyVars}} - [{{{classname}}}]({{modelDocPath}}/{{{classname}}}.md)
{{/emptyVars}}{{/model}}{{/models}}

## Documentation for Authorization

Expand Down
20 changes: 10 additions & 10 deletions template/api.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ use {{invokerPackage}}\ObjectSerializer;
*
{{/description}}
{{#allParams}}
* @param {{{dataType}}}{{^required}}|null{{/required}} ${{paramName}}{{#description}} {{{.}}}{{/description}}{{^description}} {{paramName}}{{/description}} {{#required}}(required){{/required}}{{^required}}(optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}}{{#isDeprecated}} (deprecated){{/isDeprecated}}
* @param {{^composedSchemas.oneOf}}{{{dataType}}}{{/composedSchemas.oneOf}}{{#composedSchemas.oneOf}}{{#-first}}{{^hasDiscriminatorWithNonEmptyMapping}}{{{schema.dataType}}}{{/hasDiscriminatorWithNonEmptyMapping}}{{#hasDiscriminatorWithNonEmptyMapping}}{{{schema.complexType}}}{{/hasDiscriminatorWithNonEmptyMapping}}{{/-first}}{{/composedSchemas.oneOf}}{{^required}}|null{{/required}} ${{paramName}}{{#description}} {{{.}}}{{/description}}{{^description}} {{paramName}}{{/description}} {{#required}}(required){{/required}}{{^required}}(optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}}{{#isDeprecated}} (deprecated){{/isDeprecated}}
{{/allParams}}
Comment thread
mcnulty-fp marked this conversation as resolved.
*
* @noinspection GrazieInspection
Expand All @@ -108,7 +108,7 @@ use {{invokerPackage}}\ObjectSerializer;
* @deprecated
{{/isDeprecated}}
*/
public function {{operationId}}({{#allParams}}{{#isArray}}array{{/isArray}}{{#isMap}}array{{/isMap}}{{^isArray}}{{^isMap}}{{{dataType}}}{{/isMap}}{{/isArray}} ${{paramName}}{{^required}} = {{#defaultValue}}{{{.}}}{{/defaultValue}}{{^defaultValue}}null{{/defaultValue}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}): {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}
public function {{operationId}}({{#allParams}}{{#isArray}}array{{/isArray}}{{#isMap}}array{{/isMap}}{{^isArray}}{{^isMap}}{{^composedSchemas.oneOf}}{{{dataType}}}{{/composedSchemas.oneOf}}{{#composedSchemas.oneOf}}{{#-first}}{{^hasDiscriminatorWithNonEmptyMapping}}{{{schema.dataType}}}{{/hasDiscriminatorWithNonEmptyMapping}}{{#hasDiscriminatorWithNonEmptyMapping}}{{{schema.complexType}}}{{/hasDiscriminatorWithNonEmptyMapping}}{{/-first}}{{/composedSchemas.oneOf}}{{/isMap}}{{/isArray}} ${{paramName}}{{^required}} = {{#defaultValue}}{{{.}}}{{/defaultValue}}{{^defaultValue}}null{{/defaultValue}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}): {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}
{
{{#returnType}}list($response) = {{/returnType}}$this->{{operationId}}WithHttpInfo({{#allParams}}${{paramName}}, {{/allParams}});{{#returnType}}
Comment thread
mcnulty-fp marked this conversation as resolved.
return $response;{{/returnType}}
Expand All @@ -126,7 +126,7 @@ use {{invokerPackage}}\ObjectSerializer;
*
{{/description}}
{{#allParams}}
* @param {{{dataType}}}{{#notRequiredOrIsNullable}}|null{{/notRequiredOrIsNullable}} ${{paramName}}{{#description}} {{{.}}}{{/description}} {{#required}}(required){{/required}}{{^required}}(optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}}{{#isDeprecated}} (deprecated){{/isDeprecated}}
* @param {{^composedSchemas.oneOf}}{{{dataType}}}{{/composedSchemas.oneOf}}{{#composedSchemas.oneOf}}{{#-first}}{{^hasDiscriminatorWithNonEmptyMapping}}{{{schema.dataType}}}{{/hasDiscriminatorWithNonEmptyMapping}}{{#hasDiscriminatorWithNonEmptyMapping}}{{{schema.complexType}}}{{/hasDiscriminatorWithNonEmptyMapping}}{{/-first}}{{/composedSchemas.oneOf}}{{#notRequiredOrIsNullable}}|null{{/notRequiredOrIsNullable}} ${{paramName}}{{#description}} {{{.}}}{{/description}} {{#required}}(required){{/required}}{{^required}}(optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}}{{#isDeprecated}} (deprecated){{/isDeprecated}}
{{/allParams}}
*
* @noinspection GrazieInspection
Expand All @@ -141,7 +141,7 @@ use {{invokerPackage}}\ObjectSerializer;
* @deprecated
{{/isDeprecated}}
*/
public function {{operationId}}WithHttpInfo({{#allParams}}{{#isArray}}array{{/isArray}}{{#isMap}}array{{/isMap}}{{^isArray}}{{^isMap}}{{{dataType}}}{{/isMap}}{{/isArray}} ${{paramName}}{{^required}} = {{#defaultValue}}{{{.}}}{{/defaultValue}}{{^defaultValue}}null{{/defaultValue}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}): array
public function {{operationId}}WithHttpInfo({{#allParams}}{{#isArray}}array{{/isArray}}{{#isMap}}array{{/isMap}}{{^isArray}}{{^isMap}}{{^composedSchemas.oneOf}}{{{dataType}}}{{/composedSchemas.oneOf}}{{#composedSchemas.oneOf}}{{#-first}}{{^hasDiscriminatorWithNonEmptyMapping}}{{{schema.dataType}}}{{/hasDiscriminatorWithNonEmptyMapping}}{{#hasDiscriminatorWithNonEmptyMapping}}{{{schema.complexType}}}{{/hasDiscriminatorWithNonEmptyMapping}}{{/-first}}{{/composedSchemas.oneOf}}{{/isMap}}{{/isArray}} ${{paramName}}{{^required}} = {{#defaultValue}}{{{.}}}{{/defaultValue}}{{^defaultValue}}null{{/defaultValue}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}): array
{
$request = $this->{{operationId}}Request({{#allParams}}${{paramName}}, {{/allParams}});

Expand Down Expand Up @@ -206,7 +206,7 @@ use {{invokerPackage}}\ObjectSerializer;
*
{{/description}}
{{#allParams}}
* @param {{{dataType}}}{{#notRequiredOrIsNullable}}|null{{/notRequiredOrIsNullable}} ${{paramName}}{{#description}} {{{.}}}{{/description}} {{#required}}(required){{/required}}{{^required}}(optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}}{{#isDeprecated}} (deprecated){{/isDeprecated}}
* @param {{^composedSchemas.oneOf}}{{{dataType}}}{{/composedSchemas.oneOf}}{{#composedSchemas.oneOf}}{{#-first}}{{^hasDiscriminatorWithNonEmptyMapping}}{{{schema.dataType}}}{{/hasDiscriminatorWithNonEmptyMapping}}{{#hasDiscriminatorWithNonEmptyMapping}}{{{schema.complexType}}}{{/hasDiscriminatorWithNonEmptyMapping}}{{/-first}}{{/composedSchemas.oneOf}}{{#notRequiredOrIsNullable}}|null{{/notRequiredOrIsNullable}} ${{paramName}}{{#description}} {{{.}}}{{/description}} {{#required}}(required){{/required}}{{^required}}(optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}}{{#isDeprecated}} (deprecated){{/isDeprecated}}
{{/allParams}}
*
* @noinspection GrazieInspection
Expand All @@ -218,7 +218,7 @@ use {{invokerPackage}}\ObjectSerializer;
* @deprecated
{{/isDeprecated}}
*/
public function {{operationId}}Async({{#allParams}}{{#isArray}}array{{/isArray}}{{#isMap}}array{{/isMap}}{{^isArray}}{{^isMap}}{{{dataType}}}{{/isMap}}{{/isArray}} ${{paramName}}{{^required}} = {{#defaultValue}}{{{.}}}{{/defaultValue}}{{^defaultValue}}null{{/defaultValue}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}): PromiseInterface
public function {{operationId}}Async({{#allParams}}{{#isArray}}array{{/isArray}}{{#isMap}}array{{/isMap}}{{^isArray}}{{^isMap}}{{^composedSchemas.oneOf}}{{{dataType}}}{{/composedSchemas.oneOf}}{{#composedSchemas.oneOf}}{{#-first}}{{^hasDiscriminatorWithNonEmptyMapping}}{{{schema.dataType}}}{{/hasDiscriminatorWithNonEmptyMapping}}{{#hasDiscriminatorWithNonEmptyMapping}}{{{schema.complexType}}}{{/hasDiscriminatorWithNonEmptyMapping}}{{/-first}}{{/composedSchemas.oneOf}}{{/isMap}}{{/isArray}} ${{paramName}}{{^required}} = {{#defaultValue}}{{{.}}}{{/defaultValue}}{{^defaultValue}}null{{/defaultValue}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}): PromiseInterface
{
return $this->{{operationId}}AsyncWithHttpInfo({{#allParams}}${{paramName}}, {{/allParams}})
->then(
Expand All @@ -240,7 +240,7 @@ use {{invokerPackage}}\ObjectSerializer;
*
{{/description}}
{{#allParams}}
* @param {{{dataType}}}{{#notRequiredOrIsNullable}}|null{{/notRequiredOrIsNullable}} ${{paramName}}{{#description}} {{{.}}}{{/description}} {{#required}}(required){{/required}}{{^required}}(optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}}{{#isDeprecated}} (deprecated){{/isDeprecated}}
* @param {{^composedSchemas.oneOf}}{{{dataType}}}{{/composedSchemas.oneOf}}{{#composedSchemas.oneOf}}{{#-first}}{{^hasDiscriminatorWithNonEmptyMapping}}{{{schema.dataType}}}{{/hasDiscriminatorWithNonEmptyMapping}}{{#hasDiscriminatorWithNonEmptyMapping}}{{{schema.complexType}}}{{/hasDiscriminatorWithNonEmptyMapping}}{{/-first}}{{/composedSchemas.oneOf}}{{#notRequiredOrIsNullable}}|null{{/notRequiredOrIsNullable}} ${{paramName}}{{#description}} {{{.}}}{{/description}} {{#required}}(required){{/required}}{{^required}}(optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}}{{#isDeprecated}} (deprecated){{/isDeprecated}}
{{/allParams}}
*
* @noinspection GrazieInspection
Expand All @@ -252,7 +252,7 @@ use {{invokerPackage}}\ObjectSerializer;
* @deprecated
{{/isDeprecated}}
*/
public function {{operationId}}AsyncWithHttpInfo({{#allParams}}{{#isArray}}array{{/isArray}}{{#isMap}}array{{/isMap}}{{^isArray}}{{^isMap}}{{{dataType}}}{{/isMap}}{{/isArray}} ${{paramName}}{{^required}} = {{#defaultValue}}{{{.}}}{{/defaultValue}}{{^defaultValue}}null{{/defaultValue}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}): PromiseInterface
public function {{operationId}}AsyncWithHttpInfo({{#allParams}}{{#isArray}}array{{/isArray}}{{#isMap}}array{{/isMap}}{{^isArray}}{{^isMap}}{{^composedSchemas.oneOf}}{{{dataType}}}{{/composedSchemas.oneOf}}{{#composedSchemas.oneOf}}{{#-first}}{{^hasDiscriminatorWithNonEmptyMapping}}{{{schema.dataType}}}{{/hasDiscriminatorWithNonEmptyMapping}}{{#hasDiscriminatorWithNonEmptyMapping}}{{{schema.complexType}}}{{/hasDiscriminatorWithNonEmptyMapping}}{{/-first}}{{/composedSchemas.oneOf}}{{/isMap}}{{/isArray}} ${{paramName}}{{^required}} = {{#defaultValue}}{{{.}}}{{/defaultValue}}{{^defaultValue}}null{{/defaultValue}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}): PromiseInterface
{
$request = $this->{{operationId}}Request({{#allParams}}${{paramName}}, {{/allParams}});

Expand Down Expand Up @@ -283,7 +283,7 @@ use {{invokerPackage}}\ObjectSerializer;
* Create request for operation '{{{operationId}}}'
*
{{#allParams}}
* @param {{{dataType}}}{{#notRequiredOrIsNullable}}|null{{/notRequiredOrIsNullable}} ${{paramName}}{{#description}} {{{.}}}{{/description}} {{#required}}(required){{/required}}{{^required}}(optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}}{{#isDeprecated}} (deprecated){{/isDeprecated}}
* @param {{^composedSchemas.oneOf}}{{{dataType}}}{{/composedSchemas.oneOf}}{{#composedSchemas.oneOf}}{{#-first}}{{^hasDiscriminatorWithNonEmptyMapping}}{{{schema.dataType}}}{{/hasDiscriminatorWithNonEmptyMapping}}{{#hasDiscriminatorWithNonEmptyMapping}}{{{schema.complexType}}}{{/hasDiscriminatorWithNonEmptyMapping}}{{/-first}}{{/composedSchemas.oneOf}}{{#notRequiredOrIsNullable}}|null{{/notRequiredOrIsNullable}} ${{paramName}}{{#description}} {{{.}}}{{/description}} {{#required}}(required){{/required}}{{^required}}(optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}}{{#isDeprecated}} (deprecated){{/isDeprecated}}
{{/allParams}}
*
* @noinspection GrazieInspection
Expand All @@ -295,7 +295,7 @@ use {{invokerPackage}}\ObjectSerializer;
* @deprecated
{{/isDeprecated}}
*/
public function {{operationId}}Request({{#allParams}}{{#isArray}}array{{/isArray}}{{#isMap}}array{{/isMap}}{{^isArray}}{{^isMap}}{{{dataType}}}{{/isMap}}{{/isArray}} ${{paramName}}{{^required}} = {{#defaultValue}}{{{.}}}{{/defaultValue}}{{^defaultValue}}null{{/defaultValue}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}): Request
public function {{operationId}}Request({{#allParams}}{{#isArray}}array{{/isArray}}{{#isMap}}array{{/isMap}}{{^isArray}}{{^isMap}}{{^composedSchemas.oneOf}}{{{dataType}}}{{/composedSchemas.oneOf}}{{#composedSchemas.oneOf}}{{#-first}}{{^hasDiscriminatorWithNonEmptyMapping}}{{{schema.dataType}}}{{/hasDiscriminatorWithNonEmptyMapping}}{{#hasDiscriminatorWithNonEmptyMapping}}{{{schema.complexType}}}{{/hasDiscriminatorWithNonEmptyMapping}}{{/-first}}{{/composedSchemas.oneOf}}{{/isMap}}{{/isArray}} ${{paramName}}{{^required}} = {{#defaultValue}}{{{.}}}{{/defaultValue}}{{^defaultValue}}null{{/defaultValue}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}): Request
{
{{#allParams}}
{{#hasValidation}}
Expand Down
4 changes: 2 additions & 2 deletions template/api_doc.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ $apiInstance = new {{classname}}(
new GuzzleHttp\Client()
);

{{#allParams}}${{paramName}} = {{{example}}}; // {{{dataType}}}{{#description}} | {{{.}}}{{/description}}
{{#allParams}}${{paramName}} = {{#composedSchemas.oneOf}}{{#-first}}{{{example}}}{{/-first}}{{/composedSchemas.oneOf}}{{^composedSchemas.oneOf}}{{{example}}}{{/composedSchemas.oneOf}}; // {{^composedSchemas.oneOf}}{{{dataType}}}{{/composedSchemas.oneOf}}{{#composedSchemas.oneOf}}{{#-first}}{{^hasDiscriminatorWithNonEmptyMapping}}{{{schema.dataType}}}{{/hasDiscriminatorWithNonEmptyMapping}}{{#hasDiscriminatorWithNonEmptyMapping}}{{{dataType}}}{{/hasDiscriminatorWithNonEmptyMapping}}{{/-first}}{{/composedSchemas.oneOf}}{{#description}} | {{{.}}}{{/description}}
{{/allParams}}

try {
Expand All @@ -53,7 +53,7 @@ try {

{{^allParams}}This endpoint does not need any parameter.{{/allParams}}{{#allParams}}{{#-last}}| Name | Type | Description | Notes |
| ------------- | ------------- | ------------- | ------------- |{{/-last}}{{/allParams}}
{{#allParams}}| **{{paramName}}** | {{#isFile}}**{{{dataType}}}**{{/isFile}}{{#isPrimitiveType}}**{{{dataType}}}**{{/isPrimitiveType}}{{^isPrimitiveType}}{{^isFile}}[**{{{dataType}}}**](../Model/{{baseType}}.md){{/isFile}}{{/isPrimitiveType}} | {{{description}}} |{{^required}} [optional]{{/required}}{{#defaultValue}} [default to {{.}}]{{/defaultValue}} |
{{#allParams}}| **{{paramName}}** | {{#isFile}}**{{{dataType}}}**{{/isFile}}{{#isPrimitiveType}}**{{{dataType}}}**{{/isPrimitiveType}}{{^isPrimitiveType}}{{^isFile}}{{^composedSchemas.oneOf}}[**{{{dataType}}}**](../Model/{{baseType}}.md){{/composedSchemas.oneOf}}{{#composedSchemas.oneOf}}{{^hasDiscriminatorWithNonEmptyMapping}}{{#-first}}**{{/-first}}{{{dataType}}}{{^-last}}\|{{/-last}}{{#-last}}**{{/-last}}{{/hasDiscriminatorWithNonEmptyMapping}}{{#hasDiscriminatorWithNonEmptyMapping}}{{#-first}}[**{{{dataType}}}**](../Model/{{baseType}}.md){{/-first}}{{/hasDiscriminatorWithNonEmptyMapping}}{{/composedSchemas.oneOf}}{{/isFile}}{{/isPrimitiveType}} | {{{description}}} |{{^required}} [optional]{{/required}}{{#defaultValue}} [default to {{.}}]{{/defaultValue}} |
Comment thread
mcnulty-fp marked this conversation as resolved.
{{/allParams}}

### Return type
Expand Down
68 changes: 68 additions & 0 deletions test/ObjectSerializerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -196,4 +196,72 @@ public function testBuildQueryInvalidEncoding(): void
$this->expectException(\InvalidArgumentException::class);
ObjectSerializer::buildQuery(['key' => 'value'], 'invalid');
}

/**
* toQueryValue with int|\DateTime type should format a DateTime using the current dateTimeFormat.
*/
public function testToQueryValueDateTimeUnionWithDateTime(): void
{
$date = new \DateTime('2024-03-15T12:00:00+00:00');
$result = ObjectSerializer::toQueryValue($date, 'before', 'int|\DateTime');
$this->assertSame(['before' => $date->format(\DateTimeInterface::ATOM)], $result);
}

/**
* toQueryValue with \DateTime|int (reversed) should also format a DateTime correctly.
*/
public function testToQueryValueDateTimeUnionReversedWithDateTime(): void
{
$date = new \DateTime('2024-03-15T12:00:00+00:00');
$result = ObjectSerializer::toQueryValue($date, 'after', '\DateTime|int');
$this->assertSame(['after' => $date->format(\DateTimeInterface::ATOM)], $result);
}

/**
* toQueryValue with int|\DateTime type should pass an integer through as-is.
*/
public function testToQueryValueDateTimeUnionWithInt(): void
{
$result = ObjectSerializer::toQueryValue(1700000000, 'before', 'int|\DateTime');
$this->assertSame(['before' => 1700000000], $result);
}

/**
* toQueryValue with int|\DateTime type should omit a null value when the parameter is not required.
*/
public function testToQueryValueDateTimeUnionNullOptional(): void
{
$result = ObjectSerializer::toQueryValue(null, 'before', 'int|\DateTime', 'form', true, false);
$this->assertSame([], $result);
}

/**
* toQueryValue with int|\DateTime type should return an empty string for a null value when the parameter is required.
*/
public function testToQueryValueDateTimeUnionNullRequired(): void
{
$result = ObjectSerializer::toQueryValue(null, 'before', 'int|\DateTime', 'form', true, true);
$this->assertSame(['before' => ''], $result);
}

/**
* toQueryValue with int|\DateTime type should pass zero through because it should be treated as an integer.
*/
public function testToQueryValueDateTimeUnionZeroOptional(): void
{
$result = ObjectSerializer::toQueryValue(0, 'before', 'int|\DateTime', 'form', true, false);
$this->assertSame(['before' => 0], $result);
}

/**
* toQueryValue with int|\DateTime type should respect a custom dateTimeFormat when formatting a DateTime.
*/
public function testToQueryValueDateTimeUnionCustomFormat(): void
{
$date = new \DateTime('2024-03-15T12:00:00+00:00');
ObjectSerializer::setDateTimeFormat('Y-m-d');
$result = ObjectSerializer::toQueryValue($date, 'before', 'int|\DateTime');
ObjectSerializer::setDateTimeFormat(\DateTimeInterface::ATOM);
$this->assertSame(['before' => '2024-03-15'], $result);
}
}
Loading