Skip to content

Commit 2ca0c19

Browse files
author
Keith Kirk
committed
reverting #54 and adding additional tests
1 parent 4644873 commit 2ca0c19

7 files changed

Lines changed: 91 additions & 34 deletions

File tree

src/Command/QueueReceiveCommand.php

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -76,19 +76,16 @@ private function pollQueue($registry, $name)
7676
);
7777
}
7878

79-
$provider = $registry->get($name);
80-
$messages = $provider->receive();
81-
$count = sizeof($messages);
82-
foreach ($messages as $message) {
83-
84-
$messageEvent = new MessageEvent($name, $message);
85-
$dispatcher = $this->getContainer()->get('event_dispatcher');
79+
$dispatcher = $this->getContainer()->get('event_dispatcher');
80+
$messages = $registry->get($name)->receive();
8681

82+
foreach ($messages as $message) {
83+
$messageEvent = new MessageEvent($name, $message);
8784
$dispatcher->dispatch(Events::Message($name), $messageEvent);
8885
}
8986

9087
$msg = "<info>Finished polling %s Queue, %d messages fetched.</info>";
91-
$this->output->writeln(sprintf($msg, $name, $count));
88+
$this->output->writeln(sprintf($msg, $name, sizeof($messages)));
9289

9390
return 0;
9491
}

src/DependencyInjection/Configuration.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ public function getConfigTreeBuilder()
5454

