Skip to content

Commit

Permalink
Merge pull request #10 from resurtm/sqs-more-tests
Browse files Browse the repository at this point in the history
100% code coverage again!!!
  • Loading branch information
Antonio Ramirez committed Jan 15, 2016
2 parents 9649083 + bb66652 commit 9eae130
Show file tree
Hide file tree
Showing 6 changed files with 254 additions and 7 deletions.
2 changes: 1 addition & 1 deletion src/Queue/Backend/Sqs/SqsMailJob.php
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ public function setDelaySeconds($delaySeconds)
*/
public function getVisibilityTimeout()
{
return $this->message;
return $this->visibilityTimeout;
}

/**
Expand Down
12 changes: 10 additions & 2 deletions tests/Fixture/FixtureHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
namespace Da\Mailer\Test\Fixture;

use Da\Mailer\Queue\Backend\Pdo\PdoMailJob;
use Da\Mailer\Queue\Backend\Sqs\SqsMailJob;
use Da\Mailer\Model\MailMessage;
use Da\Mailer\Transport\TransportInterface;

Expand All @@ -12,19 +13,26 @@ public static function getMailMessage()
return new MailMessage(self::getMailMessageSmtpConfigurationArray());
}

public static function getMailJob()
public static function getPdoMailJob()
{
return new PdoMailJob([
'message' => json_encode(self::getMailMessage())
]);
}

public static function getSqsMailJob()
{
return new SqsMailJob([
'message' => json_encode(self::getMailMessage())
]);
}

public static function getMySqlConnectionConfiguration()
{
return [
'connectionString' => 'mysql:host=localhost;dbname=mail_queue_test',
'username' => 'root',
'password' => ''
'password' => '',
];
}

Expand Down
6 changes: 3 additions & 3 deletions tests/Queue/Database/PdoQueueStoreAdapterTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ protected function setUp()

public function testEnqueueDequeueAndAcknowledge()
{
$mailJob = FixtureHelper::getMailJob();
$mailJob = FixtureHelper::getPdoMailJob();

$this->assertSame($this->pdoQueueStore, $this->pdoQueueStore->init());

Expand All @@ -48,7 +48,7 @@ public function testEnqueueDequeueAndAcknowledge()

public function testAcknowledgementToUpdateMailJobs()
{
$mailJob = FixtureHelper::getMailJob();
$mailJob = FixtureHelper::getPdoMailJob();

$this->pdoQueueStore->enqueue($mailJob);
$this->assertTrue($this->pdoQueueStore->isEmpty() === false);
Expand All @@ -71,7 +71,7 @@ public function testAcknowledgementToUpdateMailJobs()
*/
public function testBadMethodCallExceptionOnAck()
{
$mailJob = FixtureHelper::getMailJob();
$mailJob = FixtureHelper::getPdoMailJob();
$this->pdoQueueStore->ack($mailJob);
}
}
2 changes: 1 addition & 1 deletion tests/Queue/MailQueueTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ protected function setUp()

