Skip to content

Commit 93836f9

Browse files
committed
Pass event_dispatcher on creation consumer service
1 parent 56a23ce commit 93836f9

3 files changed

Lines changed: 59 additions & 19 deletions

File tree

src/Resources/config/consumers.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use FiveLab\Component\Amqp\Consumer\Strategy\LoopConsumeStrategy;
1212
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
1313
use function Symfony\Component\DependencyInjection\Loader\Configurator\abstract_arg;
14+
use function Symfony\Component\DependencyInjection\Loader\Configurator\service;
1415

1516
return static function (ContainerConfigurator $container) {
1617
$container->services()
@@ -31,6 +32,7 @@
3132
abstract_arg('configuration'),
3233
abstract_arg('strategy')
3334
])
35+
->call('setEventDispatcher', [service('event_dispatcher')->nullOnInvalid()])
3436

3537
// Spool consumer
3638
->set('fivelab.amqp.consumer_spool.configuration.abstract', SpoolConsumerConfiguration::class)
@@ -51,6 +53,7 @@
5153
abstract_arg('configuration'),
5254
abstract_arg('strategy')
5355
])
56+
->call('setEventDispatcher', [service('event_dispatcher')->nullOnInvalid()])
5457

5558
// Loop consumer
5659
->set('fivelab.amqp.consumer_loop.configuration.abstract', LoopConsumerConfiguration::class)
@@ -70,6 +73,7 @@
7073
abstract_arg('configuration'),
7174
abstract_arg('strategy')
7275
])
76+
->call('setEventDispatcher', [service('event_dispatcher')->nullOnInvalid()])
7377

7478
// Common services
7579
->set('fivelab.amqp.consumer.message_handler.abstract', MessageHandlers::class)

tests/DependencyInjection/AmqpExtensionConfigureConsumersTest.php

Lines changed: 46 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use FiveLab\Component\Amqp\Consumer\Checker\ContainerRunConsumerCheckerRegistry;
1818
use FiveLab\Component\Amqp\Consumer\Registry\ContainerConsumerRegistry;
1919
use PHPUnit\Framework\Attributes\Test;
20+
use Symfony\Component\DependencyInjection\ContainerInterface;
2021
use Symfony\Component\DependencyInjection\Reference;
2122

2223
class AmqpExtensionConfigureConsumersTest extends AmqpExtensionTestCase
@@ -75,12 +76,21 @@ public function shouldSuccessConfigureSingleConsumer(): void
7576
]);
7677

7778
// Verify consumer
78-
$this->assertService('fivelab.amqp.consumer.foo', '@fivelab.amqp.consumer_single.abstract', [
79-
new Reference('fivelab.amqp.queue_factory.default'),
80-
new Reference('fivelab.amqp.consumer.foo.message_handler'),
81-
new Reference('fivelab.amqp.consumer.foo.configuration'),
82-
new Reference('fivelab.amqp.consumer.foo.strategy'),
83-
]);
79+
$this->assertService(
80+
'fivelab.amqp.consumer.foo',
81+
'@fivelab.amqp.consumer_single.abstract',
82+
[
83+
new Reference('fivelab.amqp.queue_factory.default'),
84+
new Reference('fivelab.amqp.consumer.foo.message_handler'),
85+
new Reference('fivelab.amqp.consumer.foo.configuration'),
86+
new Reference('fivelab.amqp.consumer.foo.strategy'),
87+
],
88+
calls: [
89+
'setEventDispatcher' => [
90+
[new Reference('event_dispatcher', ContainerInterface::NULL_ON_INVALID_REFERENCE)],
91+
],
92+
]
93+
);
8494