5555
private function getProvidersNode()
5656
{
57-
$treeBuilder = new TreeBuilder();
58-
$node = $treeBuilder->root('providers');
57+
$treeBuilder = new TreeBuilder();
58+
$node = $treeBuilder->root('providers');
5959

6060
$node
6161
->children()
@@ -97,8 +97,8 @@ private function getProvidersNode()
9797

9898
private function getQueuesNode()
9999
{
100-
$treeBuilder = new TreeBuilder();
101-
$node = $treeBuilder->root('queues');
100+
$treeBuilder = new TreeBuilder();
101+
$node = $treeBuilder->root('queues');
102102

103103
$node
104104
->requiresAtLeastOneElement()
@@ -161,8 +161,8 @@ private function getQueuesNode()
161161

162162
private function getSubscribersNode()
163163
{
164-
$treeBuilder = new TreeBuilder();
165-
$node = $treeBuilder->root('subscribers');
164+
$treeBuilder = new TreeBuilder();
165+
$node = $treeBuilder->root('subscribers');
166166

167167
$node
168168
->prototype('array')

src/EventListener/RequestListener.php

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,15 +87,22 @@ private function handleIronMqNotifications(GetResponseEvent $event)
8787

8888
// We add the message in an array with Queue as the property name
8989
$message = json_decode($event->getRequest()->getContent(), true);
90-
$queue = key($message);
90+
91+
if (empty($message['_qpush_queue'])) {
92+
return;
93+
}
94+
95+
$queue = $message['_qpush_queue'];
9196
$metadata = [
92-
'iron-subscriber-message-id' => $headers->get('iron-subscriber-message-id'),
93-
'iron-subscriber-message-url' => $headers->get('iron-subscriber-message-url')
97+
'iron-subscriber-message-id' => $headers->get('iron-subscriber-message-id'),
98+
'iron-subscriber-message-url' => $headers->get('iron-subscriber-message-url')
9499
];
95100

101+
unset($message['_qpush_queue']);
102+
96103
$notification = new Notification(
97104
$messageId,
98-
$message[$queue],
105+
$message,
99106
$metadata
100107
);
101108

src/Provider/IronMqProvider.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ public function publish(array $message, array $options = [])
140140

141141
$result = $this->ironmq->postMessage(
142142
$this->getNameWithPrefix(),
143-
json_encode($message),
143+
json_encode($message + ['_qpush_queue' => $this->name]),
144144
[
145145
'timeout' => $options['message_timeout'],
146146
'delay' => $options['message_delay'],
@@ -183,14 +183,16 @@ public function receive(array $options = [])
183183
// Convert to Message Class
184184
foreach ($messages as &$message) {
185185
$id = $message->id;
186-
$body = $message->body;
186+
$body = json_decode($message->body, true);
187187
$metadata = [
188188
'timeout' => $message->timeout,
189189
'reserved_count' => $message->reserved_count,
190190
'push_status' => $message->push_status
191191
];
192192

193-
$message = new Message($id, $body, $metadata);
193+
unset($body['_qpush_queue']);
194+
195+
$message = new Message($id, json_encode($body), $metadata);
194196

195197
$this->log(200, "Message has been received.", ['message_id' => $id]);
196198
}

tests/EventListener/RequestListenerTest.php

Lines changed: 58 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
use Symfony\Component\HttpKernel\KernelEvents;
3030
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
3131
use Uecode\Bundle\QPushBundle\EventListener\RequestListener;
32+
use Uecode\Bundle\QPushBundle\Event\Events as QPushEvents;
33+
use Uecode\Bundle\QPushBundle\Event\NotificationEvent;
3234

3335
/**
3436
* @author Keith Kirk <kkirk@undergroundelephant.com>
@@ -47,11 +49,14 @@ class RequestListenerTest extends \PHPUnit_Framework_TestCase
4749

4850
public function setUp()
4951
{
50-
$listener = new RequestListener($this->getMock('Symfony\Component\EventDispatcher\EventDispatcherInterface'));
5152
$this->dispatcher = new EventDispatcher('UTF-8');
53+
$listener = new RequestListener($this->dispatcher);
54+
5255
$this->dispatcher->addListener(KernelEvents::REQUEST, [$listener, 'onKernelRequest']);
56+
$this->dispatcher->addListener(QPushEvents::Notification('ironmq-test'), [$this, 'IronMqOnNotificationReceived']);
57+
$this->dispatcher->addListener(QPushEvents::Notification('aws-test'), [$this, 'AwsOnNotificationReceived']);
5358

54-
$this->kernel = $this->getMock('Symfony\Component\HttpKernel\HttpKernelInterface');
59+
$this->kernel = $this->getMock('Symfony\Component\HttpKernel\HttpKernelInterface');
5560
}
5661

5762
public function testListenerDoesNothingForSubRequests()
@@ -64,9 +69,9 @@ public function testListenerDoesNothingForSubRequests()
6469

6570
public function testListenerHandlesIronMQMessageRequests()
6671
{
67-
$message = ['test' => '{"foo": "bar"}'];
72+
$message = '{"foo": "bar","_qpush_queue":"ironmq-test"}';
6873

69-
$request = new Request([],[],[],[],[],[], json_encode($message));
74+
$request = new Request([],[],[],[],[],[], $message);
7075
$request->headers->set('iron-message-id', 123);
7176
$request->headers->set('iron-subscriber-message-id', 456);
7277
$request->headers->set('iron-subscriber-message-url', 'http://foo.bar');
@@ -78,27 +83,70 @@ public function testListenerHandlesIronMQMessageRequests()
7883
$this->assertEquals("IronMQ Notification Received.", $event->getResponse()->getContent());
7984
}
8085

86+
public function IronMqOnNotificationReceived(NotificationEvent $event)
87+
{
88+
$notification = $event->getNotification();
89+
$this->assertInstanceOf('\Uecode\Bundle\QPushBundle\Message\Notification', $notification);
90+
91+
$this->assertEquals(123, $notification->getId());
92+
93+
$this->assertInternalType('array', $notification->getBody());
94+
$this->assertEquals($notification->getBody(), ['foo' => 'bar']);
95+
96+
$this->assertInstanceOf('\Doctrine\Common\Collections\ArrayCollection', $notification->getMetadata());
97+
$this->assertEquals(
98+
[
99+
'iron-subscriber-message-id' => 456,
100+
'iron-subscriber-message-url' => 'http://foo.bar'
101+
],
102+
$notification->getMetadata()->toArray()
103+
);
104+
}
105+
81106
public function testListenerHandlesAwsNotificationRequests()
82107
{
83108
$message = [
84109
'Type' => 'Notification',
85110
'MessageId' => 123,
86111
'TopicArn' => 'SomeArn',
87-
'Subject' => 'Test',
88-
'Message' => 'Test Message',
89-
'Timestamp' => date('Y-m-d H:i:s')
112+
'Subject' => 'aws-test',
113+
'Message' => '{"foo": "bar"}',
114+
'Timestamp' => date('Y-m-d H:i:s', 1422040603)
90115
];
91116

92117
$request = new Request([],[],[],[],[],[], json_encode($message));
93118
$request->headers->set('x-amz-sns-message-type', 'Notification');
94119

95120
$event = new GetResponseEvent($this->kernel, $request, HttpKernelInterface::MASTER_REQUEST);
121+
96122
$this->dispatcher->dispatch(KernelEvents::REQUEST, $event);
97123

98124
$this->assertTrue($event->hasResponse());
99125
$this->assertEquals("SNS Message Notification Received.", $event->getResponse()->getContent());
100126
}
101127

128+
public function AwsOnNotificationReceived(NotificationEvent $event)
129+
{
130+
$notification = $event->getNotification();
131+
$this->assertInstanceOf('\Uecode\Bundle\QPushBundle\Message\Notification', $notification);
132+
133+
$this->assertEquals(123, $notification->getId());
134+
135+
$this->assertInternalType('array', $notification->getBody());
136+
$this->assertEquals($notification->getBody(), ['foo' => 'bar']);
137+
138+
$this->assertInstanceOf('\Doctrine\Common\Collections\ArrayCollection', $notification->getMetadata());
139+
$this->assertEquals(
140+
[
141+
'Type' => 'Notification',
142+
'TopicArn' => 'SomeArn',
143+
'Timestamp' => date('Y-m-d H:i:s', 1422040603),
144+
'Subject' => 'aws-test'
145+
],
146+
$notification->getMetadata()->toArray()
147+
);
148+
}
149+
102150
public function testListenerHandlesAwsSubscriptionRequests()
103151
{
104152
$message = [
@@ -107,9 +155,9 @@ public function testListenerHandlesAwsSubscriptionRequests()
107155
'Token' => 456,
108156
'TopicArn' => 'SomeArn',
109157
'SubscribeUrl' => 'http://foo.bar',
110-
'Subject' => 'Test',
111-
'Message' => 'Test Message',
112-
'Timestamp' => date('Y-m-d H:i:s')
158+
'Subject' => 'aws-test',
159+
'Message' => '{"foo": "bar"}',
160+
'Timestamp' => date('Y-m-d H:i:s', 1422040603)
113161
];
114162

115163
$request = new Request([],[],[],[],[],[], json_encode($message));

tests/MockClient/IronMqMockClient.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public function postMessage($queue, $message, $options)
6464
{
6565
$response = new \stdClass;
6666
$response->id = 123;
67-
$response->ids = [ 123 ];
67+
$response->ids = [123];
6868
$response->msg = "Messages put on queue.";
6969

7070
return $response;
@@ -74,7 +74,7 @@ public function getMessages($queue, $count, $timeout)
7474
{
7575
$response = new \stdClass;
7676
$response->id = 123;
77-
$response->body = '{"test":{"foo":"bar"}}';
77+
$response->body = '{"foo":"bar","_qpush_queue":"test"}';
7878
$response->timeout = 60;
7979
$response->reserved_count = 1;
8080
$response->push_status = new \stdClass;

tests/Provider/IronMqProviderTest.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,9 @@ public function testPublish()
152152

153153
public function testReceive()
154154
{
155-
$this->assertTrue(is_array($this->provider->receive()));
155+
$messages = $this->provider->receive();
156+
$this->assertInternalType('array', $messages);
157+
$this->assertEquals(['foo' => 'bar'], $messages[0]->getBody());
156158
}
157159

158160
public function testDelete()
@@ -177,6 +179,7 @@ public function testOnNotification()
177179
NotificationEvent::TYPE_MESSAGE,
178180
new Notification(123, "test", [])
179181
);
182+
180183
$event->setDispatcher(
181184
$this->getMock('Symfony\Component\EventDispatcher\EventDispatcherInterface')
182185
);

0 commit comments

Comments
 (0)