From 14cb4281c22ad286e87f4149a616bc0245fd7f45 Mon Sep 17 00:00:00 2001 From: Denis Brumann Date: Sun, 22 Oct 2017 12:01:22 +0200 Subject: [PATCH 1/3] Update composer.json for Symfony 4. --- DependencyInjection/HttplugExtension.php | 6 ++++-- Resources/config/services.xml | 16 +++++++-------- Tests/Resources/app/config/config_test.yml | 3 +++ composer.json | 24 +++++++++++----------- 4 files changed, 27 insertions(+), 22 deletions(-) diff --git a/DependencyInjection/HttplugExtension.php b/DependencyInjection/HttplugExtension.php index e8afe492..1a010185 100644 --- a/DependencyInjection/HttplugExtension.php +++ b/DependencyInjection/HttplugExtension.php @@ -14,6 +14,7 @@ use Http\Message\Authentication\Wsse; use Psr\Http\Message\UriInterface; use Symfony\Component\Config\FileLocator; +use Symfony\Component\DependencyInjection\Alias; use Symfony\Component\DependencyInjection\ChildDefinition; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Definition; @@ -50,7 +51,7 @@ public function load(array $configs, ContainerBuilder $container) // Set main aliases foreach ($config['main_alias'] as $type => $id) { - $container->setAlias(sprintf('httplug.%s', $type), $id); + $container->setAlias(sprintf('httplug.%s', $type), new Alias($id, true)); } // Configure toolbar @@ -103,7 +104,7 @@ private function configureClients(ContainerBuilder $container, array $config) // If we do not have a client named 'default' if (!isset($config['clients']['default'])) { // Alias the first client to httplug.client.default - $container->setAlias('httplug.client.default', 'httplug.client.'.$first); + $container->setAlias('httplug.client.default', new Alias('httplug.client.'.$first, true)); } } } @@ -297,6 +298,7 @@ private function configureClient(ContainerBuilder $container, $clientName, array $container ->register($serviceId, PluginClient::class) + ->setPublic(true) ->setFactory([new Reference(PluginClientFactory::class), 'createClient']) ->addArgument(new Reference($serviceId.'.client')) ->addArgument( diff --git a/Resources/config/services.xml b/Resources/config/services.xml index 194921b8..89738ab3 100644 --- a/Resources/config/services.xml +++ b/Resources/config/services.xml @@ -4,44 +4,44 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd"> - + - + - + - + - + - + - + - + diff --git a/Tests/Resources/app/config/config_test.yml b/Tests/Resources/app/config/config_test.yml index 52288d6f..599b062a 100644 --- a/Tests/Resources/app/config/config_test.yml +++ b/Tests/Resources/app/config/config_test.yml @@ -26,3 +26,6 @@ httplug: services: app.http.plugin.custom: class: Http\Client\Common\Plugin\RedirectPlugin + public: true + # plugin services usually do not need to be public. + # this one is made public so that we can do functional tests on the service diff --git a/composer.json b/composer.json index aa4f37aa..41661bae 100644 --- a/composer.json +++ b/composer.json @@ -23,14 +23,14 @@ "php-http/cache-plugin": "^1.4", "php-http/logger-plugin": "^1.0", "php-http/stopwatch-plugin": "^1.0", - "symfony/options-resolver": "^2.8 || ^3.0", - "symfony/event-dispatcher": "^2.8 || ^3.0", - "symfony/framework-bundle": "^2.8 || ^3.0", + "symfony/options-resolver": "^2.8 || ^3.0 || ^4.0", + "symfony/event-dispatcher": "^2.8 || ^3.0 || ^4.0", + "symfony/framework-bundle": "^2.8 || ^3.0 || ^4.0", "php-http/message": "^1.4", "php-http/discovery": "^1.0", "twig/twig": "^1.18 || ^2.0", - "symfony/asset": "^2.8 || ^3.0", - "symfony/dependency-injection": "^2.8.3 || ^3.0.3" + "symfony/asset": "^2.8 || ^3.0 || ^4.0", + "symfony/dependency-injection": "^2.8.3 || ^3.0.3 || ^4.0" }, "require-dev": { "phpunit/php-token-stream": "^1.1.8", @@ -41,13 +41,13 @@ "php-http/buzz-adapter": "^0.3", "php-http/mock-client": "^1.0", "symfony/phpunit-bridge": "^3.3 || ^4.0", - "symfony/twig-bundle": "^2.8 || ^3.0", - "symfony/twig-bridge": "^2.8 || ^3.0", - "symfony/web-profiler-bundle": "^2.8 || ^3.0", - "symfony/finder": "^2.7 || ^3.0", - "symfony/cache": "^3.1", - "symfony/browser-kit": "^2.8 || ^3.0", - "symfony/dom-crawler": "^2.8 || ^3.0", + "symfony/twig-bundle": "^2.8 || ^3.0 || ^4.0", + "symfony/twig-bridge": "^2.8 || ^3.0 || ^4.0", + "symfony/web-profiler-bundle": "^2.8 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/cache": "^3.1 || ^4.0", + "symfony/browser-kit": "^2.8 || ^3.0 || ^4.0", + "symfony/dom-crawler": "^2.8 || ^3.0 || ^4.0", "polishsymfonycommunity/symfony-mocker-container": "^1.0", "matthiasnoback/symfony-dependency-injection-test": "^1.1 || ^2.0", "nyholm/nsa": "^1.1" From 4f4ce5164351f67a9ff0ead5b891cff144fb8ccc Mon Sep 17 00:00:00 2001 From: Fabien Bourigault Date: Tue, 28 Nov 2017 23:35:34 +0100 Subject: [PATCH 2/3] add a hack to allow testing against private services without rewriting a large part of tests --- Resources/config/services.xml | 16 ++++++------ Tests/Resources/app/AppKernel.php | 29 ++++++++++++++++++++++ Tests/Resources/app/config/config_test.yml | 3 --- 3 files changed, 37 insertions(+), 11 deletions(-) diff --git a/Resources/config/services.xml b/Resources/config/services.xml index 89738ab3..194921b8 100644 --- a/Resources/config/services.xml +++ b/Resources/config/services.xml @@ -4,44 +4,44 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd"> - + - + - + - + - + - + - + - + diff --git a/Tests/Resources/app/AppKernel.php b/Tests/Resources/app/AppKernel.php index f45dcfa0..f154f7c4 100644 --- a/Tests/Resources/app/AppKernel.php +++ b/Tests/Resources/app/AppKernel.php @@ -2,6 +2,7 @@ use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait; use Symfony\Component\Config\Loader\LoaderInterface; +use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Kernel; @@ -86,4 +87,32 @@ public function indexAction() { return new Response(); } + + protected function build(ContainerBuilder $container) + { + $container->addCompilerPass(new PublicServicesForFunctionalTestsPass()); + } +} + +class PublicServicesForFunctionalTestsPass implements CompilerPassInterface +{ + public function process(ContainerBuilder $container) + { + $services = [ + 'httplug.strategy', + 'httplug.auto_discovery.auto_discovered_client', + 'httplug.auto_discovery.auto_discovered_async', + 'httplug.message_factory.default', + 'httplug.stream_factory.default', + 'httplug.uri_factory.default', + 'httplug.async_client.default', + 'httplug.client.default', + 'app.http.plugin.custom', + ]; + foreach ($services as $service) { + if ($container->hasDefinition($service)) { + $container->getDefinition($service)->setPublic(true); + } + } + } } diff --git a/Tests/Resources/app/config/config_test.yml b/Tests/Resources/app/config/config_test.yml index 599b062a..52288d6f 100644 --- a/Tests/Resources/app/config/config_test.yml +++ b/Tests/Resources/app/config/config_test.yml @@ -26,6 +26,3 @@ httplug: services: app.http.plugin.custom: class: Http\Client\Common\Plugin\RedirectPlugin - public: true - # plugin services usually do not need to be public. - # this one is made public so that we can do functional tests on the service From 1d3535797f28a09ed9de53623c62785fc75111bc Mon Sep 17 00:00:00 2001 From: Fabien Bourigault Date: Wed, 29 Nov 2017 09:28:13 +0100 Subject: [PATCH 3/3] don't make clients explicitly public --- DependencyInjection/HttplugExtension.php | 6 ++---- Tests/Resources/app/AppKernel.php | 11 +++++++++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/DependencyInjection/HttplugExtension.php b/DependencyInjection/HttplugExtension.php index 1a010185..e8afe492 100644 --- a/DependencyInjection/HttplugExtension.php +++ b/DependencyInjection/HttplugExtension.php @@ -14,7 +14,6 @@ use Http\Message\Authentication\Wsse; use Psr\Http\Message\UriInterface; use Symfony\Component\Config\FileLocator; -use Symfony\Component\DependencyInjection\Alias; use Symfony\Component\DependencyInjection\ChildDefinition; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Definition; @@ -51,7 +50,7 @@ public function load(array $configs, ContainerBuilder $container) // Set main aliases foreach ($config['main_alias'] as $type => $id) { - $container->setAlias(sprintf('httplug.%s', $type), new Alias($id, true)); + $container->setAlias(sprintf('httplug.%s', $type), $id); } // Configure toolbar @@ -104,7 +103,7 @@ private function configureClients(ContainerBuilder $container, array $config) // If we do not have a client named 'default' if (!isset($config['clients']['default'])) { // Alias the first client to httplug.client.default - $container->setAlias('httplug.client.default', new Alias('httplug.client.'.$first, true)); + $container->setAlias('httplug.client.default', 'httplug.client.'.$first); } } } @@ -298,7 +297,6 @@ private function configureClient(ContainerBuilder $container, $clientName, array $container ->register($serviceId, PluginClient::class) - ->setPublic(true) ->setFactory([new Reference(PluginClientFactory::class), 'createClient']) ->addArgument(new Reference($serviceId.'.client')) ->addArgument( diff --git a/Tests/Resources/app/AppKernel.php b/Tests/Resources/app/AppKernel.php index f154f7c4..5ed35f89 100644 --- a/Tests/Resources/app/AppKernel.php +++ b/Tests/Resources/app/AppKernel.php @@ -108,11 +108,22 @@ public function process(ContainerBuilder $container) 'httplug.async_client.default', 'httplug.client.default', 'app.http.plugin.custom', + 'httplug.client.acme', ]; foreach ($services as $service) { if ($container->hasDefinition($service)) { $container->getDefinition($service)->setPublic(true); } + + } + + $aliases = [ + 'httplug.client', + ]; + foreach ($aliases as $alias) { + if ($container->hasAlias($alias)) { + $container->getAlias($alias)->setPublic(true); + } } } }