Skip to content

Commit 1ff6516

Browse files
authored
Merge pull request #77 from php-enqueue/bundle-use-null-transport-as-default
[bundle] Set null transport as default. Prevent errors on bundle install.
2 parents a32a1bd + 40d42ca commit 1ff6516

File tree

7 files changed

+69
-115
lines changed

7 files changed

+69
-115
lines changed

Diff for: pkg/enqueue-bundle/DependencyInjection/EnqueueExtension.php

+5
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
use Enqueue\Client\TraceableProducer;
66
use Enqueue\JobQueue\Job;
7+
use Enqueue\Null\Symfony\NullTransportFactory;
8+
use Enqueue\Symfony\DefaultTransportFactory;
79
use Enqueue\Symfony\TransportFactoryInterface;
810
use Symfony\Component\Config\FileLocator;
911
use Symfony\Component\Config\Resource\FileResource;
@@ -23,6 +25,9 @@ class EnqueueExtension extends Extension implements PrependExtensionInterface
2325
public function __construct()
2426
{
2527
$this->factories = [];
28+
29+
$this->addTransportFactory(new DefaultTransportFactory());
30+
$this->addTransportFactory(new NullTransportFactory());
2631
}
2732

2833
/**

Diff for: pkg/enqueue-bundle/EnqueueBundle.php

-2
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,6 @@ public function build(ContainerBuilder $container)
4444

4545
/** @var EnqueueExtension $extension */
4646
$extension = $container->getExtension('enqueue');
47-
$extension->addTransportFactory(new DefaultTransportFactory());
48-
$extension->addTransportFactory(new NullTransportFactory());
4947

5048
if (class_exists(StompContext::class)) {
5149
$extension->addTransportFactory(new StompTransportFactory());

Diff for: pkg/enqueue-bundle/Tests/Unit/DependencyInjection/EnqueueExtensionTest.php

+26-36
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use Enqueue\Null\NullContext;
1111
use Enqueue\Null\Symfony\NullTransportFactory;
1212
use Enqueue\Symfony\DefaultTransportFactory;
13+
use Enqueue\Symfony\TransportFactoryInterface;
1314
use Enqueue\Test\ClassExtensionTrait;
1415
use PHPUnit\Framework\TestCase;
1516
use Symfony\Component\DependencyInjection\ContainerBuilder;
@@ -30,6 +31,25 @@ public function testCouldBeConstructedWithoutAnyArguments()
3031
new EnqueueExtension();
3132
}
3233

34+
public function testShouldRegisterDefaultAndNullTransportFactoriesInConstructor()
35+
{
36+
$extension = new EnqueueExtension();
37+
38+
/** @var TransportFactoryInterface[] $factories */
39+
$factories = $this->readAttribute($extension, 'factories');
40+
41+
$this->assertInternalType('array', $factories);
42+
$this->assertCount(2, $factories);
43+
44+
$this->assertArrayHasKey('default', $factories);
45+
$this->assertInstanceOf(DefaultTransportFactory::class, $factories['default']);
46+
$this->assertEquals('default', $factories['default']->getName());
47+
48+
$this->assertArrayHasKey('null', $factories);
49+
$this->assertInstanceOf(NullTransportFactory::class, $factories['null']);
50+
$this->assertEquals('null', $factories['null']->getName());
51+
}
52+
3353
public function testThrowIfTransportFactoryNameEmpty()
3454
{
3555
$extension = new EnqueueExtension();
@@ -52,31 +72,32 @@ public function testThrowIfTransportFactoryWithSameNameAlreadyAdded()
5272
$extension->addTransportFactory(new FooTransportFactory('foo'));
5373
}
5474

