diff --git a/Tests/Describer/RouteDescriberTest.php b/Tests/Describer/RouteDescriberTest.php index d9cf2b4..b21baaf 100644 --- a/Tests/Describer/RouteDescriberTest.php +++ b/Tests/Describer/RouteDescriberTest.php @@ -41,11 +41,20 @@ class RouteDescriberTest extends AbstractDescriberTest $this->routes = new RouteCollection(); $this->describer = new RouteDescriber( $this->routes, - new ControllerReflector( - new Container(), - $this->createMock(ControllerNameParser::class) - ), + $this->createControllerReflector(), [$this->routeDescriber] ); } + + protected function createControllerReflector(): ControllerReflector + { + if (class_exists(ControllerNameParser::class)) { + return new ControllerReflector( + new Container(), + $this->createMock(ControllerNameParser::class) + ); + } + + return new ControllerReflector(new Container()); + } } diff --git a/Tests/Functional/BazingaFunctionalTest.php b/Tests/Functional/BazingaFunctionalTest.php index 2432cd9..beab5fd 100644 --- a/Tests/Functional/BazingaFunctionalTest.php +++ b/Tests/Functional/BazingaFunctionalTest.php @@ -15,6 +15,13 @@ use Hateoas\Configuration\Embedded; class BazingaFunctionalTest extends WebTestCase { + protected function setUp() + { + parent::setUp(); + + static::createClient([], ['HTTP_HOST' => 'api.example.com']); + } + public function testModelComplexDocumentationBazinga() { $this->assertEquals([ diff --git a/Tests/Functional/FunctionalTest.php b/Tests/Functional/FunctionalTest.php index 282a34d..c3ea09a 100644 --- a/Tests/Functional/FunctionalTest.php +++ b/Tests/Functional/FunctionalTest.php @@ -15,6 +15,13 @@ use EXSyst\Component\Swagger\Tag; class FunctionalTest extends WebTestCase { + protected function setUp() + { + parent::setUp(); + + static::createClient([], ['HTTP_HOST' => 'api.example.com']); + } + public function testConfiguredDocumentation() { $this->assertEquals('My Default App', $this->getSwaggerDefinition()->getInfo()->getTitle()); diff --git a/Tests/Functional/JMSFunctionalTest.php b/Tests/Functional/JMSFunctionalTest.php index 431609e..a3b54e8 100644 --- a/Tests/Functional/JMSFunctionalTest.php +++ b/Tests/Functional/JMSFunctionalTest.php @@ -13,6 +13,13 @@ namespace Nelmio\ApiDocBundle\Tests\Functional; class JMSFunctionalTest extends WebTestCase { + protected function setUp() + { + parent::setUp(); + + static::createClient([], ['HTTP_HOST' => 'api.example.com']); + } + public function testModelPictureDocumentation() { $this->assertEquals([ diff --git a/Tests/Functional/SwaggerUiTest.php b/Tests/Functional/SwaggerUiTest.php index 86f9256..cd29e7a 100644 --- a/Tests/Functional/SwaggerUiTest.php +++ b/Tests/Functional/SwaggerUiTest.php @@ -11,36 +11,46 @@ namespace Nelmio\ApiDocBundle\Tests\Functional; +use Symfony\Bundle\FrameworkBundle\KernelBrowser; + class SwaggerUiTest extends WebTestCase { - protected static function createClient(array $options = [], array $server = []) + /** + * @var KernelBrowser + */ + private $client; + + protected function setUp() { - return parent::createClient([], $server + ['HTTP_HOST' => 'api.example.com', 'PHP_SELF' => '/app_dev.php/docs', 'SCRIPT_FILENAME' => '/var/www/app/web/app_dev.php']); + 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']); } - /** - * @dataProvider areaProvider - */ - public function testSwaggerUi($url, $area, $expected) + public function testSwaggerUi() { - $client = self::createClient(); - $crawler = $client->request('GET', '/app_dev.php'.$url); + $crawler = $this->client->request('GET', '/app_dev.php/docs'); - $response = $client->getResponse(); + $response = $this->client->getResponse(); $this->assertEquals(200, $response->getStatusCode()); $this->assertEquals('text/html; charset=UTF-8', $response->headers->get('Content-Type')); + $expected = $this->getSwaggerDefinition()->toArray(); + $expected['basePath'] = '/app_dev.php'; + $this->assertEquals($expected, json_decode($crawler->filterXPath('//script[@id="swagger-data"]')->text(), true)['spec']); } - public function areaProvider() + public function testApiPlatformSwaggerUi() { + $crawler = $this->client->request('GET', '/app_dev.php/docs/test'); + + $response = $this->client->getResponse(); + $this->assertEquals(200, $response->getStatusCode()); + $this->assertEquals('text/html; charset=UTF-8', $response->headers->get('Content-Type')); + $expected = $this->getSwaggerDefinition()->toArray(); $expected['basePath'] = '/app_dev.php'; - - yield ['/docs', 'default', $expected]; - - // Api-platform documentation $expected['info']['title'] = 'My Test App'; $expected['paths'] = [ '/api/dummies' => $expected['paths']['/api/dummies'], @@ -57,15 +67,14 @@ class SwaggerUiTest extends WebTestCase 'BazingaUser_grouped' => ['type' => 'object'], ]; - yield ['/docs/test', 'test', $expected]; + $this->assertEquals($expected, json_decode($crawler->filterXPath('//script[@id="swagger-data"]')->text(), true)['spec']); } public function testJsonDocs() { - $client = self::createClient(); - $client->request('GET', '/app_dev.php/docs.json'); + $this->client->request('GET', '/app_dev.php/docs.json'); - $response = $client->getResponse(); + $response = $this->client->getResponse(); $this->assertEquals(200, $response->getStatusCode()); $this->assertEquals('application/json', $response->headers->get('Content-Type')); diff --git a/Tests/Functional/WebTestCase.php b/Tests/Functional/WebTestCase.php index 14c2e5d..24d371e 100644 --- a/Tests/Functional/WebTestCase.php +++ b/Tests/Functional/WebTestCase.php @@ -24,8 +24,6 @@ class WebTestCase extends BaseWebTestCase protected function getSwaggerDefinition($area = 'default') { - static::createClient([], ['HTTP_HOST' => 'api.example.com']); - return static::$kernel->getContainer()->get(sprintf('nelmio_api_doc.generator.%s', $area))->generate(); } diff --git a/Tests/Routing/FilteredRouteCollectionBuilderTest.php b/Tests/Routing/FilteredRouteCollectionBuilderTest.php index 8b2390a..f8d01c1 100644 --- a/Tests/Routing/FilteredRouteCollectionBuilderTest.php +++ b/Tests/Routing/FilteredRouteCollectionBuilderTest.php @@ -47,10 +47,7 @@ class FilteredRouteCollectionBuilderTest extends TestCase $routeBuilder = new FilteredRouteCollectionBuilder( new AnnotationReader(), - new ControllerReflector( - new Container(), - $this->createMock(ControllerNameParser::class) - ), + $this->createControllerReflector(), 'areaName', $options ); @@ -77,10 +74,7 @@ class FilteredRouteCollectionBuilderTest extends TestCase $routeBuilder = new FilteredRouteCollectionBuilder( new AnnotationReader(), - new ControllerReflector( - new Container(), - $this->createMock(ControllerNameParser::class) - ), + $this->createControllerReflector(), 'areaName', $pathPattern ); @@ -98,10 +92,7 @@ class FilteredRouteCollectionBuilderTest extends TestCase { new FilteredRouteCollectionBuilder( new AnnotationReader(), - new ControllerReflector( - new Container(), - $this->createMock(ControllerNameParser::class) - ), + $this->createControllerReflector(), 'areaName', $options ); @@ -154,10 +145,7 @@ class FilteredRouteCollectionBuilderTest extends TestCase $routeBuilder = new FilteredRouteCollectionBuilder( new AnnotationReader(), - new ControllerReflector( - new Container(), - $this->createMock(ControllerNameParser::class) - ), + $this->createControllerReflector(), 'area', $options ); @@ -236,10 +224,7 @@ class FilteredRouteCollectionBuilderTest extends TestCase $routeBuilder = new FilteredRouteCollectionBuilder( new AnnotationReader(), - new ControllerReflector( - new Container(), - $this->createMock(ControllerNameParser::class) - ), + $this->createControllerReflector(), 'areaName', $options ); @@ -259,4 +244,16 @@ class FilteredRouteCollectionBuilderTest extends TestCase ['r6_non_matching_path_and_non_matching_host', new Route('/admin/bar/action1', [], [], [], 'www.example.com'), ['path_patterns' => ['^/api/'], 'host_patterns' => ['^api\.ex']]], ]; } + + private function createControllerReflector(): ControllerReflector + { + if (class_exists(ControllerNameParser::class)) { + return new ControllerReflector( + new Container(), + $this->createMock(ControllerNameParser::class) + ); + } + + return new ControllerReflector(new Container()); + } }