Skip to content

Commit 1287b1b

Browse files
committed
[client] add tests
1 parent 5aa9055 commit 1287b1b

File tree

5 files changed

+114
-14
lines changed

5 files changed

+114
-14
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
namespace Enqueue\Bundle\Tests\Functional\App;
4+
5+
use Enqueue\Client\CommandSubscriberInterface;
6+
use Enqueue\Consumption\Result;
7+
use Enqueue\Psr\PsrContext;
8+
use Enqueue\Psr\PsrMessage;
9+
use Enqueue\Psr\PsrProcessor;
10+
11+
class TestExclusiveCommandSubscriberProcessor implements PsrProcessor, CommandSubscriberInterface
12+
{
13+
public $calls = [];
14+
15+
public function process(PsrMessage $message, PsrContext $context)
16+
{
17+
$this->calls[] = $message;
18+
19+
return Result::ACK;
20+
}
21+
22+
public static function getSubscribedCommand()
23+
{
24+
return [
25+
'processorName' => 'theExclusiveCommandName',
26+
'queueName' => 'the_exclusive_command_queue',
27+
'queueNameHardcoded' => true,
28+
'exclusive' => true,
29+
];
30+
}
31+
}

pkg/enqueue-bundle/Tests/Functional/App/config/config.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,11 @@ services:
5252
tags:
5353
- { name: 'enqueue.client.processor' }
5454

55+
test_exclusive_command_subscriber_processor:
56+
class: 'Enqueue\Bundle\Tests\Functional\App\TestExclusiveCommandSubscriberProcessor'
57+
tags:
58+
- { name: 'enqueue.client.processor' }
59+
5560
test_async_subscriber:
5661
class: 'Enqueue\Bundle\Tests\Functional\App\TestAsyncSubscriber'
5762
tags:

pkg/enqueue-bundle/Tests/Functional/Client/ProducerTest.php

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,19 +94,27 @@ public function testShouldSendMessageInstanceAsCommandWithoutNeedForReply()
9494
], $traces[0]['properties']);
9595
}
9696

97-
public function testShouldSendCommandWithNeedForReply()
97+
public function testShouldSendExclusiveCommandWithNeedForReply()
9898
{
9999
/** @var ProducerInterface $producer */
100100
$producer = $this->container->get('enqueue.client.producer');
101101

102-
$result = $producer->sendCommand('theCommand', 'theMessage', true);
102+
$message = new Message('theMessage');
103103

104-
$this->assertInstanceOf(Promise::class, $result);
104+
$result = $producer->sendCommand('theExclusiveCommandName', $message, false);
105105

106-
$traces = $this->getTraceableProducer()->getCommandTraces('theCommand');
106+
$this->assertNull($result);
107+
108+
$traces = $this->getTraceableProducer()->getCommandTraces('theExclusiveCommandName');
107109

108110
$this->assertCount(1, $traces);
109111
$this->assertEquals('theMessage', $traces[0]['body']);
112+
$this->assertEquals([
113+
'enqueue.topic_name' => Config::COMMAND_TOPIC,
114+
'enqueue.processor_name' => 'theExclusiveCommandName',
115+
'enqueue.command_name' => 'theExclusiveCommandName',
116+
'enqueue.processor_queue_name' => 'the_exclusive_command_queue',
117+
], $traces[0]['properties']);
110118
}
111119

112120
public function testShouldSendMessageInstanceCommandWithNeedForReply()

pkg/enqueue/Client/ConsumptionExtension/ExclusiveCommandExtension.php

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,17 @@ public function onPreReceived(Context $context)
4646
if ($message->getProperty(Config::PARAMETER_PROCESSOR_NAME)) {
4747
return;
4848
}
49+
if ($message->getProperty(Config::PARAMETER_COMMAND_NAME)) {
50+
return;
51+
}
4952

5053
if (array_key_exists($queue->getQueueName(), $this->queueNameToProcessorNameMap)) {
5154
$context->getLogger()->debug('[ExclusiveCommandExtension] This is a exclusive command queue and client\'s properties are not set. Setting them');
5255

5356
$message->setProperty(Config::PARAMETER_TOPIC_NAME, Config::COMMAND_TOPIC);
5457
$message->setProperty(Config::PARAMETER_PROCESSOR_QUEUE_NAME, $queue->getQueueName());
5558
$message->setProperty(Config::PARAMETER_PROCESSOR_NAME, $this->queueNameToProcessorNameMap[$queue->getQueueName()]);
59+
$message->setProperty(Config::PARAMETER_COMMAND_NAME, $this->queueNameToProcessorNameMap[$queue->getQueueName()]);
5660
}
5761
}
5862

@@ -65,13 +69,10 @@ public function onPreSend($topic, Message $message)
6569
return;
6670
}
6771