55-
public function testShouldConfigureNullTransport()
75+
public function testShouldEnabledNullTransportAndSetItAsDefault()
5676
{
5777
$container = new ContainerBuilder();
5878

5979
$extension = new EnqueueExtension();
60-
$extension->addTransportFactory(new NullTransportFactory());
6180

6281
$extension->load([[
6382
'transport' => [
83+
'default' => 'null',
6484
'null' => true,
6585
],
6686
]], $container);
6787

88+
self::assertTrue($container->hasAlias('enqueue.transport.default.context'));
89+
self::assertEquals('enqueue.transport.null.context', (string) $container->getAlias('enqueue.transport.default.context'));
90+
6891
self::assertTrue($container->hasDefinition('enqueue.transport.null.context'));
6992
$context = $container->getDefinition('enqueue.transport.null.context');
7093
self::assertEquals(NullContext::class, $context->getClass());
7194
}
7295

73-
public function testShouldUseNullTransportAsDefault()
96+
public function testShouldUseNullTransportAsDefaultWhenExplicitlyConfigured()
7497
{
7598
$container = new ContainerBuilder();
7699

77100
$extension = new EnqueueExtension();
78-
$extension->addTransportFactory(new NullTransportFactory());
79-
$extension->addTransportFactory(new DefaultTransportFactory());
80101

81102
$extension->load([[
82103
'transport' => [
@@ -95,30 +116,6 @@ public function testShouldUseNullTransportAsDefault()
95116
);
96117
}
97118

98-
public function testShouldUseNullTransportAsDefaultConfiguredViaDSN()
99-
{
100-
$container = new ContainerBuilder();
101-
102-
$extension = new EnqueueExtension();
103-
$extension->addTransportFactory(new NullTransportFactory());
104-
$extension->addTransportFactory(new DefaultTransportFactory());
105-
106-
$extension->load([[
107-
'transport' => [
108-
'default' => 'null://',
109-
],
110-
]], $container);
111-
112-
self::assertEquals(
113-
'enqueue.transport.default.context',
114-
(string) $container->getAlias('enqueue.transport.context')
115-
);
116-
self::assertEquals(
117-
'enqueue.transport.default_null.context',
118-
(string) $container->getAlias('enqueue.transport.default.context')
119-
);
120-
}
121-
122119
public function testShouldConfigureFooTransport()
123120
{
124121
$container = new ContainerBuilder();
@@ -144,7 +141,6 @@ public function testShouldUseFooTransportAsDefault()
144141

145142
$extension = new EnqueueExtension();
146143
$extension->addTransportFactory(new FooTransportFactory());
147-
$extension->addTransportFactory(new DefaultTransportFactory());
148144

149145
$extension->load([[
150146
'transport' => [
@@ -168,7 +164,6 @@ public function testShouldLoadClientServicesWhenEnabled()
168164
$container = new ContainerBuilder();
169165

170166
$extension = new EnqueueExtension();
171-
$extension->addTransportFactory(new DefaultTransportFactory());
172167
$extension->addTransportFactory(new FooTransportFactory());
173168

174169
$extension->load([[
@@ -191,7 +186,6 @@ public function testShouldUseProducerByDefault()
191186
$container->setParameter('kernel.debug', false);
192187

193188
$extension = new EnqueueExtension();
194-
$extension->addTransportFactory(new DefaultTransportFactory());
195189
$extension->addTransportFactory(new FooTransportFactory());
196190

197191
$extension->load([[
@@ -214,7 +208,6 @@ public function testShouldUseMessageProducerIfTraceableProducerOptionSetToFalseE
214208
$container->setParameter('kernel.debug', false);
215209

216210
$extension = new EnqueueExtension();
217-
$extension->addTransportFactory(new DefaultTransportFactory());
218211
$extension->addTransportFactory(new FooTransportFactory());
219212

220213
$extension->load([[
@@ -239,7 +232,6 @@ public function testShouldUseTraceableMessageProducerIfTraceableProducerOptionSe
239232
$container->setParameter('kernel.debug', true);
240233

241234
$extension = new EnqueueExtension();
242-
$extension->addTransportFactory(new DefaultTransportFactory());
243235
$extension->addTransportFactory(new FooTransportFactory());
244236

245237
$extension->load([[
@@ -274,7 +266,6 @@ public function testShouldLoadDelayRedeliveredMessageExtensionIfRedeliveredDelay
274266
$container->setParameter('kernel.debug', true);
275267

276268
$extension = new EnqueueExtension();
277-
$extension->addTransportFactory(new DefaultTransportFactory());
278269
$extension->addTransportFactory(new FooTransportFactory());
279270

280271
$extension->load([[
@@ -300,7 +291,6 @@ public function testShouldNotLoadDelayRedeliveredMessageExtensionIfRedeliveredDe
300291
$container->setParameter('kernel.debug', true);
301292

302293
$extension = new EnqueueExtension();
303-
$extension->addTransportFactory(new DefaultTransportFactory());
304294
$extension->addTransportFactory(new FooTransportFactory());
305295

306296
$extension->load([[

Diff for: pkg/enqueue-bundle/Tests/Unit/EnqueueBundleTest.php

+8-30
Original file line numberDiff line numberDiff line change
@@ -84,28 +84,6 @@ public function testShouldRegisterExpectedCompilerPasses()
8484
$bundle->build($container);
8585
}
8686

87-
public function testShouldRegisterDefaultAndNullTransportFactories()
88-
{
89-
$extensionMock = $this->createEnqueueExtensionMock();
90-
91-
$container = new ContainerBuilder();
92-
$container->registerExtension($extensionMock);
93-
94-
$extensionMock
95-
->expects($this->at(0))
96-
->method('addTransportFactory')
97-
->with($this->isInstanceOf(DefaultTransportFactory::class))
98-
;
99-
$extensionMock
100-
->expects($this->at(1))
101-
->method('addTransportFactory')
102-
->with($this->isInstanceOf(NullTransportFactory::class))
103-
;
104-
105-
$bundle = new EnqueueBundle();
106-
$bundle->build($container);
107-
}
108-
10987
public function testShouldRegisterStompAndRabbitMqStompTransportFactories()
11088
{
11189
$extensionMock = $this->createEnqueueExtensionMock();
@@ -114,12 +92,12 @@ public function testShouldRegisterStompAndRabbitMqStompTransportFactories()
11492
$container->registerExtension($extensionMock);
11593

11694
$extensionMock
117-
->expects($this->at(2))
95+
->expects($this->at(0))
11896
->method('addTransportFactory')
11997
->with($this->isInstanceOf(StompTransportFactory::class))
12098
;
12199
$extensionMock
122-
->expects($this->at(3))
100+
->expects($this->at(1))
123101
->method('addTransportFactory')
124102
->with($this->isInstanceOf(RabbitMqStompTransportFactory::class))
125103
;
@@ -136,12 +114,12 @@ public function testShouldRegisterAmqpAndRabbitMqAmqpTransportFactories()
136114
$container->registerExtension($extensionMock);
137115

138116
$extensionMock
139-
->expects($this->at(4))
117+
->expects($this->at(2))
140118
->method('addTransportFactory')
141119
->with($this->isInstanceOf(AmqpTransportFactory::class))
142120
;
143121
$extensionMock
144-
->expects($this->at(5))
122+
->expects($this->at(3))
145123
->method('addTransportFactory')
146124
->with($this->isInstanceOf(RabbitMqAmqpTransportFactory::class))
147125
;
@@ -158,7 +136,7 @@ public function testShouldRegisterFSTransportFactory()
158136
$container->registerExtension($extensionMock);
159137

160138
$extensionMock
161-
->expects($this->at(6))
139+
->expects($this->at(4))
162140
->method('addTransportFactory')
163141
->with($this->isInstanceOf(FsTransportFactory::class))
164142
;
@@ -175,7 +153,7 @@ public function testShouldRegisterRedisTransportFactory()
175153
$container->registerExtension($extensionMock);
176154

177155
$extensionMock
178-
->expects($this->at(7))
156+
->expects($this->at(5))
179157
->method('addTransportFactory')
180158
->with($this->isInstanceOf(RedisTransportFactory::class))
181159
;
@@ -192,7 +170,7 @@ public function testShouldRegisterDbalTransportFactory()
192170
$container->registerExtension($extensionMock);
193171

194172
$extensionMock
195-
->expects($this->at(8))
173+
->expects($this->at(6))
196174
->method('addTransportFactory')
197175
->with($this->isInstanceOf(DbalTransportFactory::class))
198176
;
@@ -209,7 +187,7 @@ public function testShouldRegisterSqsTransportFactory()
209187
$container->registerExtension($extensionMock);
210188

211189
$extensionMock
212-
->expects($this->at(9))
190+
->expects($this->at(7))
213191
->method('addTransportFactory')
214192
->with($this->isInstanceOf(SqsTransportFactory::class))
215193
;

Diff for: pkg/enqueue/Symfony/DefaultTransportFactory.php

+22-15
Original file line numberDiff line numberDiff line change
@@ -34,29 +34,40 @@ public function addConfiguration(ArrayNodeDefinition $builder)
3434
{
3535
$builder
3636
->beforeNormalization()
37-
->ifString()
38-
->then(function ($v) {
39-
if (false === strpos($v, '://')) {
40-
return ['alias' => $v];
37+
->always(function ($v) {
38+
if (is_array($v)) {
39+
if (empty($v['dsn']) && empty($v['alias'])) {
40+
throw new \LogicException('Either dsn or alias option must be set');
41+
}
42+
43+
return $v;
44+
}
45+
46+
if (empty($v)) {
47+
return ['dsn' => 'null://'];
4148
}
4249

43-
return ['dsn' => $v];
50+
if (is_string($v)) {
51+
return false !== strpos($v, '://') ?
52+
['dsn' => $v] :
53+
['alias' => $v];
54+
}
4455
})
4556
->end()
4657
->children()
4758
->scalarNode('alias')->cannotBeEmpty()->end()
4859
->scalarNode('dsn')->cannotBeEmpty()->end()
49-
;
60+
->end()
61+
->end()
62+
;
5063
}
5164

5265
public function createConnectionFactory(ContainerBuilder $container, array $config)
5366
{
5467
if (isset($config['alias'])) {
5568
$aliasId = sprintf('enqueue.transport.%s.connection_factory', $config['alias']);
56-
} elseif (isset($config['dsn'])) {
57-
$aliasId = $this->findFactory($config['dsn'])->createConnectionFactory($container, $config);
5869
} else {
59-
throw new \LogicException('Either dsn or alias option must be set.');
70+
$aliasId = $this->findFactory($config['dsn'])->createConnectionFactory($container, $config);
6071
}
6172

6273
$factoryId = sprintf('enqueue.transport.%s.connection_factory', $this->getName());
@@ -74,10 +85,8 @@ public function createContext(ContainerBuilder $container, array $config)
7485
{
7586
if (isset($config['alias'])) {
7687
$aliasId = sprintf('enqueue.transport.%s.context', $config['alias']);
77-
} elseif (isset($config['dsn'])) {
78-
$aliasId = $this->findFactory($config['dsn'])->createContext($container, $config);
7988
} else {
80-
throw new \LogicException('Either dsn or alias option must be set.');
89+
$aliasId = $this->findFactory($config['dsn'])->createContext($container, $config);
8190
}
8291

8392
$contextId = sprintf('enqueue.transport.%s.context', $this->getName());
@@ -95,10 +104,8 @@ public function createDriver(ContainerBuilder $container, array $config)
95104
{
96105
if (isset($config['alias'])) {
97106
$aliasId = sprintf('enqueue.client.%s.driver', $config['alias']);
98-
} elseif (isset($config['dsn'])) {
99-
$aliasId = $this->findFactory($config['dsn'])->createDriver($container, $config);
100107
} else {
101-
throw new \LogicException('Either dsn or alias option must be set.');
108+
$aliasId = $this->findFactory($config['dsn'])->createDriver($container, $config);
102109
}
103110

104111
$driverId = sprintf('enqueue.client.%s.driver', $this->getName());

0 commit comments

Comments
 (0)