Fix spec enum name validation

This commit is contained in:
Chirag Aggarwal
2026-04-22 15:21:41 +05:30
parent affd5876ab
commit 4f74394e8f
3 changed files with 79 additions and 3 deletions
+3 -3
View File
@@ -370,12 +370,12 @@ class Specs extends Action
}
$explicitEnumName = $this->getExplicitSpecEnumName($node);
if (!\is_null($explicitEnumName)) {
if (!\is_null($explicitEnumName) && !isset($node['enum'])) {
$this->addSpecEnumName($enums, $explicitEnumName);
}
foreach ($node as $key => $value) {
if (!\is_array($value)) {
if ($key === 'items' || !\is_array($value)) {
continue;
}
@@ -420,7 +420,7 @@ class Specs extends Action
return $this->getFallbackSpecEnumName($parent, $fallbackName);
}
if (\is_string($key) && !\in_array($key, ['components', 'content', 'definitions', 'parameters', 'paths', 'properties', 'responses'], true)) {
if (\is_string($key) && !\in_array($key, ['components', 'content', 'definitions', 'delete', 'get', 'head', 'options', 'parameters', 'patch', 'paths', 'post', 'properties', 'put', 'responses'], true)) {
return $key;
}
@@ -751,6 +751,15 @@ abstract class Format
break;
case 'project':
switch ($method) {
case 'getEmailTemplate':
case 'updateEmailTemplate':
switch ($param) {
case 'templateId':
return 'EmailTemplateType';
case 'locale':
return 'EmailTemplateLocale';
}
break;
case 'getUsage':
switch ($param) {
case 'period':
+67
View File
@@ -11,6 +11,18 @@ class TestSpecs extends Specs
{
$this->verifyParsedSpec($spec);
}
public function collectEnums(array $spec): array
{
$collect = \Closure::bind(function (array $spec): array {
$enums = [];
$this->collectSpecEnumNames($spec, $enums);
return $enums;
}, $this, Specs::class);
return $collect($spec);
}
}
class SpecsTest extends TestCase
@@ -119,4 +131,59 @@ class SpecsTest extends TestCase
$this->addToAssertionCount(1);
}
public function testCollectSpecEnumNamesDoesNotDoubleRegisterExplicitNames(): void
{
$enums = $this->specs->collectEnums([
'schema' => [
'type' => 'string',
'enum' => ['en'],
'x-enum-name' => 'Locale',
],
]);
$this->assertSame(['Locale'], $enums['locale']);
}
public function testCollectSpecEnumNamesDoesNotDoubleRegisterItemsEnums(): void
{
$enums = $this->specs->collectEnums([
'name' => 'Locale',
'type' => 'array',
'items' => [
'type' => 'string',
'enum' => ['en'],
],
]);
$this->assertSame(['Locale'], $enums['locale']);
}
public function testVerifyParsedSpecIgnoresHttpMethodFallbackNames(): void
{
$this->specs->verify([
'tags' => [
[
'name' => 'patch',
'description' => 'Patch APIs',
],
],
'paths' => [
'/example' => [
'patch' => [
'parameters' => [
[
'schema' => [
'type' => 'string',
'enum' => ['enabled'],
],
],
],
],
],
],
]);
$this->addToAssertionCount(1);
}
}