From 1ca8ac59cd4180602f6a44d84340e4de32ad2aa8 Mon Sep 17 00:00:00 2001 From: shalvah Date: Wed, 12 Sep 2018 11:06:33 +0100 Subject: [PATCH] Parse JSON responses from @response or @transformer correctly --- .../ApiDoc/Generators/AbstractGenerator.php | 26 +++++++++++++------ tests/ApiDocGeneratorTest.php | 2 +- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/Mpociot/ApiDoc/Generators/AbstractGenerator.php b/src/Mpociot/ApiDoc/Generators/AbstractGenerator.php index 6de55269..11dc9de8 100644 --- a/src/Mpociot/ApiDoc/Generators/AbstractGenerator.php +++ b/src/Mpociot/ApiDoc/Generators/AbstractGenerator.php @@ -55,14 +55,12 @@ public function processRoute($route, $bindings = [], $headers = [], $withRespons $headers[] = "HTTP_HOST: {$routeDomain}"; $headers[] = "SERVER_NAME: {$routeDomain}"; - $content = ''; $response = null; $docblockResponse = $this->getDocblockResponse($routeDescription['tags']); if ($docblockResponse) { // we have a response from the docblock ( @response ) $response = $docblockResponse; $showresponse = true; - $content = $response->getContent(); } if (! $response) { $transformerResponse = $this->getTransformerResponse($routeDescription['tags']); @@ -70,22 +68,17 @@ public function processRoute($route, $bindings = [], $headers = [], $withRespons // we have a transformer response from the docblock ( @transformer || @transformercollection ) $response = $transformerResponse; $showresponse = true; - $content = $response->getContent(); } } if (! $response && $withResponse) { try { $response = $this->getRouteResponse($route, $bindings, $headers); - if ($response->headers->get('Content-Type') === 'application/json') { - $content = json_decode($response->getContent(), JSON_PRETTY_PRINT); - } else { - $content = $response->getContent(); - } } catch (\Exception $e) { dump("Couldn't get response for route: ".implode(',', $this->getMethods($route)).'] '.$route->uri().'', $e); } } + $content = $this->getResponseContent($response); return $this->getParameters([ 'id' => md5($this->getUri($route).':'.implode($this->getMethods($route))), 'resource' => $routeGroup, @@ -665,4 +658,21 @@ protected function normalizeRule($rule) return $rule; } } + + /** + * @param $response + * @return mixed + */ + private function getResponseContent($response) + { + if (empty($response)) { + return ''; + } + if ($response->headers->get('Content-Type') === 'application/json') { + $content = json_decode($response->getContent(), JSON_PRETTY_PRINT); + } else { + $content = $response->getContent(); + } + return $content; + } } diff --git a/tests/ApiDocGeneratorTest.php b/tests/ApiDocGeneratorTest.php index 750153a8..64bee058 100644 --- a/tests/ApiDocGeneratorTest.php +++ b/tests/ApiDocGeneratorTest.php @@ -355,7 +355,7 @@ public function testCanParseResponseTag() $this->assertTrue(is_array($parsed)); $this->assertArrayHasKey('showresponse', $parsed); $this->assertTrue($parsed['showresponse']); - $this->assertJsonStringEqualsJsonString(json_decode($parsed['response'], true), '{ "data": []}'); + $this->assertJsonStringEqualsJsonString($parsed['response'], '{ "data": []}'); } public function testCanParseTransformerTag()