From 7fa510936b7383d7fbdcd55af435226c312bd157 Mon Sep 17 00:00:00 2001 From: Ruud Kamphuis Date: Wed, 20 Mar 2019 18:29:10 +0100 Subject: [PATCH] Add `default_client_autowiring` configuration option --- CHANGELOG.md | 2 + src/DependencyInjection/Configuration.php | 4 ++ src/DependencyInjection/HttplugExtension.php | 6 +++ tests/Functional/DiscoveryTest.php | 37 +++++++++++++++++++ tests/Resources/Fixtures/config/full.php | 1 + tests/Resources/Fixtures/config/full.xml | 1 + tests/Resources/Fixtures/config/full.yml | 1 + .../DependencyInjection/ConfigurationTest.php | 2 + 8 files changed, 54 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 37887f94..b96d0a5d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,8 @@ The change log describes what is "Added", "Removed", "Changed" or "Fixed" betwee BatchClientInterface if they are enabled on the default/first client. (Only available with Httplug 2) - Configuration for the content_type plugin +- Configuration option default_client_autowiring that you can set to false + to prevent autowiring the HttpClient and HttpAsyncClient ### Changed diff --git a/src/DependencyInjection/Configuration.php b/src/DependencyInjection/Configuration.php index 7a1d94b2..0bcfd928 100644 --- a/src/DependencyInjection/Configuration.php +++ b/src/DependencyInjection/Configuration.php @@ -108,6 +108,10 @@ public function getConfigTreeBuilder() ->end() ->fixXmlConfig('client') ->children() + ->booleanNode('default_client_autowiring') + ->defaultTrue() + ->info('Set to false to not autowire HttpClient and HttpAsyncClient.') + ->end() ->arrayNode('main_alias') ->addDefaultsIfNotSet() ->info('Configure which service the main alias point to.') diff --git a/src/DependencyInjection/HttplugExtension.php b/src/DependencyInjection/HttplugExtension.php index f3111d0d..a084cd4b 100644 --- a/src/DependencyInjection/HttplugExtension.php +++ b/src/DependencyInjection/HttplugExtension.php @@ -10,6 +10,7 @@ use Http\Client\Common\Plugin\AuthenticationPlugin; use Http\Client\Common\PluginClient; use Http\Client\Common\PluginClientFactory; +use Http\Client\HttpAsyncClient; use Http\Client\HttpClient; use Http\Message\Authentication\BasicAuth; use Http\Message\Authentication\Bearer; @@ -88,6 +89,11 @@ public function load(array $configs, ContainerBuilder $container) $this->configureClients($container, $config); $this->configurePlugins($container, $config['plugins']); // must be after clients, as clients.X.plugins might use plugins as templates that will be removed $this->configureAutoDiscoveryClients($container, $config); + + if (!$config['default_client_autowiring']) { + $container->removeAlias(HttpAsyncClient::class); + $container->removeAlias(HttpClient::class); + } } /** diff --git a/tests/Functional/DiscoveryTest.php b/tests/Functional/DiscoveryTest.php index cf09b375..7af9ef31 100644 --- a/tests/Functional/DiscoveryTest.php +++ b/tests/Functional/DiscoveryTest.php @@ -10,6 +10,8 @@ use Http\Message\StreamFactory; use Http\Message\UriFactory; use Matthias\SymfonyDependencyInjectionTest\PhpUnit\AbstractExtensionTestCase; +use Matthias\SymfonyDependencyInjectionTest\PhpUnit\ContainerBuilderHasAliasConstraint; +use PHPUnit\Framework\Constraint\LogicalNot; use Symfony\Component\DependencyInjection\Definition; /** @@ -71,4 +73,39 @@ public function testNoDiscoveryFallbacks() $clientDefinition = $this->container->getDefinition('httplug.client.default'); $this->assertEquals([HttpClientDiscovery::class, 'find'], $clientDefinition->getFactory()); } + + public function testEnableAutowiring() + { + $this->load([ + 'default_client_autowiring' => true, + ]); + + $this->assertContainerBuilderHasService('httplug.client.default'); + $this->assertContainerBuilderHasService('httplug.async_client.default'); + $this->assertContainerBuilderHasAlias(HttpClient::class); + $this->assertContainerBuilderHasAlias(HttpAsyncClient::class); + } + + public function testDisableAutowiring() + { + if (PHP_VERSION_ID <= 70000) { + $this->markTestSkipped(); + } + + $this->load([ + 'default_client_autowiring' => false, + ]); + + $this->assertContainerBuilderHasService('httplug.client.default'); + $this->assertContainerBuilderHasService('httplug.async_client.default'); + + self::assertThat( + $this->container, + new LogicalNot(new ContainerBuilderHasAliasConstraint(HttpClient::class)) + ); + self::assertThat( + $this->container, + new LogicalNot(new ContainerBuilderHasAliasConstraint(HttpAsyncClient::class)) + ); + } } diff --git a/tests/Resources/Fixtures/config/full.php b/tests/Resources/Fixtures/config/full.php index e1233c8d..0dc4fc7c 100644 --- a/tests/Resources/Fixtures/config/full.php +++ b/tests/Resources/Fixtures/config/full.php @@ -1,6 +1,7 @@ loadFromExtension('httplug', [ + 'default_client_autowiring' => false, 'main_alias' => [ 'client' => 'my_client', 'message_factory' => 'my_message_factory', diff --git a/tests/Resources/Fixtures/config/full.xml b/tests/Resources/Fixtures/config/full.xml index ef9eaba7..188122e5 100644 --- a/tests/Resources/Fixtures/config/full.xml +++ b/tests/Resources/Fixtures/config/full.xml @@ -2,6 +2,7 @@ + false my_client my_message_factory diff --git a/tests/Resources/Fixtures/config/full.yml b/tests/Resources/Fixtures/config/full.yml index 8b56b9b3..9b8e266b 100644 --- a/tests/Resources/Fixtures/config/full.yml +++ b/tests/Resources/Fixtures/config/full.yml @@ -1,4 +1,5 @@ httplug: + default_client_autowiring: false main_alias: client: my_client message_factory: my_message_factory diff --git a/tests/Unit/DependencyInjection/ConfigurationTest.php b/tests/Unit/DependencyInjection/ConfigurationTest.php index 31b33c96..a6bff258 100644 --- a/tests/Unit/DependencyInjection/ConfigurationTest.php +++ b/tests/Unit/DependencyInjection/ConfigurationTest.php @@ -12,6 +12,7 @@ class ConfigurationTest extends AbstractExtensionConfigurationTestCase { private $emptyConfig = [ + 'default_client_autowiring' => true, 'main_alias' => [ 'client' => 'httplug.client.default', 'message_factory' => 'httplug.message_factory.default', @@ -102,6 +103,7 @@ public function testEmptyConfiguration() public function testSupportsAllConfigFormats() { $expectedConfiguration = [ + 'default_client_autowiring' => false, 'main_alias' => [ 'client' => 'my_client', 'message_factory' => 'my_message_factory',