diff --git a/src/Bridge/Symfony/Bundle/DependencyInjection/Compiler/TestPass.php b/src/Bridge/Symfony/Bundle/DependencyInjection/Compiler/TestPass.php index 8daf039fd4e..ac317b83316 100644 --- a/src/Bridge/Symfony/Bundle/DependencyInjection/Compiler/TestPass.php +++ b/src/Bridge/Symfony/Bundle/DependencyInjection/Compiler/TestPass.php @@ -13,26 +13,31 @@ namespace ApiPlatform\Core\Bridge\Symfony\Bundle\DependencyInjection\Compiler; +use ApiPlatform\Core\Bridge\Symfony\Bundle\Test\Client; use Symfony\Component\BrowserKit\AbstractBrowser; -use Symfony\Component\Config\FileLocator; use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; use Symfony\Component\DependencyInjection\ContainerBuilder; -use Symfony\Component\DependencyInjection\Loader\XmlFileLoader; +use Symfony\Component\DependencyInjection\Definition; +use Symfony\Component\DependencyInjection\Reference; use Symfony\Component\HttpClient\HttpClientTrait; final class TestPass implements CompilerPassInterface { public function process(ContainerBuilder $container) { - if (!$container->hasParameter('test.client.parameters')) { + if ( + !class_exists(AbstractBrowser::class) || + !trait_exists(HttpClientTrait::class) || + !$container->hasParameter('test.client.parameters') + ) { return; } - $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../../Resources/config')); - $loader->load('test.xml'); - - if (!class_exists(AbstractBrowser::class) || !trait_exists(HttpClientTrait::class)) { - $container->removeDefinition('test.api_platform.client'); - } + $container->setDefinition( + 'test.api_platform.client', + (new Definition(Client::class, [new Reference('test.client')])) + ->setShared(false) + ->setPublic(true) + ); } } diff --git a/src/Bridge/Symfony/Bundle/Resources/config/test.xml b/src/Bridge/Symfony/Bundle/Resources/config/test.xml deleted file mode 100644 index 001e68219ba..00000000000 --- a/src/Bridge/Symfony/Bundle/Resources/config/test.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - diff --git a/tests/Bridge/Symfony/Bundle/DependencyInjection/Compiler/TestPassTest.php b/tests/Bridge/Symfony/Bundle/DependencyInjection/Compiler/TestPassTest.php index 3c16a190d50..9056817a25c 100644 --- a/tests/Bridge/Symfony/Bundle/DependencyInjection/Compiler/TestPassTest.php +++ b/tests/Bridge/Symfony/Bundle/DependencyInjection/Compiler/TestPassTest.php @@ -14,13 +14,12 @@ namespace ApiPlatform\Core\Tests\Bridge\Symfony\Bundle\DependencyInjection\Compiler; use ApiPlatform\Core\Bridge\Symfony\Bundle\DependencyInjection\Compiler\TestPass; +use ApiPlatform\Core\Bridge\Symfony\Bundle\Test\Client; use PHPUnit\Framework\TestCase; use Prophecy\Argument; -use Symfony\Component\BrowserKit\AbstractBrowser; use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Definition; -use Symfony\Component\HttpClient\HttpClientTrait; final class TestPassTest extends TestCase { @@ -49,16 +48,20 @@ public function testProcessWithoutTestClientParameters(): void public function testProcess(): void { $this->containerBuilderProphecy->hasParameter('test.client.parameters')->willReturn(true)->shouldBeCalledOnce(); - $this->containerBuilderProphecy->setDefinition('test.api_platform.client', Argument::type(Definition::class))->shouldBeCalledOnce(); - $this->containerBuilderProphecy->fileExists(Argument::type('string'))->shouldBeCalledOnce(); - $this->containerBuilderProphecy->hasExtension(Argument::type('string'))->shouldBeCalledOnce(); - $this->containerBuilderProphecy->removeBindings(Argument::type('string'))->shouldBeCalledOnce(); - - if (!class_exists(AbstractBrowser::class) || !trait_exists(HttpClientTrait::class)) { - $this->containerBuilderProphecy->removeDefinition('test.api_platform.client')->shouldBeCalledOnce(); - } else { - $this->containerBuilderProphecy->removeDefinition('test.api_platform.client')->shouldNotBeCalled(); - } + $this->containerBuilderProphecy + ->setDefinition( + 'test.api_platform.client', + Argument::allOf( + Argument::type(Definition::class), + Argument::that(function (Definition $testClientDefinition) { + return + Client::class === $testClientDefinition->getClass() && + !$testClientDefinition->isShared() && + $testClientDefinition->isPublic(); + }) + ) + ) + ->shouldBeCalledOnce(); $this->testPass->process($this->containerBuilderProphecy->reveal()); }