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;
|
||||||
}
|
}
|
||||||
@ -82,4 +85,4 @@ function parseParam(mixed $param, string $type)
|
|||||||
function declaresMethod(\ReflectionClass $reflectionClass, string $methodName): bool
|
function declaresMethod(\ReflectionClass $reflectionClass, string $methodName): bool
|
||||||
{
|
{
|
||||||
return $reflectionClass->hasMethod($methodName) && $reflectionClass->getMethod($methodName)->getDeclaringClass()->getName() === $reflectionClass->getName();
|
return $reflectionClass->hasMethod($methodName) && $reflectionClass->getMethod($methodName)->getDeclaringClass()->getName() === $reflectionClass->getName();
|
||||||
}
|
}
|
||||||
|
@ -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}}
|
||||||
|
@ -47,7 +47,7 @@ class RegisterRoutes {
|
|||||||
\Flight::route('DELETE /pet/@petId', function (string $petId) use ($handler) {
|
\Flight::route('DELETE /pet/@petId', function (string $petId) use ($handler) {
|
||||||
$r = \Flight::request();
|
$r = \Flight::request();
|
||||||
$handler->deletePet(
|
$handler->deletePet(
|
||||||
parseParam($petId, 'int'),
|
parseParam($petId, 'int'),
|
||||||
parseParam($r->getHeader('api_key'), '?string')
|
parseParam($r->getHeader('api_key'), '?string')
|
||||||
);
|
);
|
||||||
\Flight::halt(204);
|
\Flight::halt(204);
|
||||||
@ -313,7 +313,7 @@ class RegisterRoutes {
|
|||||||
\Flight::route('GET /user/login', function () use ($handler) {
|
\Flight::route('GET /user/login', function () use ($handler) {
|
||||||
$r = \Flight::request();
|
$r = \Flight::request();
|
||||||
$result = $handler->loginUser(
|
$result = $handler->loginUser(
|
||||||
parseParam($r->query['username'] ?? null, 'string'),
|
parseParam($r->query['username'] ?? null, 'string'),
|
||||||
parseParam($r->query['password'] ?? null, 'string')
|
parseParam($r->query['password'] ?? null, 'string')
|
||||||
);
|
);
|
||||||
if ($result === null) {
|
if ($result === null) {
|
||||||
@ -343,7 +343,7 @@ class RegisterRoutes {
|
|||||||
\Flight::route('PUT /user/@username', function (string $username) use ($handler) {
|
\Flight::route('PUT /user/@username', function (string $username) use ($handler) {
|
||||||
$r = \Flight::request();
|
$r = \Flight::request();
|
||||||
$handler->updateUser(
|
$handler->updateUser(
|
||||||
parseParam($username, 'string'),
|
parseParam($username, 'string'),
|
||||||
parseParam(json_decode($r->getBody(), true), '\\OpenAPIServer\\Model\\User')
|
parseParam(json_decode($r->getBody(), true), '\\OpenAPIServer\\Model\\User')
|
||||||
);
|
);
|
||||||
\Flight::halt(204);
|
\Flight::halt(204);
|
||||||
@ -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;
|
||||||
}
|
}
|
||||||
@ -377,4 +380,4 @@ function parseParam(mixed $param, string $type)
|
|||||||
function declaresMethod(\ReflectionClass $reflectionClass, string $methodName): bool
|
function declaresMethod(\ReflectionClass $reflectionClass, string $methodName): bool
|
||||||
{
|
{
|
||||||
return $reflectionClass->hasMethod($methodName) && $reflectionClass->getMethod($methodName)->getDeclaringClass()->getName() === $reflectionClass->getName();
|
return $reflectionClass->hasMethod($methodName) && $reflectionClass->getMethod($methodName)->getDeclaringClass()->getName() === $reflectionClass->getName();
|
||||||
}
|
}
|
||||||
|
@ -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