From 42365c71ccce25b3ab722fb736e1c733b26beb8c Mon Sep 17 00:00:00 2001 From: Guilhem Niot Date: Sun, 27 Dec 2020 00:53:57 +0100 Subject: [PATCH] Fix a regression about manual paths in operation no longer being taken into account --- Describer/OpenApiPhpDescriber.php | 7 +++++++ Tests/Functional/Controller/ApiController.php | 8 ++++++++ Tests/Functional/FunctionalTest.php | 12 ++++++++++++ 3 files changed, 27 insertions(+) diff --git a/Describer/OpenApiPhpDescriber.php b/Describer/OpenApiPhpDescriber.php index 938e471..3cf0348 100644 --- a/Describer/OpenApiPhpDescriber.php +++ b/Describer/OpenApiPhpDescriber.php @@ -87,6 +87,13 @@ final class OpenApiPhpDescriber } if ($annotation instanceof OA\Operation) { + if (!in_array($annotation->method, $httpMethods, true)) { + continue; + } + if (OA\UNDEFINED !== $annotation->path && $path->path !== $annotation->path) { + continue; + } + $operation = Util::getOperation($path, $annotation->method); $operation->mergeProperties($annotation); diff --git a/Tests/Functional/Controller/ApiController.php b/Tests/Functional/Controller/ApiController.php index 072d57d..4988efd 100644 --- a/Tests/Functional/Controller/ApiController.php +++ b/Tests/Functional/Controller/ApiController.php @@ -54,6 +54,14 @@ class ApiController * @Operation( * @OA\Response(response="201", description="An example resource") * ) + * @OA\Get( + * path="/api/swagger2", + * @OA\Parameter(name="Accept-Version", in="header", @OA\Schema(type="string")) + * ) + * @OA\Post( + * path="/api/swagger2", + * @OA\Response(response="203", description="but 203 is not actually allowed (wrong method)") + * ) */ public function swaggerAction() { diff --git a/Tests/Functional/FunctionalTest.php b/Tests/Functional/FunctionalTest.php index 126fb91..914a032 100644 --- a/Tests/Functional/FunctionalTest.php +++ b/Tests/Functional/FunctionalTest.php @@ -80,6 +80,18 @@ class FunctionalTest extends WebTestCase return [['/api/swagger'], ['/api/swagger2']]; } + public function testAnnotationWithManualPath() + { + $path = $this->getPath('/api/swagger2'); + $this->assertSame(OA\UNDEFINED, $path->post); + + $operation = $this->getOperation('/api/swagger', 'get'); + $this->assertNotHasParameter('Accept-Version', 'header', $operation); + + $operation = $this->getOperation('/api/swagger2', 'get'); + $this->assertHasParameter('Accept-Version', 'header', $operation); + } + /** * @dataProvider implicitSwaggerActionMethodsProvider */