68-
// if ($message->getProperty(Config::PARAMETER_PROCESSOR_QUEUE_NAME)) {
69-
// return;
70-
// }
71-
72-
$processorName = $message->getProperty(Config::PARAMETER_PROCESSOR_NAME);
73-
if (array_key_exists($processorName, $this->processorNameToQueueNameMap)) {
74-
$message->setProperty(Config::PARAMETER_PROCESSOR_QUEUE_NAME, $this->processorNameToQueueNameMap[$processorName]);
72+
$commandName = $message->getProperty(Config::PARAMETER_COMMAND_NAME);
73+
if (array_key_exists($commandName, $this->processorNameToQueueNameMap)) {
74+
$message->setProperty(Config::PARAMETER_PROCESSOR_NAME, $commandName);
75+
$message->setProperty(Config::PARAMETER_PROCESSOR_QUEUE_NAME, $this->processorNameToQueueNameMap[$commandName]);
7576
}
7677
}
7778

pkg/enqueue/Tests/Client/ConsumptionExtension/ExclusiveCommandExtensionTest.php

Lines changed: 58 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44

55
use Enqueue\Client\Config;
66
use Enqueue\Client\ConsumptionExtension\ExclusiveCommandExtension;
7+
use Enqueue\Client\ExtensionInterface as ClientExtensionInterface;
8+
use Enqueue\Client\Message;
79
use Enqueue\Consumption\Context;
8-
use Enqueue\Consumption\ExtensionInterface;
10+
use Enqueue\Consumption\ExtensionInterface as ConsumptionExtensionInterface;
911
use Enqueue\Null\NullContext;
1012
use Enqueue\Null\NullMessage;
1113
use Enqueue\Null\NullQueue;
@@ -17,9 +19,14 @@ class ExclusiveCommandExtensionTest extends TestCase
1719
{
1820
use ClassExtensionTrait;
1921

20-
public function testShouldImplementExtensionInterface()
22+
public function testShouldImplementConsumptionExtensionInterface()
2123
{
22-
$this->assertClassImplements(ExtensionInterface::class, ExclusiveCommandExtension::class);
24+
$this->assertClassImplements(ConsumptionExtensionInterface::class, ExclusiveCommandExtension::class);
25+
}
26+
27+
public function testShouldImplementClientExtensionInterface()
28+
{
29+
$this->assertClassImplements(ClientExtensionInterface::class, ExclusiveCommandExtension::class);
2330
}
2431

2532
public function testCouldBeConstructedWithQueueNameToProcessorNameMap()
@@ -134,6 +141,54 @@ public function testShouldSetCommandPropertiesIfCurrentQueueInTheMap()
134141
'enqueue.topic_name' => '__command__',
135142
'enqueue.processor_queue_name' => 'aFooQueueName',
136143
'enqueue.processor_name' => 'aFooProcessorName',
144+
'enqueue.command_name' => 'aFooProcessorName',
145+
], $message->getProperties());
146+
}
147+
148+
public function testShouldDoNothingOnPreSendIfTopicNotCommandOne()
149+
{
150+
$message = new Message();
151+
152+
$extension = new ExclusiveCommandExtension([
153+
'aFooQueueName' => 'aFooProcessorName',
154+
]);
155+
156+
$extension->onPreSend('aTopic', $message);
157+
158+
$this->assertEquals([], $message->getProperties());
159+
}
160+
161+
public function testShouldDoNothingIfCommandNotExclusive()
162+
{
163+
$message = new Message();
164+
$message->setProperty(Config::PARAMETER_COMMAND_NAME, 'theBarProcessorName');
165+
166+
$extension = new ExclusiveCommandExtension([
167+
'aFooQueueName' => 'aFooProcessorName',
168+
]);
169+
170+
$extension->onPreSend(Config::COMMAND_TOPIC, $message);
171+
172+
$this->assertEquals([
173+
'enqueue.command_name' => 'theBarProcessorName',
174+
], $message->getProperties());
175+
}
176+
177+
public function testShouldForceExclusiveCommandQueue()
178+
{
179+
$message = new Message();
180+
$message->setProperty(Config::PARAMETER_COMMAND_NAME, 'aFooProcessorName');
181+
182+
$extension = new ExclusiveCommandExtension([
183+
'aFooQueueName' => 'aFooProcessorName',
184+
]);
185+
186+
$extension->onPreSend(Config::COMMAND_TOPIC, $message);
187+
188+
$this->assertEquals([
189+
'enqueue.command_name' => 'aFooProcessorName',
190+
'enqueue.processor_name' => 'aFooProcessorName',
191+
'enqueue.processor_queue_name' => 'aFooQueueName',
137192
], $message->getProperties());
138193
}
139194
}

0 commit comments

Comments
 (0)