8595
// Verify message handler
8696
$this->assertService('fivelab.amqp.consumer.foo.message_handler', '@fivelab.amqp.consumer.message_handler.abstract', [
@@ -247,12 +257,21 @@ public function shouldSuccessConfigureSpoolConsumer(): void
247257
$this->assertContainerBuilderHasService('fivelab.amqp.consumer.bar.configuration');
248258

249259
// Verify consumer
250-
$this->assertService('fivelab.amqp.consumer.bar', '@fivelab.amqp.consumer_spool.abstract', [
251-
new Reference('fivelab.amqp.queue_factory.default'),
252-
new Reference('fivelab.amqp.consumer.bar.message_handler'),
253-
new Reference('fivelab.amqp.consumer.bar.configuration'),
254-
new Reference('fivelab.amqp.consumer.bar.strategy'),
255-
]);
260+
$this->assertService(
261+
'fivelab.amqp.consumer.bar',
262+
'@fivelab.amqp.consumer_spool.abstract',
263+
[
264+
new Reference('fivelab.amqp.queue_factory.default'),
265+
new Reference('fivelab.amqp.consumer.bar.message_handler'),
266+
new Reference('fivelab.amqp.consumer.bar.configuration'),
267+
new Reference('fivelab.amqp.consumer.bar.strategy'),
268+
],
269+
calls: [
270+
'setEventDispatcher' => [
271+
[new Reference('event_dispatcher', ContainerInterface::NULL_ON_INVALID_REFERENCE)],
272+
],
273+
]
274+
);
256275

257276
// Verify configuration
258277
$this->assertService('fivelab.amqp.consumer.bar.configuration', '@fivelab.amqp.consumer_spool.configuration.abstract', [
@@ -306,12 +325,21 @@ public function shouldSuccessConfigureLoopConsumer(): void
306325
]);
307326

308327
// Verify consumer
309-
$this->assertService('fivelab.amqp.consumer.bar', '@fivelab.amqp.consumer_loop.abstract', [
310-
new Reference('fivelab.amqp.queue_factory.default'),
311-
new Reference('fivelab.amqp.consumer.bar.message_handler'),
312-
new Reference('fivelab.amqp.consumer.bar.configuration'),
313-
new Reference('fivelab.amqp.consumer.bar.strategy'),
314-
]);
328+
$this->assertService(
329+
'fivelab.amqp.consumer.bar',
330+
'@fivelab.amqp.consumer_loop.abstract',
331+
[
332+
new Reference('fivelab.amqp.queue_factory.default'),
333+
new Reference('fivelab.amqp.consumer.bar.message_handler'),
334+
new Reference('fivelab.amqp.consumer.bar.configuration'),
335+
new Reference('fivelab.amqp.consumer.bar.strategy'),
336+
],
337+
calls: [
338+
'setEventDispatcher' => [
339+
[new Reference('event_dispatcher', ContainerInterface::NULL_ON_INVALID_REFERENCE)],
340+
],
341+
]
342+
);
315343

316344
// Verify configuration
317345
$this->assertService('fivelab.amqp.consumer.bar.configuration', '@fivelab.amqp.consumer_loop.configuration.abstract', [

tests/DependencyInjection/AmqpExtensionTestCase.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
use FiveLab\Bundle\AmqpBundle\DependencyInjection\AmqpExtension;
1717
use Matthias\SymfonyDependencyInjectionTest\PhpUnit\AbstractExtensionTestCase;
18+
use Symfony\Component\DependencyInjection\ChildDefinition;
1819

1920
abstract class AmqpExtensionTestCase extends AbstractExtensionTestCase
2021
{
@@ -67,7 +68,14 @@ protected function assertService(string $id, ?string $class = null, ?array $argu
6768
}
6869

6970
if (null !== $calls) {
70-
$defCalls = $def->getMethodCalls();
71+
$defCalls = [$def->getMethodCalls()];
72+
73+
if ($def instanceof ChildDefinition) {
74+
$defCalls[] = $this->container->getDefinition($def->getParent())->getMethodCalls();
75+
}
76+
77+
$defCalls = \array_merge(...$defCalls);
78+
7179
$actualCalls = [];
7280

7381
foreach ($defCalls as [$callMethod, $callArguments]) {

0 commit comments

Comments
 (0)