mirror of
https://github.com/retailcrm/NelmioApiDocBundle.git
synced 2025-02-02 15:51:48 +03:00
Catch more precise exception in DocumentationController (#2027)
* Catch more precise exception in DocumentationController * cs * Fix tests
This commit is contained in:
parent
766ed898cf
commit
fd45120d5c
@ -91,12 +91,7 @@ final class ApiDocGenerator
|
||||
return !$processor instanceof \OpenApi\Processors\OperationId;
|
||||
}));
|
||||
|
||||
$context = Util::createContext(
|
||||
// BC for for zircote/swagger-php < 4.2
|
||||
method_exists($generator, 'getVersion')
|
||||
? ['version' => $generator->getVersion()]
|
||||
: []
|
||||
);
|
||||
$context = Util::createContext(['version' => $generator->getVersion()]);
|
||||
|
||||
$this->openApi = new OpenApi(['_context' => $context]);
|
||||
$modelRegistry = new ModelRegistry($this->modelDescribers, $this->openApi, $this->alternativeNames);
|
||||
|
@ -11,6 +11,7 @@
|
||||
|
||||
namespace Nelmio\ApiDocBundle\Controller;
|
||||
|
||||
use Nelmio\ApiDocBundle\Exception\RenderInvalidArgumentException;
|
||||
use Nelmio\ApiDocBundle\Render\RenderOpenApi;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
@ -34,7 +35,7 @@ final class DocumentationController
|
||||
return JsonResponse::fromJsonString(
|
||||
$this->renderOpenApi->renderFromRequest($request, RenderOpenApi::JSON, $area)
|
||||
);
|
||||
} catch (InvalidArgumentException $e) {
|
||||
} catch (RenderInvalidArgumentException $e) {
|
||||
throw new BadRequestHttpException(sprintf('Area "%s" is not supported as it isn\'t defined in config.', $area));
|
||||
}
|
||||
}
|
||||
|
@ -208,11 +208,6 @@ final class OpenApiPhpDescriber
|
||||
*/
|
||||
private function getAttributesAsAnnotation($reflection, \OpenApi\Context $context): array
|
||||
{
|
||||
// BC zircote/swagger-php < 4.0
|
||||
if (!class_exists(AttributeAnnotationFactory::class)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$attributesFactory = new AttributeAnnotationFactory();
|
||||
$attributes = $attributesFactory->build($reflection, $context);
|
||||
// The attributes factory removes the context after executing so we need to set it back...
|
||||
|
@ -31,15 +31,15 @@ api_platform:
|
||||
|
||||
# Controllers
|
||||
doc_area:
|
||||
path: /docs/{area}
|
||||
path: /{area}/docs
|
||||
controller: nelmio_api_doc.controller.swagger_ui
|
||||
defaults:
|
||||
area: default
|
||||
|
||||
doc_json:
|
||||
path: /docs.json
|
||||
path: /{area}/docs.json
|
||||
controller: nelmio_api_doc.controller.swagger_json
|
||||
|
||||
doc_yaml:
|
||||
path: /docs.yaml
|
||||
path: /{area}/docs.yaml
|
||||
controller: nelmio_api_doc.controller.swagger_yaml
|
@ -25,12 +25,12 @@ class SwaggerUiTest extends WebTestCase
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$this->client = static::createClient([], ['HTTP_HOST' => 'api.example.com', 'PHP_SELF' => '/app_dev.php/docs', 'SCRIPT_FILENAME' => '/var/www/app/web/app_dev.php']);
|
||||
$this->client = static::createClient([], ['HTTP_HOST' => 'api.example.com', 'PHP_SELF' => '/app_dev.php/default/docs', 'SCRIPT_FILENAME' => '/var/www/app/web/app_dev.php']);
|
||||
}
|
||||
|
||||
public function testSwaggerUi()
|
||||
{
|
||||
$crawler = $this->client->request('GET', '/app_dev.php/docs');
|
||||
$crawler = $this->client->request('GET', '/app_dev.php/default/docs');
|
||||
|
||||
$response = $this->client->getResponse();
|
||||
$this->assertEquals(200, $response->getStatusCode());
|
||||
@ -44,7 +44,7 @@ class SwaggerUiTest extends WebTestCase
|
||||
|
||||
public function testApiPlatformSwaggerUi()
|
||||
{
|
||||
$crawler = $this->client->request('GET', '/app_dev.php/docs/test');
|
||||
$crawler = $this->client->request('GET', '/app_dev.php/test/docs');
|
||||
|
||||
$response = $this->client->getResponse();
|
||||
$this->assertEquals(200, $response->getStatusCode());
|
||||
@ -60,7 +60,7 @@ class SwaggerUiTest extends WebTestCase
|
||||
|
||||
public function testJsonDocs()
|
||||
{
|
||||
$this->client->request('GET', '/app_dev.php/docs.json');
|
||||
$this->client->request('GET', '/app_dev.php/default/docs.json');
|
||||
|
||||
$response = $this->client->getResponse();
|
||||
$this->assertEquals(200, $response->getStatusCode());
|
||||
@ -74,9 +74,17 @@ class SwaggerUiTest extends WebTestCase
|
||||
$this->assertEquals($expected, json_decode($response->getContent(), true));
|
||||
}
|
||||
|
||||
public function testInvalidJsonArea()
|
||||
{
|
||||
$this->client->request('GET', '/app_dev.php/nonexistent/docs.json');
|
||||
|
||||
$response = $this->client->getResponse();
|
||||
$this->assertEquals(400, $response->getStatusCode());
|
||||
}
|
||||
|
||||
public function testYamlDocs()
|
||||
{
|
||||
$this->client->request('GET', '/app_dev.php/docs.yaml');
|
||||
$this->client->request('GET', '/app_dev.php/default/docs.yaml');
|
||||
|
||||
$response = $this->client->getResponse();
|
||||
$this->assertEquals(200, $response->getStatusCode());
|
||||
|
@ -134,7 +134,16 @@ class TestKernel extends Kernel
|
||||
'serializer' => ['enable_annotations' => true],
|
||||
'property_access' => true,
|
||||
];
|
||||
|
||||
// Support symfony/framework-bundle < 5.4
|
||||
if (method_exists(\Symfony\Bundle\FrameworkBundle\Command\CachePoolClearCommand::class, 'complete')) {
|
||||
$framework += [
|
||||
'exceptions' => [
|
||||
'Symfony\Component\HttpKernel\Exception\BadRequestHttpException' => [
|
||||
'log_level' => 'debug',
|
||||
],
|
||||
],
|
||||
];
|
||||
}
|
||||
$c->loadFromExtension('framework', $framework);
|
||||
|
||||
$c->loadFromExtension('twig', [
|
||||
|
@ -11,12 +11,7 @@ trait SetsContextTrait
|
||||
{
|
||||
private function setContext(?Context $context): void
|
||||
{
|
||||
if (class_exists(\OpenApi\Analyser::class)) {
|
||||
// zircote/swagger-php ^3.2
|
||||
\OpenApi\Analyser::$context = $context;
|
||||
} else {
|
||||
// zircote/swagger-php ^4.0
|
||||
\OpenApi\Generator::$context = $context;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user