Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

100% code coverage again!!! #10

Merged
merged 9 commits into from
Jan 15, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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