diff --git a/src/Symfony/Bundle/SwaggerUi/SwaggerUiProvider.php b/src/Symfony/Bundle/SwaggerUi/SwaggerUiProvider.php index e93914b3e8a..773d1daec33 100644 --- a/src/Symfony/Bundle/SwaggerUi/SwaggerUiProvider.php +++ b/src/Symfony/Bundle/SwaggerUi/SwaggerUiProvider.php @@ -72,6 +72,6 @@ class: OpenApi::class, // save our operation $request->attributes->set('_api_operation', $swaggerUiOperation); - return $this->openApiFactory->__invoke($context); + return $this->openApiFactory->__invoke(['base_url' => $request->getBaseUrl() ?: '/']); } } diff --git a/tests/Symfony/Bundle/SwaggerUi/SwaggerUiProviderTest.php b/tests/Symfony/Bundle/SwaggerUi/SwaggerUiProviderTest.php new file mode 100644 index 00000000000..0f88a4af50f --- /dev/null +++ b/tests/Symfony/Bundle/SwaggerUi/SwaggerUiProviderTest.php @@ -0,0 +1,42 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace ApiPlatform\Tests\Symfony\Bundle\SwaggerUi; + +use ApiPlatform\Documentation\Documentation; +use ApiPlatform\Metadata\Get; +use ApiPlatform\OpenApi\Factory\OpenApiFactoryInterface; +use ApiPlatform\OpenApi\Model\Info; +use ApiPlatform\OpenApi\Model\Paths; +use ApiPlatform\OpenApi\OpenApi; +use ApiPlatform\State\ProviderInterface; +use ApiPlatform\Symfony\Bundle\SwaggerUi\SwaggerUiProvider; +use PHPUnit\Framework\TestCase; +use Symfony\Component\HttpFoundation\ParameterBag; +use Symfony\Component\HttpFoundation\Request; + +class SwaggerUiProviderTest extends TestCase +{ + public function testProvideWithBaseUrl(): void + { + $openapiFactory = $this->createMock(OpenApiFactoryInterface::class); + $request = $this->createStub(Request::class); + $request->attributes = new ParameterBag(); + $request->method('getRequestFormat')->willReturn('html'); + $request->method('getBaseUrl')->willReturn('test'); + $decorated = $this->createStub(ProviderInterface::class); + $provider = new SwaggerUiProvider($decorated, $openapiFactory); + $openapiFactory->expects($this->once())->method('__invoke')->with(['base_url' => 'test'])->willReturn(new OpenApi(new Info('test', '1'), [], new Paths())); + $provider->provide(new Get(class: Documentation::class), [], ['request' => $request]); + } +}