diff --git a/src/Processors/ExpandEnums.php b/src/Processors/ExpandEnums.php index 8e712bc54..3169d0308 100644 --- a/src/Processors/ExpandEnums.php +++ b/src/Processors/ExpandEnums.php @@ -56,6 +56,15 @@ protected function expandContextEnum(Analysis $analysis): void return ($useName || !($case instanceof \ReflectionEnumBackedCase)) ? $case->name : $case->getBackingValue(); }, $re->getCases()); + if (!$useName) { + $schemaX = Generator::isDefault($schema->x) ? [] : $schema->x; + $schemaX['enumNames'] = array_map(function ($case) { + return $case->name; + }, $re->getCases()); + + $schema->x = $schemaX; + } + $schema->type = $useName ? 'string' : $enumType; $this->mapNativeType($schema, $schemaType); diff --git a/tests/Processors/ExpandEnumsTest.php b/tests/Processors/ExpandEnumsTest.php index 0af7ccae3..49da685cf 100644 --- a/tests/Processors/ExpandEnumsTest.php +++ b/tests/Processors/ExpandEnumsTest.php @@ -61,6 +61,15 @@ public function testExpandBackedStringEnum(): void $this->assertEquals('string', $schema->type); } + public function testEnumNamesInBackedStringEnum(): void + { + $analysis = $this->analysisFromFixtures(['PHP/Enums/StatusEnumStringBacked.php']); + $analysis->process([new ExpandEnums()]); + $schema = $analysis->getSchemaForSource(StatusEnumStringBacked::class); + + $this->assertEquals(['DRAFT', 'PUBLISHED', 'ARCHIVED'], $schema->x['enumNames']); + } + public static function expandEnumClassStringFixtures(): iterable { if (!class_exists('\\ReflectionEnum')) {