From 5a6145fac8b6bd7e7645a65f15b3e0e435588481 Mon Sep 17 00:00:00 2001 From: bifidokk Date: Thu, 26 Jul 2018 10:16:10 +0500 Subject: [PATCH 01/14] Add docs for areas --- DependencyInjection/Configuration.php | 12 ++++++------ DependencyInjection/NelmioApiDocExtension.php | 14 +++++++++++--- Resources/config/services.xml | 2 +- Routing/FilteredRouteCollectionBuilder.php | 1 + 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/DependencyInjection/Configuration.php b/DependencyInjection/Configuration.php index 83204cc..95405b9 100644 --- a/DependencyInjection/Configuration.php +++ b/DependencyInjection/Configuration.php @@ -40,12 +40,6 @@ final class Configuration implements ConfigurationInterface ->thenInvalid('You must not use both `nelmio_api_doc.areas` and `nelmio_api_doc.routes` config options. Please update your config to only use `nelmio_api_doc.areas`.') ->end() ->children() - ->arrayNode('documentation') - ->useAttributeAsKey('key') - ->info('The documentation used as base') - ->example(['info' => ['title' => 'My App']]) - ->prototype('variable')->end() - ->end() ->arrayNode('areas') ->info('Filter the routes that are documented') ->defaultValue(['default' => ['path_patterns' => [], 'host_patterns' => []]]) @@ -77,6 +71,12 @@ final class Configuration implements ConfigurationInterface ->example(['^api\.']) ->prototype('scalar')->end() ->end() + ->arrayNode('documentation') + ->useAttributeAsKey('key') + ->info('The documentation used as base') + ->example(['info' => ['title' => 'My App']]) + ->prototype('variable')->end() + ->end() ->end() ->end() ->end() diff --git a/DependencyInjection/NelmioApiDocExtension.php b/DependencyInjection/NelmioApiDocExtension.php index 1522712..8f80212 100644 --- a/DependencyInjection/NelmioApiDocExtension.php +++ b/DependencyInjection/NelmioApiDocExtension.php @@ -13,6 +13,7 @@ namespace Nelmio\ApiDocBundle\DependencyInjection; use FOS\RestBundle\Controller\Annotations\ParamInterface; use Nelmio\ApiDocBundle\ApiDocGenerator; +use Nelmio\ApiDocBundle\Describer\ExternalDocDescriber; use Nelmio\ApiDocBundle\Describer\RouteDescriber; use Nelmio\ApiDocBundle\Describer\SwaggerPhpDescriber; use Nelmio\ApiDocBundle\ModelDescriber\BazingaHateoasModelDescriber; @@ -103,6 +104,16 @@ final class NelmioApiDocExtension extends Extension implements PrependExtensionI new Reference('logger'), ]) ->addTag(sprintf('nelmio_api_doc.describer.%s', $area), ['priority' => -200]); + + $container->register(sprintf('nelmio_api_doc.describers.config.%s', $area), ExternalDocDescriber::class) + ->setPublic(false) + ->setArguments([ + $config['areas'][$area]['documentation'], + true, + ]) + ->addTag(sprintf('nelmio_api_doc.describer.%s', $area), ['priority' => 1000]); + + $container->getDefinition(sprintf('nelmio_api_doc.describers.config.%s', $area))->replaceArgument(0, $config['areas'][$area]['documentation']); } $container->register('nelmio_api_doc.generator_locator') @@ -151,9 +162,6 @@ final class NelmioApiDocExtension extends Extension implements PrependExtensionI ]); } } - - // Import the base configuration - $container->getDefinition('nelmio_api_doc.describers.config')->replaceArgument(0, $config['documentation']); } private function findNameAliases(array $names, string $area): array diff --git a/Resources/config/services.xml b/Resources/config/services.xml index 1f4393a..17dcbed 100644 --- a/Resources/config/services.xml +++ b/Resources/config/services.xml @@ -26,7 +26,7 @@ - + diff --git a/Routing/FilteredRouteCollectionBuilder.php b/Routing/FilteredRouteCollectionBuilder.php index 0575c21..9c28a7e 100644 --- a/Routing/FilteredRouteCollectionBuilder.php +++ b/Routing/FilteredRouteCollectionBuilder.php @@ -26,6 +26,7 @@ final class FilteredRouteCollectionBuilder ->setDefaults([ 'path_patterns' => [], 'host_patterns' => [], + 'documentation' => [], ]) ->setAllowedTypes('path_patterns', 'string[]') ->setAllowedTypes('host_patterns', 'string[]') From f63ab23fe5bb1cf58c02a16df18c512d81b9fce1 Mon Sep 17 00:00:00 2001 From: bifidokk Date: Fri, 27 Jul 2018 09:44:19 +0500 Subject: [PATCH 02/14] Fix tests --- DependencyInjection/Configuration.php | 4 +- .../DependencyInjection/ConfigurationTest.php | 12 ++-- .../NelmioApiDocExtensionTest.php | 58 +++++++++++-------- Tests/Functional/SwaggerUiTest.php | 1 + Tests/Functional/TestKernel.php | 49 +++++++++++++--- 5 files changed, 86 insertions(+), 38 deletions(-) diff --git a/DependencyInjection/Configuration.php b/DependencyInjection/Configuration.php index 95405b9..c6596d1 100644 --- a/DependencyInjection/Configuration.php +++ b/DependencyInjection/Configuration.php @@ -42,10 +42,10 @@ final class Configuration implements ConfigurationInterface ->children() ->arrayNode('areas') ->info('Filter the routes that are documented') - ->defaultValue(['default' => ['path_patterns' => [], 'host_patterns' => []]]) + ->defaultValue(['default' => ['path_patterns' => [], 'host_patterns' => [], 'documentation' => []]]) ->beforeNormalization() ->ifTrue(function ($v) { - return 0 === count($v) || isset($v['path_patterns']) || isset($v['host_patterns']); + return 0 === count($v) || isset($v['path_patterns']) || isset($v['host_patterns']) || isset($v['documentation']); }) ->then(function ($v) { return ['default' => $v]; diff --git a/Tests/DependencyInjection/ConfigurationTest.php b/Tests/DependencyInjection/ConfigurationTest.php index a9d609a..6053f2c 100644 --- a/Tests/DependencyInjection/ConfigurationTest.php +++ b/Tests/DependencyInjection/ConfigurationTest.php @@ -20,18 +20,18 @@ class ConfigurationTest extends TestCase public function testDefaultArea() { $processor = new Processor(); - $config = $processor->processConfiguration(new Configuration(), [['areas' => ['path_patterns' => ['/foo']]]]); + $config = $processor->processConfiguration(new Configuration(), [['areas' => ['path_patterns' => ['/foo'], 'host_patterns' => [], 'documentation' => []]]]); - $this->assertSame(['default' => ['path_patterns' => ['/foo'], 'host_patterns' => []]], $config['areas']); + $this->assertSame(['default' => ['path_patterns' => ['/foo'], 'host_patterns' => [], 'documentation' => []]], $config['areas']); } public function testAreas() { $processor = new Processor(); $config = $processor->processConfiguration(new Configuration(), [['areas' => $areas = [ - 'default' => ['path_patterns' => ['/foo'], 'host_patterns' => []], - 'internal' => ['path_patterns' => ['/internal'], 'host_patterns' => ['^swagger\.']], - 'commercial' => ['path_patterns' => ['/internal'], 'host_patterns' => []], + 'default' => ['path_patterns' => ['/foo'], 'host_patterns' => [], 'documentation' => []], + 'internal' => ['path_patterns' => ['/internal'], 'host_patterns' => ['^swagger\.'], 'documentation' => []], + 'commercial' => ['path_patterns' => ['/internal'], 'host_patterns' => [], 'documentation' => []], ]]]); $this->assertSame($areas, $config['areas']); @@ -136,6 +136,6 @@ class ConfigurationTest extends TestCase $processor = new Processor(); $config = $processor->processConfiguration(new Configuration(), [['routes' => ['path_patterns' => ['/foo']]]]); - $this->assertSame(['default' => ['path_patterns' => ['/foo'], 'host_patterns' => []]], $config['areas']); + $this->assertSame(['default' => ['path_patterns' => ['/foo'], 'host_patterns' => [], 'documentation' => []]], $config['areas']); } } diff --git a/Tests/DependencyInjection/NelmioApiDocExtensionTest.php b/Tests/DependencyInjection/NelmioApiDocExtensionTest.php index a2b3a25..4f2714b 100644 --- a/Tests/DependencyInjection/NelmioApiDocExtensionTest.php +++ b/Tests/DependencyInjection/NelmioApiDocExtensionTest.php @@ -24,8 +24,8 @@ class NelmioApiDocExtensionTest extends TestCase $extension = new NelmioApiDocExtension(); $extension->load([[ 'areas' => [ - 'default' => ['path_patterns' => ['/foo'], 'host_patterns' => []], - 'commercial' => ['path_patterns' => ['/internal'], 'host_patterns' => []], + 'default' => ['path_patterns' => ['/foo'], 'host_patterns' => [], 'documentation' => []], + 'commercial' => ['path_patterns' => ['/internal'], 'host_patterns' => [], 'documentation' => []], ], 'models' => [ 'names' => [ @@ -92,33 +92,45 @@ class NelmioApiDocExtensionTest extends TestCase $extension = new NelmioApiDocExtension(); $extension->load([ [ - 'documentation' => [ - 'info' => [ - 'title' => 'API documentation', - 'description' => 'This is the api documentation, use it wisely', - ], - ], + 'areas' => [ + 'default' => [ + 'documentation' => [ + 'info' => [ + 'title' => 'API documentation', + 'description' => 'This is the api documentation, use it wisely', + ], + ], + ] + ] ], [ - 'documentation' => [ - 'tags' => [ - [ - 'name' => 'secured', - 'description' => 'Requires authentication', - ], - [ - 'name' => 'another', - 'description' => 'Another tag serving another purpose', + 'areas' => [ + 'default' => [ + 'documentation' => [ + 'tags' => [ + [ + 'name' => 'secured', + 'description' => 'Requires authentication', + ], + [ + 'name' => 'another', + 'description' => 'Another tag serving another purpose', + ], + ], ], ], ], ], [ - 'documentation' => [ - 'paths' => [ - '/api/v1/model' => [ - 'get' => [ - 'tags' => ['secured'], + 'areas' => [ + 'default' => [ + 'documentation' => [ + 'paths' => [ + '/api/v1/model' => [ + 'get' => [ + 'tags' => ['secured'], + ], + ], ], ], ], @@ -148,6 +160,6 @@ class NelmioApiDocExtensionTest extends TestCase ], ], ], - ], $container->getDefinition('nelmio_api_doc.describers.config')->getArgument(0)); + ], $container->getDefinition('nelmio_api_doc.describers.config.default')->getArgument(0)); } } diff --git a/Tests/Functional/SwaggerUiTest.php b/Tests/Functional/SwaggerUiTest.php index 798980d..125e062 100644 --- a/Tests/Functional/SwaggerUiTest.php +++ b/Tests/Functional/SwaggerUiTest.php @@ -59,6 +59,7 @@ class SwaggerUiTest extends WebTestCase $client = self::createClient(); $crawler = $client->request('GET', '/app_dev.php/docs.json'); + $response = $client->getResponse(); $this->assertEquals(200, $response->getStatusCode()); $this->assertEquals('application/json', $response->headers->get('Content-Type')); diff --git a/Tests/Functional/TestKernel.php b/Tests/Functional/TestKernel.php index a2d9d65..0590cf9 100644 --- a/Tests/Functional/TestKernel.php +++ b/Tests/Functional/TestKernel.php @@ -117,7 +117,47 @@ class TestKernel extends Kernel // Filter routes $c->loadFromExtension('nelmio_api_doc', [ - 'documentation' => [ + 'areas' => [ + 'default' => ['path_patterns' => ['^/api(?!/admin)'], 'host_patterns' => ['^api\.'], 'documentation' => [ + 'info' => [ + 'title' => 'My Test App', + ], + 'definitions' => [ + 'Test' => [ + 'type' => 'string', + ], + ], + 'parameters' => [ + 'test' => [ + 'name' => 'id', + 'in' => 'path', + 'required' => true, + ], + ], + ]], + 'test' => ['path_patterns' => ['^/test'], 'host_patterns' => ['^api-test\.'], 'documentation' => [ + 'info' => [ + 'title' => 'My Test App', + ], + 'definitions' => [ + 'Test' => [ + 'type' => 'string', + ], + ], + 'parameters' => [ + 'test' => [ + 'name' => 'id', + 'in' => 'path', + 'required' => true, + ], + ], + ]], + ], + ]); + } + + /* + * 'documentation' => [ 'info' => [ 'title' => 'My Test App', ], @@ -134,12 +174,7 @@ class TestKernel extends Kernel ], ], ], - 'areas' => [ - 'default' => ['path_patterns' => ['^/api(?!/admin)'], 'host_patterns' => ['^api\.']], - 'test' => ['path_patterns' => ['^/test'], 'host_patterns' => ['^api-test\.']], - ], - ]); - } + */ /** * {@inheritdoc} From 6bce4e0a8a130b95bbbd597924e70b466b892bee Mon Sep 17 00:00:00 2001 From: bifidokk Date: Fri, 27 Jul 2018 09:59:45 +0500 Subject: [PATCH 03/14] Fix cs --- Tests/Functional/TestKernel.php | 88 ++++++++++++++------------------- 1 file changed, 38 insertions(+), 50 deletions(-) diff --git a/Tests/Functional/TestKernel.php b/Tests/Functional/TestKernel.php index 0590cf9..58d6bc8 100644 --- a/Tests/Functional/TestKernel.php +++ b/Tests/Functional/TestKernel.php @@ -118,64 +118,52 @@ class TestKernel extends Kernel // Filter routes $c->loadFromExtension('nelmio_api_doc', [ 'areas' => [ - 'default' => ['path_patterns' => ['^/api(?!/admin)'], 'host_patterns' => ['^api\.'], 'documentation' => [ - 'info' => [ - 'title' => 'My Test App', - ], - 'definitions' => [ - 'Test' => [ - 'type' => 'string', + 'default' => [ + 'path_patterns' => ['^/api(?!/admin)'], + 'host_patterns' => ['^api\.'], + 'documentation' => [ + 'info' => [ + 'title' => 'My Test App', + ], + 'definitions' => [ + 'Test' => [ + 'type' => 'string', + ], + ], + 'parameters' => [ + 'test' => [ + 'name' => 'id', + 'in' => 'path', + 'required' => true, + ], ], ], - 'parameters' => [ - 'test' => [ - 'name' => 'id', - 'in' => 'path', - 'required' => true, + ], + 'test' => [ + 'path_patterns' => ['^/test'], + 'host_patterns' => ['^api-test\.'], + 'documentation' => [ + 'info' => [ + 'title' => 'My Test App', + ], + 'definitions' => [ + 'Test' => [ + 'type' => 'string', + ], + ], + 'parameters' => [ + 'test' => [ + 'name' => 'id', + 'in' => 'path', + 'required' => true, + ], ], ], - ]], - 'test' => ['path_patterns' => ['^/test'], 'host_patterns' => ['^api-test\.'], 'documentation' => [ - 'info' => [ - 'title' => 'My Test App', - ], - 'definitions' => [ - 'Test' => [ - 'type' => 'string', - ], - ], - 'parameters' => [ - 'test' => [ - 'name' => 'id', - 'in' => 'path', - 'required' => true, - ], - ], - ]], + ], ], ]); } - /* - * 'documentation' => [ - 'info' => [ - 'title' => 'My Test App', - ], - 'definitions' => [ - 'Test' => [ - 'type' => 'string', - ], - ], - 'parameters' => [ - 'test' => [ - 'name' => 'id', - 'in' => 'path', - 'required' => true, - ], - ], - ], - */ - /** * {@inheritdoc} */ From a9120e95bd96ed5ec8601fc20c877562feb08e9e Mon Sep 17 00:00:00 2001 From: Danil Date: Tue, 14 Aug 2018 12:30:38 +0500 Subject: [PATCH 04/14] default documentation --- DependencyInjection/Configuration.php | 9 ++- DependencyInjection/NelmioApiDocExtension.php | 22 +++++--- .../NelmioApiDocExtensionTest.php | 55 +++++++------------ Tests/Functional/SwaggerUiTest.php | 1 - Tests/Functional/TestKernel.php | 17 ++++++ 5 files changed, 60 insertions(+), 44 deletions(-) diff --git a/DependencyInjection/Configuration.php b/DependencyInjection/Configuration.php index c6596d1..1208533 100644 --- a/DependencyInjection/Configuration.php +++ b/DependencyInjection/Configuration.php @@ -40,6 +40,12 @@ final class Configuration implements ConfigurationInterface ->thenInvalid('You must not use both `nelmio_api_doc.areas` and `nelmio_api_doc.routes` config options. Please update your config to only use `nelmio_api_doc.areas`.') ->end() ->children() + ->arrayNode('documentation') + ->useAttributeAsKey('key') + ->info('The documentation used as base') + ->example(['info' => ['title' => 'My App']]) + ->prototype('variable')->end() + ->end() ->arrayNode('areas') ->info('Filter the routes that are documented') ->defaultValue(['default' => ['path_patterns' => [], 'host_patterns' => [], 'documentation' => []]]) @@ -73,7 +79,8 @@ final class Configuration implements ConfigurationInterface ->end() ->arrayNode('documentation') ->useAttributeAsKey('key') - ->info('The documentation used as base') + ->defaultValue([]) + ->info('The documentation used for area') ->example(['info' => ['title' => 'My App']]) ->prototype('variable')->end() ->end() diff --git a/DependencyInjection/NelmioApiDocExtension.php b/DependencyInjection/NelmioApiDocExtension.php index 8f80212..4f56b03 100644 --- a/DependencyInjection/NelmioApiDocExtension.php +++ b/DependencyInjection/NelmioApiDocExtension.php @@ -105,15 +105,18 @@ final class NelmioApiDocExtension extends Extension implements PrependExtensionI ]) ->addTag(sprintf('nelmio_api_doc.describer.%s', $area), ['priority' => -200]); - $container->register(sprintf('nelmio_api_doc.describers.config.%s', $area), ExternalDocDescriber::class) - ->setPublic(false) - ->setArguments([ - $config['areas'][$area]['documentation'], - true, - ]) - ->addTag(sprintf('nelmio_api_doc.describer.%s', $area), ['priority' => 1000]); + if (isset($config['areas'][$area]['documentation'])) { + $container->register(sprintf('nelmio_api_doc.describers.config.%s', $area), ExternalDocDescriber::class) + ->setPublic(false) + ->setArguments([ + $config['areas'][$area]['documentation'], + true, + ]) + ->addTag(sprintf('nelmio_api_doc.describer.%s', $area), ['priority' => 1000]); + + $container->getDefinition(sprintf('nelmio_api_doc.describers.config.%s', $area))->replaceArgument(0, $config['areas'][$area]['documentation']); + } - $container->getDefinition(sprintf('nelmio_api_doc.describers.config.%s', $area))->replaceArgument(0, $config['areas'][$area]['documentation']); } $container->register('nelmio_api_doc.generator_locator') @@ -162,6 +165,9 @@ final class NelmioApiDocExtension extends Extension implements PrependExtensionI ]); } } + + // Import the base configuration + $container->getDefinition('nelmio_api_doc.describers.config')->replaceArgument(0, $config['documentation']); } private function findNameAliases(array $names, string $area): array diff --git a/Tests/DependencyInjection/NelmioApiDocExtensionTest.php b/Tests/DependencyInjection/NelmioApiDocExtensionTest.php index 4f2714b..fd864e2 100644 --- a/Tests/DependencyInjection/NelmioApiDocExtensionTest.php +++ b/Tests/DependencyInjection/NelmioApiDocExtensionTest.php @@ -92,52 +92,39 @@ class NelmioApiDocExtensionTest extends TestCase $extension = new NelmioApiDocExtension(); $extension->load([ [ - 'areas' => [ - 'default' => [ - 'documentation' => [ - 'info' => [ - 'title' => 'API documentation', - 'description' => 'This is the api documentation, use it wisely', - ], - ], - ] - ] + 'documentation' => [ + 'info' => [ + 'title' => 'API documentation', + 'description' => 'This is the api documentation, use it wisely', + ], + ], ], [ - 'areas' => [ - 'default' => [ - 'documentation' => [ - 'tags' => [ - [ - 'name' => 'secured', - 'description' => 'Requires authentication', - ], - [ - 'name' => 'another', - 'description' => 'Another tag serving another purpose', - ], - ], + 'documentation' => [ + 'tags' => [ + [ + 'name' => 'secured', + 'description' => 'Requires authentication', + ], + [ + 'name' => 'another', + 'description' => 'Another tag serving another purpose', ], ], ], ], [ - 'areas' => [ - 'default' => [ - 'documentation' => [ - 'paths' => [ - '/api/v1/model' => [ - 'get' => [ - 'tags' => ['secured'], - ], - ], + 'documentation' => [ + 'paths' => [ + '/api/v1/model' => [ + 'get' => [ + 'tags' => ['secured'], ], ], ], ], ], ], $container); - $this->assertSame([ 'info' => [ 'title' => 'API documentation', @@ -160,6 +147,6 @@ class NelmioApiDocExtensionTest extends TestCase ], ], ], - ], $container->getDefinition('nelmio_api_doc.describers.config.default')->getArgument(0)); + ], $container->getDefinition('nelmio_api_doc.describers.config')->getArgument(0)); } } diff --git a/Tests/Functional/SwaggerUiTest.php b/Tests/Functional/SwaggerUiTest.php index 125e062..798980d 100644 --- a/Tests/Functional/SwaggerUiTest.php +++ b/Tests/Functional/SwaggerUiTest.php @@ -59,7 +59,6 @@ class SwaggerUiTest extends WebTestCase $client = self::createClient(); $crawler = $client->request('GET', '/app_dev.php/docs.json'); - $response = $client->getResponse(); $this->assertEquals(200, $response->getStatusCode()); $this->assertEquals('application/json', $response->headers->get('Content-Type')); diff --git a/Tests/Functional/TestKernel.php b/Tests/Functional/TestKernel.php index 58d6bc8..2d687c6 100644 --- a/Tests/Functional/TestKernel.php +++ b/Tests/Functional/TestKernel.php @@ -117,6 +117,23 @@ class TestKernel extends Kernel // Filter routes $c->loadFromExtension('nelmio_api_doc', [ + 'documentation' => [ + 'info' => [ + 'title' => 'My Test App', + ], + 'definitions' => [ + 'Test' => [ + 'type' => 'string', + ], + ], + 'parameters' => [ + 'test' => [ + 'name' => 'id', + 'in' => 'path', + 'required' => true, + ], + ], + ], 'areas' => [ 'default' => [ 'path_patterns' => ['^/api(?!/admin)'], From e1654628a63c8adee4b5fa3adf3af4b225956133 Mon Sep 17 00:00:00 2001 From: Danil Date: Tue, 14 Aug 2018 15:09:29 +0500 Subject: [PATCH 05/14] Fix default documentation --- DependencyInjection/NelmioApiDocExtension.php | 23 ++++++++----------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/DependencyInjection/NelmioApiDocExtension.php b/DependencyInjection/NelmioApiDocExtension.php index 4f56b03..3e1fe8d 100644 --- a/DependencyInjection/NelmioApiDocExtension.php +++ b/DependencyInjection/NelmioApiDocExtension.php @@ -105,18 +105,16 @@ final class NelmioApiDocExtension extends Extension implements PrependExtensionI ]) ->addTag(sprintf('nelmio_api_doc.describer.%s', $area), ['priority' => -200]); - if (isset($config['areas'][$area]['documentation'])) { - $container->register(sprintf('nelmio_api_doc.describers.config.%s', $area), ExternalDocDescriber::class) - ->setPublic(false) - ->setArguments([ - $config['areas'][$area]['documentation'], - true, - ]) - ->addTag(sprintf('nelmio_api_doc.describer.%s', $area), ['priority' => 1000]); - - $container->getDefinition(sprintf('nelmio_api_doc.describers.config.%s', $area))->replaceArgument(0, $config['areas'][$area]['documentation']); - } + $documentation = count($config['areas'][$area]['documentation']) ? $config['areas'][$area]['documentation'] : $config['documentation']; + $container->register(sprintf('nelmio_api_doc.describers.config.%s', $area), ExternalDocDescriber::class) + ->setPublic(false) + ->setArguments([ + $documentation, + true, + ]) + ->addTag(sprintf('nelmio_api_doc.describer.%s', $area), ['priority' => 1000]); + $container->getDefinition(sprintf('nelmio_api_doc.describers.config.%s', $area))->replaceArgument(0, $documentation); } $container->register('nelmio_api_doc.generator_locator') @@ -165,9 +163,6 @@ final class NelmioApiDocExtension extends Extension implements PrependExtensionI ]); } } - - // Import the base configuration - $container->getDefinition('nelmio_api_doc.describers.config')->replaceArgument(0, $config['documentation']); } private function findNameAliases(array $names, string $area): array From f4edb17ffb5955587a30e087d7ee0e5ee119ddec Mon Sep 17 00:00:00 2001 From: Danil Date: Tue, 25 Sep 2018 16:42:56 +0500 Subject: [PATCH 06/14] Fix extension test --- .../NelmioApiDocExtensionTest.php | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Tests/DependencyInjection/NelmioApiDocExtensionTest.php b/Tests/DependencyInjection/NelmioApiDocExtensionTest.php index fd864e2..1fc84a6 100644 --- a/Tests/DependencyInjection/NelmioApiDocExtensionTest.php +++ b/Tests/DependencyInjection/NelmioApiDocExtensionTest.php @@ -87,11 +87,20 @@ class NelmioApiDocExtensionTest extends TestCase public function testMergesRootKeysFromMultipleConfigurations() { + /** + * areas: + default: + path_patterns: '%client_api_regexp_filter%' + host_patterns: ['%domain.client%'] + */ $container = new ContainerBuilder(); $container->setParameter('kernel.bundles', []); $extension = new NelmioApiDocExtension(); $extension->load([ [ + 'areas' => [ + 'default' => [] + ], 'documentation' => [ 'info' => [ 'title' => 'API documentation', @@ -125,6 +134,7 @@ class NelmioApiDocExtensionTest extends TestCase ], ], ], $container); + $this->assertSame([ 'info' => [ 'title' => 'API documentation', @@ -147,6 +157,6 @@ class NelmioApiDocExtensionTest extends TestCase ], ], ], - ], $container->getDefinition('nelmio_api_doc.describers.config')->getArgument(0)); + ], $container->getDefinition('nelmio_api_doc.describers.config.default')->getArgument(0)); } } From 77f409180557cdb540bd61286fd401c4b9524018 Mon Sep 17 00:00:00 2001 From: Danil Date: Tue, 25 Sep 2018 16:44:59 +0500 Subject: [PATCH 07/14] Fix code style --- Tests/DependencyInjection/NelmioApiDocExtensionTest.php | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/Tests/DependencyInjection/NelmioApiDocExtensionTest.php b/Tests/DependencyInjection/NelmioApiDocExtensionTest.php index 1fc84a6..374d968 100644 --- a/Tests/DependencyInjection/NelmioApiDocExtensionTest.php +++ b/Tests/DependencyInjection/NelmioApiDocExtensionTest.php @@ -87,19 +87,13 @@ class NelmioApiDocExtensionTest extends TestCase public function testMergesRootKeysFromMultipleConfigurations() { - /** - * areas: - default: - path_patterns: '%client_api_regexp_filter%' - host_patterns: ['%domain.client%'] - */ $container = new ContainerBuilder(); $container->setParameter('kernel.bundles', []); $extension = new NelmioApiDocExtension(); $extension->load([ [ 'areas' => [ - 'default' => [] + 'default' => [], ], 'documentation' => [ 'info' => [ From 8692c1245e221cb919f614f634fd8312d888a837 Mon Sep 17 00:00:00 2001 From: Danil Date: Fri, 5 Oct 2018 10:36:48 +0500 Subject: [PATCH 08/14] Pr fixes --- DependencyInjection/NelmioApiDocExtension.php | 5 ++++- Resources/config/services.xml | 2 +- Tests/DependencyInjection/NelmioApiDocExtensionTest.php | 3 --- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/DependencyInjection/NelmioApiDocExtension.php b/DependencyInjection/NelmioApiDocExtension.php index 3e1fe8d..8dec3a7 100644 --- a/DependencyInjection/NelmioApiDocExtension.php +++ b/DependencyInjection/NelmioApiDocExtension.php @@ -112,7 +112,7 @@ final class NelmioApiDocExtension extends Extension implements PrependExtensionI $documentation, true, ]) - ->addTag(sprintf('nelmio_api_doc.describer.%s', $area), ['priority' => 1000]); + ->addTag(sprintf('nelmio_api_doc.describer.%s', $area), ['priority' => 990]); $container->getDefinition(sprintf('nelmio_api_doc.describers.config.%s', $area))->replaceArgument(0, $documentation); } @@ -163,6 +163,9 @@ final class NelmioApiDocExtension extends Extension implements PrependExtensionI ]); } } + + // Import the base configuration + $container->getDefinition('nelmio_api_doc.describers.config')->replaceArgument(0, $config['documentation']); } private function findNameAliases(array $names, string $area): array diff --git a/Resources/config/services.xml b/Resources/config/services.xml index 17dcbed..1f4393a 100644 --- a/Resources/config/services.xml +++ b/Resources/config/services.xml @@ -26,7 +26,7 @@ - + diff --git a/Tests/DependencyInjection/NelmioApiDocExtensionTest.php b/Tests/DependencyInjection/NelmioApiDocExtensionTest.php index 374d968..9bf6cca 100644 --- a/Tests/DependencyInjection/NelmioApiDocExtensionTest.php +++ b/Tests/DependencyInjection/NelmioApiDocExtensionTest.php @@ -92,9 +92,6 @@ class NelmioApiDocExtensionTest extends TestCase $extension = new NelmioApiDocExtension(); $extension->load([ [ - 'areas' => [ - 'default' => [], - ], 'documentation' => [ 'info' => [ 'title' => 'API documentation', From 8fad5a40257206314adb18cb508c2341b1412c42 Mon Sep 17 00:00:00 2001 From: Danil Date: Fri, 5 Oct 2018 15:14:36 +0500 Subject: [PATCH 09/14] Remove documentation from route builder --- DependencyInjection/NelmioApiDocExtension.php | 2 ++ Routing/FilteredRouteCollectionBuilder.php | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/DependencyInjection/NelmioApiDocExtension.php b/DependencyInjection/NelmioApiDocExtension.php index 8dec3a7..0185ee4 100644 --- a/DependencyInjection/NelmioApiDocExtension.php +++ b/DependencyInjection/NelmioApiDocExtension.php @@ -72,6 +72,8 @@ final class NelmioApiDocExtension extends Extension implements PrependExtensionI new TaggedIteratorArgument('nelmio_api_doc.model_describer'), ]); + unset($areaConfig['documentation']); + if (0 === count($areaConfig['path_patterns']) && 0 === count($areaConfig['host_patterns'])) { $container->setDefinition(sprintf('nelmio_api_doc.routes.%s', $area), $routesDefinition) ->setPublic(false); diff --git a/Routing/FilteredRouteCollectionBuilder.php b/Routing/FilteredRouteCollectionBuilder.php index 9c28a7e..0575c21 100644 --- a/Routing/FilteredRouteCollectionBuilder.php +++ b/Routing/FilteredRouteCollectionBuilder.php @@ -26,7 +26,6 @@ final class FilteredRouteCollectionBuilder ->setDefaults([ 'path_patterns' => [], 'host_patterns' => [], - 'documentation' => [], ]) ->setAllowedTypes('path_patterns', 'string[]') ->setAllowedTypes('host_patterns', 'string[]') From f6ca599b23abdd1864002402c595bd97090ba345 Mon Sep 17 00:00:00 2001 From: Guilhem N Date: Fri, 5 Oct 2018 16:35:25 +0200 Subject: [PATCH 10/14] Fixes --- DependencyInjection/NelmioApiDocExtension.php | 34 ++++++++----------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/DependencyInjection/NelmioApiDocExtension.php b/DependencyInjection/NelmioApiDocExtension.php index 0185ee4..7a3c23b 100644 --- a/DependencyInjection/NelmioApiDocExtension.php +++ b/DependencyInjection/NelmioApiDocExtension.php @@ -72,22 +72,6 @@ final class NelmioApiDocExtension extends Extension implements PrependExtensionI new TaggedIteratorArgument('nelmio_api_doc.model_describer'), ]); - unset($areaConfig['documentation']); - - if (0 === count($areaConfig['path_patterns']) && 0 === count($areaConfig['host_patterns'])) { - $container->setDefinition(sprintf('nelmio_api_doc.routes.%s', $area), $routesDefinition) - ->setPublic(false); - } else { - $container->register(sprintf('nelmio_api_doc.routes.%s', $area), RouteCollection::class) - ->setPublic(false) - ->setFactory([ - (new Definition(FilteredRouteCollectionBuilder::class)) - ->addArgument($areaConfig), - 'filter', - ]) - ->addArgument($routesDefinition); - } - $container->register(sprintf('nelmio_api_doc.describers.route.%s', $area), RouteDescriber::class) ->setPublic(false) ->setArguments([ @@ -107,16 +91,28 @@ final class NelmioApiDocExtension extends Extension implements PrependExtensionI ]) ->addTag(sprintf('nelmio_api_doc.describer.%s', $area), ['priority' => -200]); - $documentation = count($config['areas'][$area]['documentation']) ? $config['areas'][$area]['documentation'] : $config['documentation']; $container->register(sprintf('nelmio_api_doc.describers.config.%s', $area), ExternalDocDescriber::class) ->setPublic(false) ->setArguments([ - $documentation, + $areaConfig['documentation'], true, ]) ->addTag(sprintf('nelmio_api_doc.describer.%s', $area), ['priority' => 990]); - $container->getDefinition(sprintf('nelmio_api_doc.describers.config.%s', $area))->replaceArgument(0, $documentation); + unset($areaConfig['documentation']); + if (0 === count($areaConfig['path_patterns']) && 0 === count($areaConfig['host_patterns'])) { + $container->setDefinition(sprintf('nelmio_api_doc.routes.%s', $area), $routesDefinition) + ->setPublic(false); + } else { + $container->register(sprintf('nelmio_api_doc.routes.%s', $area), RouteCollection::class) + ->setPublic(false) + ->setFactory([ + (new Definition(FilteredRouteCollectionBuilder::class)) + ->addArgument($areaConfig), + 'filter', + ]) + ->addArgument($routesDefinition); + } } $container->register('nelmio_api_doc.generator_locator') From 635aa0f997094597ee983a9ad4352d2801d5b17e Mon Sep 17 00:00:00 2001 From: Danil Date: Fri, 5 Oct 2018 20:03:03 +0500 Subject: [PATCH 11/14] Fix test --- Tests/DependencyInjection/NelmioApiDocExtensionTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/DependencyInjection/NelmioApiDocExtensionTest.php b/Tests/DependencyInjection/NelmioApiDocExtensionTest.php index 9bf6cca..563e1cc 100644 --- a/Tests/DependencyInjection/NelmioApiDocExtensionTest.php +++ b/Tests/DependencyInjection/NelmioApiDocExtensionTest.php @@ -148,6 +148,6 @@ class NelmioApiDocExtensionTest extends TestCase ], ], ], - ], $container->getDefinition('nelmio_api_doc.describers.config.default')->getArgument(0)); + ], $container->getDefinition('nelmio_api_doc.describers.config')->getArgument(0)); } } From e6aa97c43289edc3e1d0fffcb6d11c88653e6a6c Mon Sep 17 00:00:00 2001 From: Guilhem N Date: Sat, 6 Oct 2018 13:54:32 +0200 Subject: [PATCH 12/14] Update ConfigurationTest.php --- Tests/DependencyInjection/ConfigurationTest.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Tests/DependencyInjection/ConfigurationTest.php b/Tests/DependencyInjection/ConfigurationTest.php index 6053f2c..9297412 100644 --- a/Tests/DependencyInjection/ConfigurationTest.php +++ b/Tests/DependencyInjection/ConfigurationTest.php @@ -20,7 +20,7 @@ class ConfigurationTest extends TestCase public function testDefaultArea() { $processor = new Processor(); - $config = $processor->processConfiguration(new Configuration(), [['areas' => ['path_patterns' => ['/foo'], 'host_patterns' => [], 'documentation' => []]]]); + $config = $processor->processConfiguration(new Configuration(), [['areas' => ['path_patterns' => ['/foo']]]]); $this->assertSame(['default' => ['path_patterns' => ['/foo'], 'host_patterns' => [], 'documentation' => []]], $config['areas']); } @@ -29,9 +29,9 @@ class ConfigurationTest extends TestCase { $processor = new Processor(); $config = $processor->processConfiguration(new Configuration(), [['areas' => $areas = [ - 'default' => ['path_patterns' => ['/foo'], 'host_patterns' => [], 'documentation' => []], - 'internal' => ['path_patterns' => ['/internal'], 'host_patterns' => ['^swagger\.'], 'documentation' => []], - 'commercial' => ['path_patterns' => ['/internal'], 'host_patterns' => [], 'documentation' => []], + 'default' => ['path_patterns' => ['/foo'], 'documentation' => []], + 'internal' => ['path_patterns' => ['/internal'], 'host_patterns' => ['^swagger\.']], + 'commercial' => ['path_patterns' => ['/internal'], 'host_patterns' => []], ]]]); $this->assertSame($areas, $config['areas']); From 8ec31194a25eacc873c9b50a8cd31d15bbe826eb Mon Sep 17 00:00:00 2001 From: Guilhem N Date: Sat, 6 Oct 2018 13:55:32 +0200 Subject: [PATCH 13/14] Update NelmioApiDocExtensionTest.php --- Tests/DependencyInjection/NelmioApiDocExtensionTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Tests/DependencyInjection/NelmioApiDocExtensionTest.php b/Tests/DependencyInjection/NelmioApiDocExtensionTest.php index 563e1cc..5ed9c46 100644 --- a/Tests/DependencyInjection/NelmioApiDocExtensionTest.php +++ b/Tests/DependencyInjection/NelmioApiDocExtensionTest.php @@ -24,8 +24,8 @@ class NelmioApiDocExtensionTest extends TestCase $extension = new NelmioApiDocExtension(); $extension->load([[ 'areas' => [ - 'default' => ['path_patterns' => ['/foo'], 'host_patterns' => [], 'documentation' => []], - 'commercial' => ['path_patterns' => ['/internal'], 'host_patterns' => [], 'documentation' => []], + 'default' => ['path_patterns' => ['/foo']], + 'commercial' => ['path_patterns' => ['/internal']], ], 'models' => [ 'names' => [ From 97b722f97def3de43bee65f6119a42c8128fc233 Mon Sep 17 00:00:00 2001 From: Guilhem Niot Date: Sat, 6 Oct 2018 14:42:47 +0200 Subject: [PATCH 14/14] Last fixes --- DependencyInjection/NelmioApiDocExtension.php | 2 +- .../DependencyInjection/ConfigurationTest.php | 6 ++-- Tests/Functional/FunctionalTest.php | 3 +- Tests/Functional/SwaggerUiTest.php | 1 + Tests/Functional/TestKernel.php | 31 +------------------ Tests/Functional/WebTestCase.php | 4 +-- 6 files changed, 10 insertions(+), 37 deletions(-) diff --git a/DependencyInjection/NelmioApiDocExtension.php b/DependencyInjection/NelmioApiDocExtension.php index 7a3c23b..0bcb69d 100644 --- a/DependencyInjection/NelmioApiDocExtension.php +++ b/DependencyInjection/NelmioApiDocExtension.php @@ -65,7 +65,7 @@ final class NelmioApiDocExtension extends Extension implements PrependExtensionI $nameAliases = $this->findNameAliases($config['models']['names'], $area); $container->register(sprintf('nelmio_api_doc.generator.%s', $area), ApiDocGenerator::class) - ->setPublic(false) + ->setPublic(true) ->addMethodCall('setAlternativeNames', [$nameAliases]) ->setArguments([ new TaggedIteratorArgument(sprintf('nelmio_api_doc.describer.%s', $area)), diff --git a/Tests/DependencyInjection/ConfigurationTest.php b/Tests/DependencyInjection/ConfigurationTest.php index 9297412..76d67f5 100644 --- a/Tests/DependencyInjection/ConfigurationTest.php +++ b/Tests/DependencyInjection/ConfigurationTest.php @@ -29,9 +29,9 @@ class ConfigurationTest extends TestCase { $processor = new Processor(); $config = $processor->processConfiguration(new Configuration(), [['areas' => $areas = [ - 'default' => ['path_patterns' => ['/foo'], 'documentation' => []], - 'internal' => ['path_patterns' => ['/internal'], 'host_patterns' => ['^swagger\.']], - 'commercial' => ['path_patterns' => ['/internal'], 'host_patterns' => []], + 'default' => ['path_patterns' => ['/foo'], 'host_patterns' => [], 'documentation' => []], + 'internal' => ['path_patterns' => ['/internal'], 'host_patterns' => ['^swagger\.'], 'documentation' => []], + 'commercial' => ['path_patterns' => ['/internal'], 'host_patterns' => [], 'documentation' => []], ]]]); $this->assertSame($areas, $config['areas']); diff --git a/Tests/Functional/FunctionalTest.php b/Tests/Functional/FunctionalTest.php index 97823e4..dcb6453 100644 --- a/Tests/Functional/FunctionalTest.php +++ b/Tests/Functional/FunctionalTest.php @@ -19,7 +19,8 @@ class FunctionalTest extends WebTestCase { public function testConfiguredDocumentation() { - $this->assertEquals('My Test App', $this->getSwaggerDefinition()->getInfo()->getTitle()); + $this->assertEquals('My Default App', $this->getSwaggerDefinition()->getInfo()->getTitle()); + $this->assertEquals('My Test App', $this->getSwaggerDefinition('test')->getInfo()->getTitle()); } public function testUndocumentedAction() diff --git a/Tests/Functional/SwaggerUiTest.php b/Tests/Functional/SwaggerUiTest.php index 798980d..67f97a9 100644 --- a/Tests/Functional/SwaggerUiTest.php +++ b/Tests/Functional/SwaggerUiTest.php @@ -41,6 +41,7 @@ class SwaggerUiTest extends WebTestCase yield ['/docs', 'default', $expected]; // Api-platform documentation + $expected['info']['title'] = 'My Test App'; $expected['paths'] = [ '/api/dummies' => $expected['paths']['/api/dummies'], '/api/foo' => $expected['paths']['/api/foo'], diff --git a/Tests/Functional/TestKernel.php b/Tests/Functional/TestKernel.php index 2d687c6..133cb57 100644 --- a/Tests/Functional/TestKernel.php +++ b/Tests/Functional/TestKernel.php @@ -119,7 +119,7 @@ class TestKernel extends Kernel $c->loadFromExtension('nelmio_api_doc', [ 'documentation' => [ 'info' => [ - 'title' => 'My Test App', + 'title' => 'My Default App', ], 'definitions' => [ 'Test' => [ @@ -138,23 +138,6 @@ class TestKernel extends Kernel 'default' => [ 'path_patterns' => ['^/api(?!/admin)'], 'host_patterns' => ['^api\.'], - 'documentation' => [ - 'info' => [ - 'title' => 'My Test App', - ], - 'definitions' => [ - 'Test' => [ - 'type' => 'string', - ], - ], - 'parameters' => [ - 'test' => [ - 'name' => 'id', - 'in' => 'path', - 'required' => true, - ], - ], - ], ], 'test' => [ 'path_patterns' => ['^/test'], @@ -163,18 +146,6 @@ class TestKernel extends Kernel 'info' => [ 'title' => 'My Test App', ], - 'definitions' => [ - 'Test' => [ - 'type' => 'string', - ], - ], - 'parameters' => [ - 'test' => [ - 'name' => 'id', - 'in' => 'path', - 'required' => true, - ], - ], ], ], ], diff --git a/Tests/Functional/WebTestCase.php b/Tests/Functional/WebTestCase.php index 045a7b1..14c2e5d 100644 --- a/Tests/Functional/WebTestCase.php +++ b/Tests/Functional/WebTestCase.php @@ -22,11 +22,11 @@ class WebTestCase extends BaseWebTestCase return new TestKernel(); } - protected function getSwaggerDefinition() + protected function getSwaggerDefinition($area = 'default') { static::createClient([], ['HTTP_HOST' => 'api.example.com']); - return static::$kernel->getContainer()->get('nelmio_api_doc.generator')->generate(); + return static::$kernel->getContainer()->get(sprintf('nelmio_api_doc.generator.%s', $area))->generate(); } protected function getModel($name): Schema