8000 Merge pull request #90 from ahonymous/bugfix/read-messenger-container… · brefphp/symfony-messenger@a4ed7da · GitHub
[go: up one dir, main page]

Skip to content

Commit a4ed7da

Browse files
authored
Merge pull request #90 from ahonymous/bugfix/read-messenger-container-config-from-overrided-environment
fix: Set messenger.transports if config has not empty transports value
2 parents abe91d4 + a9000a0 commit a4ed7da

File tree

2 files changed

+255
-5
lines changed

2 files changed

+255
-5
lines changed

src/DependencyInjection/BrefMessengerExtension.php

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,23 @@ public function load(array $configs, ContainerBuilder $container): void
1818

1919
public function prepend(ContainerBuilder $container): void
2020
{
21-
$configs = $container->getExtensionConfig('framework');
21+
$frameworkConfig = $container->getExtensionConfig('framework');
22+
$messengerTransports = $this->getMessengerTransports($frameworkConfig);
2223

23-
foreach (array_reverse($configs) as $config) {
24-
if (array_key_exists('messenger', $config)) {
25-
$container->setParameter('messenger.transports', $config['messenger']['transports']);
26-
}
24+
if (! empty($messengerTransports)) {
25+
$container->setParameter('messenger.transports', $messengerTransports);
2726
}
2827
}
28+
29+
private function getMessengerTransports(array $frameworkConfig): array
30+
{
31+
$transportConfigs = array_column($frameworkConfig, 'messenger.transports');
32+
$transportConfigs = array_filter($transportConfigs);
33+
34+
if (empty($transportConfigs)) {
35+
return [];
36+
}
37+
38+
return array_merge_recursive(...$transportConfigs);
39+
}
2940
}

tests/Unit/DependencyInjection/BrefMessengerExtensionTest.php

Lines changed: 239 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Bref\Symfony\Messenger\DependencyInjection\BrefMessengerExtension;
66
use Bref\Symfony\Messenger\Service\SimpleBusDriver;
77
use Matthias\SymfonyDependencyInjectionTest\PhpUnit\AbstractExtensionTestCase;
8+
use Symfony\Component\DependencyInjection\ContainerBuilder;
89

