From 8bf9ca0c745603caaf3b03140a00dfcade9796aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Milan=20Felix=20=C5=A0ulc?= Date: Mon, 26 Dec 2022 16:25:49 +0100 Subject: [PATCH] DI: replace deprecated nette/reflection with contributte/utils --- composer.json | 3 +- src/DI/ApiRouterExtension.php | 12 +++--- tests/Cases/ApiRouteExtensionTest.php | 60 +++++++++++++++++++++++++++ tests/Fixtures/DummyRouterFactory.php | 15 +++++++ tests/Fixtures/UsersController.php | 50 ++++++++++++++++++++++ tests/Toolkit/Helpers.php | 19 +++++++++ tests/Toolkit/Tests.php | 11 +++++ 7 files changed, 161 insertions(+), 9 deletions(-) create mode 100644 tests/Cases/ApiRouteExtensionTest.php create mode 100644 tests/Fixtures/DummyRouterFactory.php create mode 100644 tests/Fixtures/UsersController.php create mode 100644 tests/Toolkit/Helpers.php create mode 100644 tests/Toolkit/Tests.php diff --git a/composer.json b/composer.json index 3e573ed..c18e1b9 100644 --- a/composer.json +++ b/composer.json @@ -36,10 +36,9 @@ "require": { "php": ">= 7.1.0", "nette/http": "^3.0", - "nette/utils": "^3.0", "nette/application": "^3.0", "nette/di": "^3.0", - "nette/reflection": "^2.4", + "contributte/utils": "^0.5.2", "doctrine/cache": "^1.6", "doctrine/annotations": "~1.3" }, diff --git a/src/DI/ApiRouterExtension.php b/src/DI/ApiRouterExtension.php index 86e1ab5..bceb8f9 100644 --- a/src/DI/ApiRouterExtension.php +++ b/src/DI/ApiRouterExtension.php @@ -3,6 +3,7 @@ namespace Contributte\ApiRouter\DI; use Contributte\ApiRouter\ApiRoute; +use Contributte\Utils\Annotations; use Doctrine\Common\Annotations\AnnotationReader; use Doctrine\Common\Annotations\AnnotationRegistry; use Doctrine\Common\Annotations\CachedReader; @@ -13,8 +14,7 @@ use Nette\DI\ContainerBuilder; use Nette\DI\Definitions\Definition; use Nette\PhpGenerator\ClassType as GClassType; -use Nette\Reflection\ClassType; -use Nette\Reflection\Method; +use ReflectionClass; use ReflectionMethod; class ApiRouterExtension extends CompilerExtension @@ -110,7 +110,7 @@ private function findRoutes(ContainerBuilder $builder): array private function findRoutesInPresenter(string $presenter, array &$routes): void { - $r = ClassType::from($presenter); + $r = new ReflectionClass($presenter); $route = $this->reader->getClassAnnotation($r, ApiRoute::class); @@ -125,7 +125,7 @@ private function findRoutesInPresenter(string $presenter, array &$routes): void $routes[$route->getPriority()] = []; } - $route->setDescription($r->getAnnotation('description')); + $route->setDescription(Annotations::getAnnotation($r, 'description')); if (!$route->getPresenter()) { $route->setPresenter(preg_replace('/Presenter$/', '', $r->getShortName())); @@ -170,9 +170,7 @@ private function findPresenterMethodRoute( return; } - if ($method_reflection instanceof Method) { - $action_route->setDescription($method_reflection->getAnnotation('description')); - } + $action_route->setDescription(Annotations::getAnnotation($method_reflection, 'description')); /** * Action route will inherit presenter name, priority, etc from parent route diff --git a/tests/Cases/ApiRouteExtensionTest.php b/tests/Cases/ApiRouteExtensionTest.php new file mode 100644 index 0000000..f2a25f2 --- /dev/null +++ b/tests/Cases/ApiRouteExtensionTest.php @@ -0,0 +1,60 @@ +load(function (Compiler $compiler): void { + $compiler->addExtension('api', new ApiRouterExtension()); + $compiler->addConfig(Helpers::neon(' + services: + router: Tests\Fixtures\DummyRouterFactory::create + - Tests\Fixtures\UsersController + ')); + $compiler->addConfig([ + 'parameters' => [ + 'debugMode' => false, + 'tempDir' => Tests::TEMP_PATH, + ], + ]); + }, __FILE__ . time()); + + $this->container = new $class(); + $this->container->initialize(); + } + + public function testRouter(): void + { + /** @var RouteList $router */ + $router = $this->container->getByType(RouteList::class); + + Assert::count(2, $router->getRouters()); + } + +} + +(new ApiRouteExtensionTest())->run(); diff --git a/tests/Fixtures/DummyRouterFactory.php b/tests/Fixtures/DummyRouterFactory.php new file mode 100644 index 0000000..e5cff12 --- /dev/null +++ b/tests/Fixtures/DummyRouterFactory.php @@ -0,0 +1,15 @@ +]", + * parameters={ + * "id"={ + * "requirement": "\d+", + * "default": 10 + * } + * } + * ) + */ +class UsersController extends Presenter +{ + + /** + * Get user detail + * + * @ApiRoute( + * "/api/users/[/-]", + * parameters={ + * "id"={ + * "requirement": "\d+" + * } + * }, + * method="GET" + * ) + */ + public function actionRead($id, $foo = null, $bar = null) + { + $this->sendJson(['id' => $id, 'foo' => $foo, 'bar' => $bar]); + } + + public function actionUpdate($id) + { + $this->sendJson(['id' => $id]); + } + + public function actionDelete($id) + { + $this->sendJson(['id' => $id]); + } + +} diff --git a/tests/Toolkit/Helpers.php b/tests/Toolkit/Helpers.php new file mode 100644 index 0000000..a497bdb --- /dev/null +++ b/tests/Toolkit/Helpers.php @@ -0,0 +1,19 @@ +process((array) Neon::decode($str)); + } + +} diff --git a/tests/Toolkit/Tests.php b/tests/Toolkit/Tests.php new file mode 100644 index 0000000..fb00e9a --- /dev/null +++ b/tests/Toolkit/Tests.php @@ -0,0 +1,11 @@ +