diff --git a/src/Capability/Discovery/SchemaGenerator.php b/src/Capability/Discovery/SchemaGenerator.php index 6366fd49..04ee08f6 100644 --- a/src/Capability/Discovery/SchemaGenerator.php +++ b/src/Capability/Discovery/SchemaGenerator.php @@ -374,7 +374,8 @@ private function applyEnumConstraints(array $paramSchema, array $paramInfo): arr if ($jsonBackingType) { if (isset($paramSchema['type']) && \is_array($paramSchema['type']) && \in_array('null', $paramSchema['type'])) { - $paramSchema['type'] = ['null', $jsonBackingType]; + $paramSchema['type'] = [$jsonBackingType, 'null']; + $paramSchema['enum'][] = null; } else { $paramSchema['type'] = $jsonBackingType; } @@ -383,7 +384,8 @@ private function applyEnumConstraints(array $paramSchema, array $paramInfo): arr // Non-backed enum - use names as enum values $paramSchema['enum'] = array_column($enumClass::cases(), 'name'); if (isset($paramSchema['type']) && \is_array($paramSchema['type']) && \in_array('null', $paramSchema['type'])) { - $paramSchema['type'] = ['null', 'string']; + $paramSchema['type'] = ['string', 'null']; + $paramSchema['enum'][] = null; } else { $paramSchema['type'] = 'string'; } diff --git a/tests/Unit/Capability/Discovery/SchemaGeneratorTest.php b/tests/Unit/Capability/Discovery/SchemaGeneratorTest.php index 299e9854..c92121e6 100644 --- a/tests/Unit/Capability/Discovery/SchemaGeneratorTest.php +++ b/tests/Unit/Capability/Discovery/SchemaGeneratorTest.php @@ -197,7 +197,7 @@ public function testGeneratesCorrectSchemaForEnumParameters(): void $this->assertEquals(['type' => 'string', 'description' => 'Backed string enum', 'enum' => ['A', 'B']], $schema['properties']['stringEnum']); $this->assertEquals(['type' => 'integer', 'description' => 'Backed int enum', 'enum' => [1, 2]], $schema['properties']['intEnum']); $this->assertEquals(['type' => 'string', 'description' => 'Unit enum', 'enum' => ['Yes', 'No']], $schema['properties']['unitEnum']); - $this->assertEquals(['type' => ['null', 'string'], 'enum' => ['A', 'B'], 'default' => null], $schema['properties']['nullableEnum']); + $this->assertEquals(['type' => ['string', 'null'], 'enum' => ['A', 'B', null], 'default' => null], $schema['properties']['nullableEnum']); $this->assertEquals(['type' => 'integer', 'enum' => [1, 2], 'default' => 1], $schema['properties']['enumWithDefault']); $this->assertEqualsCanonicalizing(['stringEnum', 'intEnum', 'unitEnum'], $schema['required']); }