[HttpClient][DI] Add an option to use the MockClient in functional tests
This commit is contained in:
parent
704c648ba5
commit
b53739c79d
@ -1450,6 +1450,9 @@ class Configuration implements ConfigurationInterface
|
|||||||
->end()
|
->end()
|
||||||
->end()
|
->end()
|
||||||
->end()
|
->end()
|
||||||
|
->scalarNode('mock_response_factory')
|
||||||
|
->info('The id of the service that should generate mock responses. It should be either an invokable or an iterable.')
|
||||||
|
->end()
|
||||||
->arrayNode('scoped_clients')
|
->arrayNode('scoped_clients')
|
||||||
->useAttributeAsKey('name')
|
->useAttributeAsKey('name')
|
||||||
->normalizeKeys(false)
|
->normalizeKeys(false)
|
||||||
|
@ -63,6 +63,7 @@ use Symfony\Component\Form\ChoiceList\Factory\CachingFactoryDecorator;
|
|||||||
use Symfony\Component\Form\FormTypeExtensionInterface;
|
use Symfony\Component\Form\FormTypeExtensionInterface;
|
||||||
use Symfony\Component\Form\FormTypeGuesserInterface;
|
use Symfony\Component\Form\FormTypeGuesserInterface;
|
||||||
use Symfony\Component\Form\FormTypeInterface;
|
use Symfony\Component\Form\FormTypeInterface;
|
||||||
|
use Symfony\Component\HttpClient\MockHttpClient;
|
||||||
use Symfony\Component\HttpClient\ScopingHttpClient;
|
use Symfony\Component\HttpClient\ScopingHttpClient;
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
use Symfony\Component\HttpKernel\CacheClearer\CacheClearerInterface;
|
use Symfony\Component\HttpKernel\CacheClearer\CacheClearerInterface;
|
||||||
@ -2009,6 +2010,12 @@ class FrameworkExtension extends Extension
|
|||||||
$container->registerAliasForArgument('psr18.'.$name, ClientInterface::class, $name);
|
$container->registerAliasForArgument('psr18.'.$name, ClientInterface::class, $name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($responseFactoryId = $config['mock_response_factory'] ?? null) {
|
||||||
|
$container->getDefinition($httpClientId)
|
||||||
|
->setClass(MockHttpClient::class)
|
||||||
|
->setArguments([new Reference($responseFactoryId)]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function registerMailerConfiguration(array $config, ContainerBuilder $container, PhpFileLoader $loader)
|
private function registerMailerConfiguration(array $config, ContainerBuilder $container, PhpFileLoader $loader)
|
||||||
|
@ -510,6 +510,7 @@
|
|||||||
</xsd:sequence>
|
</xsd:sequence>
|
||||||
<xsd:attribute name="enabled" type="xsd:boolean" />
|
<xsd:attribute name="enabled" type="xsd:boolean" />
|
||||||
<xsd:attribute name="max-host-connections" type="xsd:integer" />
|
<xsd:attribute name="max-host-connections" type="xsd:integer" />
|
||||||
|
<xsd:attribute name="mock-response-factory" type="xsd:string" />
|
||||||
</xsd:complexType>
|
</xsd:complexType>
|
||||||
|
|
||||||
<xsd:complexType name="http_client_default_options" mixed="true">
|
<xsd:complexType name="http_client_default_options" mixed="true">
|
||||||
|
@ -0,0 +1,8 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
$container->loadFromExtension('framework', [
|
||||||
|
'http_client' => [
|
||||||
|
'default_options' => null,
|
||||||
|
'mock_response_factory' => 'my_response_factory',
|
||||||
|
],
|
||||||
|
]);
|
@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<container xmlns="http://symfony.com/schema/dic/services"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xmlns:framework="http://symfony.com/schema/dic/symfony"
|
||||||
|
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd
|
||||||
|
http://symfony.com/schema/dic/symfony http://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
|
||||||
|
|
||||||
|
<framework:config>
|
||||||
|
<framework:http-client mock-response-factory="my_response_factory">
|
||||||
|
<framework:default-options />
|
||||||
|
</framework:http-client>
|
||||||
|
</framework:config>
|
||||||
|
</container>
|
@ -0,0 +1,4 @@
|
|||||||
|
framework:
|
||||||
|
http_client:
|
||||||
|
default_options: ~
|
||||||
|
mock_response_factory: my_response_factory
|
@ -41,6 +41,7 @@ use Symfony\Component\DependencyInjection\ParameterBag\EnvPlaceholderParameterBa
|
|||||||
use Symfony\Component\DependencyInjection\Reference;
|
use Symfony\Component\DependencyInjection\Reference;
|
||||||
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
||||||
use Symfony\Component\Form\Serializer\FormErrorNormalizer;
|
use Symfony\Component\Form\Serializer\FormErrorNormalizer;
|
||||||
|
use Symfony\Component\HttpClient\MockHttpClient;
|
||||||
use Symfony\Component\HttpClient\ScopingHttpClient;
|
use Symfony\Component\HttpClient\ScopingHttpClient;
|
||||||
use Symfony\Component\HttpKernel\DependencyInjection\LoggerPass;
|
use Symfony\Component\HttpKernel\DependencyInjection\LoggerPass;
|
||||||
use Symfony\Component\Messenger\Transport\TransportFactory;
|
use Symfony\Component\Messenger\Transport\TransportFactory;
|
||||||
@ -1567,6 +1568,21 @@ abstract class FrameworkExtensionTest extends TestCase
|
|||||||
$this->assertEquals(new Reference('app.another_bus'), $container->getDefinition('mailer.mailer')->getArgument(1));
|
$this->assertEquals(new Reference('app.another_bus'), $container->getDefinition('mailer.mailer')->getArgument(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testHttpClientMockResponseFactory()
|
||||||
|
{
|
||||||
|
$container = $this->createContainerFromFile('http_client_mock_response_factory');
|
||||||
|
|
||||||
|
$definition = $container->getDefinition('http_client');
|
||||||
|
|
||||||
|
$this->assertSame(MockHttpClient::class, $definition->getClass());
|
||||||
|
$this->assertCount(1, $definition->getArguments());
|
||||||
|
|
||||||
|
$argument = $definition->getArgument(0);
|
||||||
|
|
||||||
|
$this->assertInstanceOf(Reference::class, $argument);
|
||||||
|
$this->assertSame('my_response_factory', (string) $argument);
|
||||||
|
}
|
||||||
|
|
||||||
protected function createContainer(array $data = [])
|
protected function createContainer(array $data = [])
|
||||||
{
|
{
|
||||||
return new ContainerBuilder(new EnvPlaceholderParameterBag(array_merge([
|
return new ContainerBuilder(new EnvPlaceholderParameterBag(array_merge([
|
||||||
|
Reference in New Issue
Block a user