|
| 1 | +<?php |
| 2 | + |
| 3 | +use Mockery as m; |
| 4 | + |
| 5 | +use Aws\Sqs\SqsClient; |
| 6 | +use Guzzle\Service\Resource\Model; |
| 7 | + |
| 8 | +class QueueSqsQueueTest extends PHPUnit_Framework_TestCase { |
| 9 | + |
| 10 | + public function tearDown() |
| 11 | + { |
| 12 | + m::close(); |
| 13 | + } |
| 14 | + |
| 15 | + public function setUp() { |
| 16 | + |
| 17 | + // Use Mockery to mock the SqsClient |
| 18 | + $this->sqs = m::mock('Aws\Sqs\SqsClient'); |
| 19 | + |
| 20 | + $this->account = '1234567891011'; |
| 21 | + $this->queueName = 'emails'; |
| 22 | + $this->baseUrl = 'https://sqs.someregion.amazonaws.com'; |
| 23 | + |
| 24 | + // This is how the modified getQueue builds the queueUrl |
| 25 | + $this->queueUrl = $this->baseUrl . '/' . $this->account . '/' . $this->queueName; |
| 26 | + |
| 27 | + $this->mockedJob = 'foo'; |
| 28 | + $this->mockedData = array('data'); |
| 29 | + $this->mockedPayload = json_encode(array('job' => $this->mockedJob, 'data' => $this->mockedData)); |
| 30 | + $this->mockedDelay = 10; |
| 31 | + $this->mockedDateTime = m::mock('DateTime'); |
| 32 | + $this->mockedMessageId = 'e3cd03ee-59a3-4ad8-b0aa-ee2e3808ac81'; |
| 33 | + $this->mockedReceiptHandle = '0NNAq8PwvXuWv5gMtS9DJ8qEdyiUwbAjpp45w2m6M4SJ1Y+PxCh7R930NRB8ylSacEmoSnW18bgd4nK\/O6ctE+VFVul4eD23mA07vVoSnPI4F\/voI1eNCp6Iax0ktGmhlNVzBwaZHEr91BRtqTRM3QKd2ASF8u+IQaSwyl\/DGK+P1+dqUOodvOVtExJwdyDLy1glZVgm85Yw9Jf5yZEEErqRwzYz\/qSigdvW4sm2l7e4phRol\/+IjMtovOyH\/ukueYdlVbQ4OshQLENhUKe7RNN5i6bE\/e5x9bnPhfj2gbM'; |
| 34 | + |
| 35 | + $this->mockedSendMessageResponseModel = new Model(array('Body' => $this->mockedPayload, |
| 36 | + 'MD5OfBody' => md5($this->mockedPayload), |
| 37 | + 'ReceiptHandle' => $this->mockedReceiptHandle, |
| 38 | + 'MessageId' => $this->mockedMessageId, |
| 39 | + 'Attributes' => array('ApproximateReceiveCount' => 1))); |
| 40 | + |
| 41 | + $this->mockedReceiveMessageResponseModel = new Model(array('Messages' => array( 0 => array( |
| 42 | + 'Body' => $this->mockedPayload, |
| 43 | + 'MD5OfBody' => md5($this->mockedPayload), |
| 44 | + 'ReceiptHandle' => $this->mockedReceiptHandle, |
| 45 | + 'MessageId' => $this->mockedMessageId)))); |
| 46 | + } |
| 47 | + |
| 48 | + public function testPopProperlyPopsJobOffOfSqs() |
| 49 | + { |
| 50 | + $queue = $this->getMock('Illuminate\Queue\SqsQueue', array('getQueue'), array($this->sqs, $this->queueName, $this->account)); |
| 51 | + $queue->setContainer(m::mock('Illuminate\Container\Container')); |
| 52 | + $queue->expects($this->once())->method('getQueue')->with($this->queueName)->will($this->returnValue($this->queueUrl)); |
| 53 | + $this->sqs->shouldReceive('receiveMessage')->once()->with(array('QueueUrl' => $this->queueUrl, 'AttributeNames' => array('ApproximateReceiveCount')))->andReturn($this->mockedReceiveMessageResponseModel); |
| 54 | + $result = $queue->pop($this->queueName); |
| 55 | + $this->assertInstanceOf('Illuminate\Queue\Jobs\SqsJob', $result); |
| 56 | + } |
| 57 | + |
| 58 | + public function testDelayedPushWithDateTimeProperlyPushesJobOntoSqs() |
| 59 | + { |
| 60 | + $queue = $this->getMock('Illuminate\Queue\SqsQueue', array('createPayload', 'getSeconds', 'getQueue'), array($this->sqs, $this->queueName, $this->account)); |
| 61 | + $queue->expects($this->once())->method('createPayload')->with($this->mockedJob, $this->mockedData)->will($this->returnValue($this->mockedPayload)); |
| 62 | + $queue->expects($this->once())->method('getSeconds')->with($this->mockedDateTime)->will($this->returnValue($this->mockedDateTime)); |
| 63 | + $queue->expects($this->once())->method('getQueue')->with($this->queueName)->will($this->returnValue($this->queueUrl)); |
| 64 | + $this->sqs->shouldReceive('sendMessage')->once()->with(array('QueueUrl' => $this->queueUrl, 'MessageBody' => $this->mockedPayload, 'DelaySeconds' => $this->mockedDateTime))->andReturn($this->mockedSendMessageResponseModel); |
| 65 | + $id = $queue->later($this->mockedDateTime, $this->mockedJob, $this->mockedData, $this->queueName); |
| 66 | + $this->assertEquals($this->mockedMessageId, $id); |
| 67 | + } |
| 68 | + |
| 69 | + public function testDelayedPushProperlyPushesJobOntoSqs() |
| 70 | + { |
| 71 | + $queue = $this->getMock('Illuminate\Queue\SqsQueue', array('createPayload', 'getSeconds', 'getQueue'), array($this->sqs, $this->queueName, $this->account)); |
| 72 | + $queue->expects($this->once())->method('createPayload')->with($this->mockedJob, $this->mockedData)->will($this->returnValue($this->mockedPayload)); |
| 73 | + $queue->expects($this->once())->method('getSeconds')->with($this->mockedDelay)->will($this->returnValue($this->mockedDelay)); |
| 74 | + $queue->expects($this->once())->method('getQueue')->with($this->queueName)->will($this->returnValue($this->queueUrl)); |
| 75 | + $this->sqs->shouldReceive('sendMessage')->once()->with(array('QueueUrl' => $this->queueUrl, 'MessageBody' => $this->mockedPayload, 'DelaySeconds' => $this->mockedDelay))->andReturn($this->mockedSendMessageResponseModel); |
| 76 | + $id = $queue->later($this->mockedDelay, $this->mockedJob, $this->mockedData, $this->queueName); |
| 77 | + $this->assertEquals($this->mockedMessageId, $id); |
| 78 | + } |
| 79 | + |
| 80 | + public function testPushProperlyPushesJobOntoSqs() |
| 81 | + { |
| 82 | + $queue = $this->getMock('Illuminate\Queue\SqsQueue', array('createPayload', 'getQueue'), array($this->sqs, $this->queueName, $this->account)); |
| 83 | + $queue->expects($this->once())->method('createPayload')->with($this->mockedJob, $this->mockedData)->will($this->returnValue($this->mockedPayload)); |
| 84 | + $queue->expects($this->once())->method('getQueue')->with($this->queueName)->will($this->returnValue($this->queueUrl)); |
| 85 | + $this->sqs->shouldReceive('sendMessage')->once()->with(array('QueueUrl' => $this->queueUrl, 'MessageBody' => $this->mockedPayload))->andReturn($this->mockedSendMessageResponseModel); |
| 86 | + $id = $queue->push($this->mockedJob, $this->mockedData, $this->queueName); |
| 87 | + $this->assertEquals($this->mockedMessageId, $id); |
| 88 | + } |
| 89 | +} |
0 commit comments