public function testPdoEnqueDequeueAndAcknowledge()
{
$mailJob = FixtureHelper::getMailJob();
$mailJob = FixtureHelper::getPdoMailJob();

$this->assertSame($this->pdoQueueAdapter, $this->mailQueuePdo->init());
$this->assertTrue($this->mailQueuePdo->enqueue($mailJob));
Expand Down
236 changes: 236 additions & 0 deletions tests/Queue/Sqs/SqsQueueStoreAdapterTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,236 @@
<?php
namespace Da\tests\Queue\Database;

use Da\Mailer\Test\Fixture\FixtureHelper;
use Da\Mailer\Model\MailMessage;
use Da\Mailer\Queue\Backend\Sqs\SqsQueueStoreAdapter;
use Da\Mailer\Queue\Backend\Sqs\SqsQueueStoreConnection;
use Aws\Sqs\SqsClient;
use Guzzle\Common\Collection;
use PHPUnit_Framework_TestCase;
use Mockery;

class SqsQueueStoreAdapterTest extends PHPUnit_Framework_TestCase
{
/**
* @var SqsQueueStoreAdapter
*/
private $sqsQueueStore1, $sqsQueueStore2;

protected function setUp()
{
// prepare sqs response collections - begin
$createQueueResult = new Collection([
'MessageId' => 'createQueueResultId',
'QueueUrl' => 'http://queue.url/path/',
]);

$sendMessageResult = new Collection([
'MessageId' => 'sendMessageResultId',
]);

$getQueueAttributesResult1 = new Collection([
'MessageId' => 'getQueueAttributesResult1Id',
'Attributes' => [
'ApproximateNumberOfMessages' => 1,
],
]);
$getQueueAttributesResult2 = new Collection([
'MessageId' => 'getQueueAttributesResult2Id',
'Attributes' => [
'ApproximateNumberOfMessages' => 0,
],
]);

$receiveMessageResult1 = new Collection([
'Messages' => [
[
'MessageId' => 'receiveMessageResult1Id',
'ReceiptHandle' => 'receiveMessageResult1Handle',
'Body' => json_encode(FixtureHelper::getMailMessage()),
],
],
]);
$receiveMessageResult2 = new Collection([
// no message(s) returned by Amazon SQS
]);
// prepare sqs response collections - end

// ------------------------------------------------------------

// prepare queue store 1 - begin
/** @var SqsClient $sqsClient1 */
$sqsClient1 = Mockery::mock('\Aws\Sqs\SqsClient')
->shouldReceive('createQueue')
->with(Mockery::mustBe([
'QueueName' => 'testing_queue_1',
]))
->andReturn($createQueueResult)
->shouldReceive('sendMessage')
->with(Mockery::mustBe([
'QueueUrl' => 'http://queue.url/path/',
'MessageBody' => json_encode(FixtureHelper::getMailMessage()),
'DelaySeconds' => null,
]))
->andReturn($sendMessageResult)
->shouldReceive('getQueueAttributes')
->with(Mockery::mustBe([
'QueueUrl' => 'http://queue.url/path/',
'AttributeNames' => ['ApproximateNumberOfMessages'],
]))
->andReturn($getQueueAttributesResult1, $getQueueAttributesResult2)
->shouldReceive('receiveMessage')
->with(Mockery::mustBe([
'QueueUrl' => 'http://queue.url/path/',
]))
->andReturn($receiveMessageResult1, $receiveMessageResult2)
->shouldReceive('deleteMessage')
->with(Mockery::mustBe([
'QueueUrl' => 'http://queue.url/path/',
'ReceiptHandle' => 'receiveMessageResult1Handle',
]))
->getMock();

/** @var SqsQueueStoreConnection $sqsQueueStoreConnection1 */
$sqsQueueStoreConnection1 = Mockery::mock('\Da\Mailer\Queue\Backend\Sqs\SqsQueueStoreConnection')
->shouldReceive('connect')
->andReturnSelf()
->shouldReceive('getInstance')
->andReturn($sqsClient1)
->getMock();

$this->sqsQueueStore1 = new SqsQueueStoreAdapter($sqsQueueStoreConnection1, 'testing_queue_1');
// prepare queue store 1 - end

// ------------------------------------------------------------

// prepare queue store 2 - begin
/** @var SqsClient $sqsClient1 */
$sqsClient2 = Mockery::mock('\Aws\Sqs\SqsClient')
->shouldReceive('createQueue')
->with(Mockery::mustBe([
'QueueName' => 'testing_queue_2',
]))
->andReturn($createQueueResult)
->shouldReceive('sendMessage')
->with(Mockery::mustBe([
'QueueUrl' => 'http://queue.url/path/',
'MessageBody' => json_encode(FixtureHelper::getMailMessage()),
'DelaySeconds' => null,
]))
->andReturn($sendMessageResult)
->shouldReceive('getQueueAttributes')
->with(Mockery::mustBe([
'QueueUrl' => 'http://queue.url/path/',
'AttributeNames' => ['ApproximateNumberOfMessages'],
]))
->andReturn($getQueueAttributesResult1, $getQueueAttributesResult2, $getQueueAttributesResult1)
->shouldReceive('receiveMessage')
->with(Mockery::mustBe([
'QueueUrl' => 'http://queue.url/path/',
]))
->andReturn($receiveMessageResult1, $receiveMessageResult2)
->shouldReceive('changeMessageVisibility')
->with(Mockery::mustBe([
'QueueUrl' => 'http://queue.url/path/',
'ReceiptHandle' => 'receiveMessageResult1Handle',
'VisibilityTimeout' => 5,
]))
->getMock();

/** @var SqsQueueStoreConnection $sqsQueueStoreConnection1 */
$sqsQueueStoreConnection1 = Mockery::mock('\Da\Mailer\Queue\Backend\Sqs\SqsQueueStoreConnection')
->shouldReceive('connect')
->andReturnSelf()
->shouldReceive('getInstance')
->andReturn($sqsClient2)
->getMock();

$this->sqsQueueStore2 = new SqsQueueStoreAdapter($sqsQueueStoreConnection1, 'testing_queue_2');
// prepare queue store 2 - end
}

public function tearDown()
{
Mockery::close();

parent::tearDown();
}

public function testEnqueueDequeueAndAcknowledge()
{
$mailJob = FixtureHelper::getSqsMailJob();

$this->assertSame($this->sqsQueueStore1, $this->sqsQueueStore1->init());

$this->assertTrue($this->sqsQueueStore1->enqueue($mailJob));

$this->assertFalse($this->sqsQueueStore1->isEmpty());

$mailJob = $this->sqsQueueStore1->dequeue();
$this->assertNull($this->sqsQueueStore1->dequeue());
$this->assertSame('receiveMessageResult1Id', $mailJob->getId());

$this->assertTrue($this->sqsQueueStore1->isEmpty());

$this->assertTrue(!empty($mailJob->getMessage()));

$dequeuedMailMessage = MailMessage::fromArray(json_decode($mailJob->getMessage(), true));

$this->assertEquals(FixtureHelper::getMailMessage(), $dequeuedMailMessage);

$mailJob->setDeleted(true);
$this->sqsQueueStore1->ack($mailJob);

$this->assertNull($this->sqsQueueStore1->dequeue());
}

public function testAcknowledgementToUpdateMailJobs()
{
$mailJob = FixtureHelper::getSqsMailJob();

$this->sqsQueueStore2->enqueue($mailJob);
$this->assertFalse($this->sqsQueueStore2->isEmpty());
$dequedMailJob = $this->sqsQueueStore2->dequeue();
$this->assertNull($this->sqsQueueStore2->dequeue());
$this->assertTrue($this->sqsQueueStore2->isEmpty());
// set visibility timeout to five seconds
$dequedMailJob->setVisibilityTimeout(5);
$this->assertEquals(5, $dequedMailJob->getVisibilityTimeout());
$this->sqsQueueStore2->ack($dequedMailJob);
$this->assertFalse($this->sqsQueueStore2->isEmpty());
}

public function testDoNothingWithMailJob()
{
$mailJob = FixtureHelper::getSqsMailJob();

$this->sqsQueueStore2->enqueue($mailJob);
$this->assertFalse($this->sqsQueueStore2->isEmpty());
$dequedMailJob = $this->sqsQueueStore2->dequeue();
$this->assertNull($this->sqsQueueStore2->dequeue());
$this->assertTrue($this->sqsQueueStore2->isEmpty());
$this->assertFalse($this->sqsQueueStore2->ack($dequedMailJob));
$this->assertFalse($this->sqsQueueStore2->isEmpty());
}

/**
* @expectedException \BadMethodCallException
*/
public function testBadMethodCallExceptionOnAck()
{
$mailJob = FixtureHelper::getPdoMailJob();
$this->sqsQueueStore1->ack($mailJob);
}

/**
* @expectedException \BadMethodCallException
*/
public function testBadMethodCallExceptionOnSetDelaySeconds()
{
$mailJob = FixtureHelper::getSqsMailJob();
$mailJob->setDelaySeconds(900);
$this->assertEquals(900, $mailJob->getDelaySeconds());
$mailJob->setDelaySeconds(901);
}
}
3 changes: 3 additions & 0 deletions tests/Queue/Sqs/SqsQueueStoreConnectionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@ public function testConnect()
'region' => 'eu-north-99',
]);

$this->assertTrue($connection->getInstance() instanceof SqsClient);
$this->assertSame($connection, $connection->connect());
$this->assertTrue($connection->getInstance() instanceof SqsClient);
$this->assertSame($connection, $connection->connect());
$this->assertTrue($connection->getInstance() instanceof SqsClient);
}
Expand Down

0 comments on commit 9eae130

Please sign in to comment.