forked from loafle/openapi-generator-original
[php-flight] fix: parsing class/enum models (#18528)
This commit is contained in:
parent
06ed7c8205
commit
7070255dc5
@ -73,7 +73,10 @@ function parseParam(mixed $param, string $type)
|
|||||||
} elseif (str_ends_with($type, '[]')) {
|
} elseif (str_ends_with($type, '[]')) {
|
||||||
return array_map(fn($el) => parseParam($el, substr($type, 0, -2)), $param);
|
return array_map(fn($el) => parseParam($el, substr($type, 0, -2)), $param);
|
||||||
} elseif (str_starts_with($nonNullType, '\\{{escapedModelPackage}}')) {
|
} elseif (str_starts_with($nonNullType, '\\{{escapedModelPackage}}')) {
|
||||||
return new $nonNullType($param);
|
if (enum_exists($nonNullType)) {
|
||||||
|
return $nonNullType::tryFrom($param);
|
||||||
|
}
|
||||||
|
return $nonNullType::fromArray($param);
|
||||||
} else {
|
} else {
|
||||||
return $param;
|
return $param;
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,8 @@
|
|||||||
{{#apiInfo}}
|
{{#apiInfo}}
|
||||||
namespace {{testPackage}};
|
namespace {{testPackage}};
|
||||||
|
|
||||||
|
use function {{invokerPackage}}\parseParam;
|
||||||
|
|
||||||
class RegisterRoutesTest extends \PHPUnit\Framework\TestCase {
|
class RegisterRoutesTest extends \PHPUnit\Framework\TestCase {
|
||||||
{{#apis}}
|
{{#apis}}
|
||||||
public function testRegisterRoutes{{classname}}(): void
|
public function testRegisterRoutes{{classname}}(): void
|
||||||
@ -27,5 +29,25 @@ class RegisterRoutesTest extends \PHPUnit\Framework\TestCase {
|
|||||||
$this->assertTrue(true);
|
$this->assertTrue(true);
|
||||||
}
|
}
|
||||||
{{/apis}}
|
{{/apis}}
|
||||||
|
{{#models}}
|
||||||
|
{{#model}}
|
||||||
|
{{#isEnum}}
|
||||||
|
public function testParseParamsEnum{{classname}}(): void
|
||||||
|
{
|
||||||
|
{{#allowableValues}}
|
||||||
|
{{#enumVars}}
|
||||||
|
{{#-first}}
|
||||||
|
$value = {{{value}}};
|
||||||
|
{{/-first}}
|
||||||
|
{{/enumVars}}
|
||||||
|
{{/allowableValues}}
|
||||||
|
$this->assertEquals(
|
||||||
|
parseParam($value, '\\{{escapedModelPackage}}\\{{classname}}'),
|
||||||
|
\{{modelPackage}}\{{classname}}::{{#allowableValues}}{{#enumVars}}{{#-first}}{{{name}}}{{/-first}}{{/enumVars}}{{/allowableValues}}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
{{/isEnum}}
|
||||||
|
{{/model}}
|
||||||
|
{{/models}}
|
||||||
}
|
}
|
||||||
{{/apiInfo}}
|
{{/apiInfo}}
|
||||||
|
@ -368,7 +368,10 @@ function parseParam(mixed $param, string $type)
|
|||||||
} elseif (str_ends_with($type, '[]')) {
|
} elseif (str_ends_with($type, '[]')) {
|
||||||
return array_map(fn($el) => parseParam($el, substr($type, 0, -2)), $param);
|
return array_map(fn($el) => parseParam($el, substr($type, 0, -2)), $param);
|
||||||
} elseif (str_starts_with($nonNullType, '\\OpenAPIServer\\Model')) {
|
} elseif (str_starts_with($nonNullType, '\\OpenAPIServer\\Model')) {
|
||||||
return new $nonNullType($param);
|
if (enum_exists($nonNullType)) {
|
||||||
|
return $nonNullType::tryFrom($param);
|
||||||
|
}
|
||||||
|
return $nonNullType::fromArray($param);
|
||||||
} else {
|
} else {
|
||||||
return $param;
|
return $param;
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,8 @@
|
|||||||
|
|
||||||
namespace OpenAPIServer\Test;
|
namespace OpenAPIServer\Test;
|
||||||
|
|
||||||
|
use function OpenAPIServer\parseParam;
|
||||||
|
|
||||||
class RegisterRoutesTest extends \PHPUnit\Framework\TestCase {
|
class RegisterRoutesTest extends \PHPUnit\Framework\TestCase {
|
||||||
public function testRegisterRoutesAbstractPetApi(): void
|
public function testRegisterRoutesAbstractPetApi(): void
|
||||||
{
|
{
|
||||||
@ -49,4 +51,28 @@ class RegisterRoutesTest extends \PHPUnit\Framework\TestCase {
|
|||||||
\OpenAPIServer\RegisterRoutes::registerRoutes($handler);
|
\OpenAPIServer\RegisterRoutes::registerRoutes($handler);
|
||||||
$this->assertTrue(true);
|
$this->assertTrue(true);
|
||||||
}
|
}
|
||||||
|
public function testParseParamsEnumFindPetsByStatusStatusParameterInner(): void
|
||||||
|
{
|
||||||
|
$value = 'available';
|
||||||
|
$this->assertEquals(
|
||||||
|
parseParam($value, '\\OpenAPIServer\\Model\\FindPetsByStatusStatusParameterInner'),
|
||||||
|
\OpenAPIServer\Model\FindPetsByStatusStatusParameterInner::AVAILABLE
|
||||||
|
);
|
||||||
|
}
|
||||||
|
public function testParseParamsEnumOrderStatus(): void
|
||||||
|
{
|
||||||
|
$value = 'placed';
|
||||||
|
$this->assertEquals(
|
||||||
|
parseParam($value, '\\OpenAPIServer\\Model\\OrderStatus'),
|
||||||
|
\OpenAPIServer\Model\OrderStatus::PLACED
|
||||||
|
);
|
||||||
|
}
|
||||||
|
public function testParseParamsEnumPetStatus(): void
|
||||||
|
{
|
||||||
|
$value = 'available';
|
||||||
|
$this->assertEquals(
|
||||||
|
parseParam($value, '\\OpenAPIServer\\Model\\PetStatus'),
|
||||||
|
\OpenAPIServer\Model\PetStatus::AVAILABLE
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user