910
class BrefMessengerExtensionTest extends AbstractExtensionTestCase
1011
{
@@ -19,4 +20,242 @@ public function testNoConfigIsValid()
1920

2021
$this->assertContainerBuilderHasService(SimpleBusDriver::class);
2122
}
23+
24+
/**
25+
* @dataProvider providePrependSetsMessengerTransportsParameterCases
26+
*/
27+
public function testPrependSetsMessengerTransportsParameter(
28+
array $existConfig,
29+
array $expectedTransportsParameter,
30+
): void {
31+
$container = self::createMock(ContainerBuilder::class);
32+
$container->method('getExtensionConfig')
33+
->with('framework')
34+
->willReturn($existConfig);
35+
36+
$container->expects(self::atMost(2))
37+
->method('setParameter')
38+
->with(
39+
'messenger.transports',
40+
$expectedTransportsParameter
41+
);
42+
43+
$extension = new BrefMessengerExtension;
44+
$extension->prepend($container);
45+
}
46+
47+
public function providePrependSetsMessengerTransportsParameterCases(): iterable
48+
{
49+
yield 'single messenger config' => [
50+
'existConfig' => [
51+
[
52+
'messenger' => [
53+
'transports' => [
54+
'async' => 'async://',
55+
],
56+
],
57+
],
58+
],
59+
'expectedTransportsParameter' => [
60+
'async' => 'async://',
61+
],
62+
];
63+
64+
yield 'multiple messenger configs' => [
65+
'existConfig' => [
66+
[
67+
'messenger' => [
68+
'transports' => [
69+
'async' => 'async://',
70+
],
71+
],
72+
],
73+
[
74+
'messenger' => [
75+
'transports' => [
76+
'sync' => 'sync://',
77+
],
78+
],
79+
],
80+
],
81+
'expectedTransportsParameter' => [
82+
'async' => 'async://',
83+
'sync' => 'sync://',
84+
],
85+
];
86+
87+
yield 'multiple messenger configs with same transport' => [
88+
'existConfig' => [
89+
[
90+
'messenger' => [
91+
'transports' => [
92+
'async' => 'async://',
93+
],
94+
],
95+
],
96+
[
97+
'messenger' => [
98+
'transports' => [
99+
'async' => 'async_overridden://',
100+
],
101+
],
102+
],
103+
],
104+
'expectedTransportsParameter' => [
105+
'async' => 'async_overridden://',
106+
],
107+
];
108+
109+
yield 'multiple messenger configs with different transports' => [
110+
'existConfig' => [
111+
[
112+
'messenger' => [
113+
'transports' => [
114+
'async' => 'async://',
115+
],
116+
],
117+
],
118+
[
119+
'messenger' => [
120+
'transports' => [
121+
'sync' => 'sync://',
122+
],
123+
],
124+
],
125+
[
126+
'messenger' => [
127+
'transports' => [
128+
'async' => 'async_overridden://',
129+
],
130+
],
131+
],
132+
],
133+
'expectedTransportsParameter' => [
134+
'async' => 'async_overridden://',
135+
'sync' => 'sync://',
136+
],
137+
];
138+
139+
yield 'multiple messenger configs with different transports order' => [
140+
'existConfig' => [
141+
[
142+
'messenger' => [
143+
'transports' => [
144+
'sync' => 'sync://',
145+
],
146+
],
147+
],
148+
[
149+
'messenger' => [
150+
'transports' => [
151+
'async' => [
152+
'dsn' => 'async://',
153+
],
154+
],
155+
],
156+
],
157+
[
158+
'messenger' => [
159+
'transports' => [
160+
'async' => [
161+
'dsn' => 'async_overridden://',
162+
],
163+
],
164+
],
165+
],
166+
],
167+
'expectedTransportsParameter' => [
168+
'sync' => 'sync://',
169+
'async' => [
170+
'dsn' => 'async_overridden://',
171+
],
172+
],
173+
];
174+
175+
yield 'multiple messenger configs with different transports order and extra keys' => [
176+
'existConfig' => [
177+
[
178+
'messenger' => [
179+
'transports' => [
180+
'sync' => 'sync://',
181+
],
182+
],
183+
],
184+
[
185+
'messenger' => [
186+
'transports' => [
187+
'async' => [
188+
'dsn' => 'async://',
189+
'options' => [
190+
'queue' => 'queue',
191+
],
192+
],
193+
],
194+
],
195+
],
196+
[
197+
'messenger' => [
198+
'transports' => [
199+
'async' => [
200+
'dsn' => 'async_overridden://',
201+
],
202+
],
203+
],
204+
],
205+
],
206+
'expectedTransportsParameter' => [
207+
'sync' => 'sync://',
208+
'async' => [
209+
'dsn' => 'async_overridden://',
210+
],
211+
],
212+
];
213+
}
214+
215+
/**
216+
* @dataProvider provideDoesNotSetMessengerTransportsParameterCases
217+
*/
218+
public function testPrependDoesNotSetMessengerTransportsParameterWhenNoMessengerConfigExists(
219+
array $config,
220+
): void {
221+
$container = self::createMock(ContainerBuilder::class);
222+
$container->method('getExtensionConfig')
223+
->with('framework')
224+
->willReturn($config);
225+
226+
$container->expects(self::never())->method('setParameter');
227+
228+
$extension = new BrefMessengerExtension;
229+
$extension->prepend($container);
230+
}
231+
232+
public function provideDoesNotSetMessengerTransportsParameterCases(): iterable
233+
{
234+
yield 'empty config' => [
235+
'config' => [],
236+
];
237+
238+
yield 'empty messenger config' => [
239+
'config' => [
240+
'messenger' => [],
241+
],
242+
];
243+
244+
yield 'not empty messenger config without transports key' => [
245+
'config' => [
246+
'messenger' => [
247+
'busses' => [],
248+
],
249+
],
250+
];
251+
252+
yield 'not empty messenger config with empty transports key' => [
253+
'config' => [
254+
'messenger' => [
255+
'transports' => [],
256+
'busses' => [],
257+
],
258+
],
259+
];
260+
}
22261
}

0 commit comments

Comments
 (0)
0