mirror of
https://github.com/appwrite/appwrite.git
synced 2026-05-26 13:51:13 +00:00
Fix spec enum name validation
This commit is contained in:
@@ -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':
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user