2929use Symfony \Component \HttpKernel \KernelEvents ;
3030use Symfony \Component \HttpKernel \Event \GetResponseEvent ;
3131use 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 ));
0 commit comments