Completed
Push — master ( 9eae13...e56856 )
by Antonio
04:26
created

MailQueueTest::testPdoEnqueDequeueAndAcknowledge()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 24
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 24
rs 8.9713
cc 1
eloc 14
nc 1
nop 0
1
<?php
2
namespace Da\Mailer\Test\Queue;
3
4
use Da\Mailer\Model\MailMessage;
5
use Da\Mailer\Queue\Backend\Pdo\PdoMailJob;
6
use Da\Mailer\Queue\Backend\Pdo\PdoQueueStoreAdapter;
7
use Da\Mailer\Queue\MailQueue;
8
use Da\Mailer\Security\Cypher;
9
use Da\Mailer\Test\AbstractMySqlDatabaseTestCase;
10
use Da\Mailer\Test\Fixture\FixtureHelper;
11
12
class MailQueueTest extends AbstractMySqlDatabaseTestCase
13
{
14
    /**
15
     * @var MailQueue
16
     */
17
    private $mailQueuePdo;
18
    /**
19
     * @var PdoQueueStoreAdapter
20
     */
21
    private $pdoQueueAdapter;
22
23
    protected function setUp()
24
    {
25
        parent::setUp();
26
        $this->pdoQueueAdapter = new PdoQueueStoreAdapter(self::getPdoQueueStoreConnection());
27
        $this->mailQueuePdo = new MailQueue($this->pdoQueueAdapter);
28
    }
29
30
    public function testPdoEnqueDequeueAndAcknowledge()
31
    {
32
        $mailJob = FixtureHelper::getPdoMailJob();
33
34
        $this->assertSame($this->pdoQueueAdapter, $this->mailQueuePdo->init());
35
        $this->assertEquals(self::getPdoQueueStoreConnection(), $this->mailQueuePdo->getConnection());
36
        $this->assertTrue($this->mailQueuePdo->enqueue($mailJob));
37
        $this->assertTrue($this->mailQueuePdo->isEmpty() === false);
38
39
        $mailJob = $this->mailQueuePdo->dequeue();
40
41
        $this->assertTrue($this->mailQueuePdo->isEmpty() === true);
42
43
        $this->assertTrue(!empty($mailJob->getMessage()));
44
45
        $dequeuedMailMessage = MailMessage::fromArray(json_decode($mailJob->getMessage(), true));
46
47
        $this->assertEquals(FixtureHelper::getMailMessage(), $dequeuedMailMessage);
48
49
        $mailJob->markAsCompleted();
50
        $this->mailQueuePdo->ack($mailJob);
51
52
        $this->assertTrue($this->mailQueuePdo->dequeue() === null);
53
    }
54
55
    public function testPdoEnqueDequeueWithCypher()
56
    {
57
        $mailMessage = FixtureHelper::getMailMessage();
58
        $mailJob = new PdoMailJob(['message' => $mailMessage]);
59
        $cypher = new Cypher('I find your lack of faith disturbing.');
60
61
        $this->mailQueuePdo->setCypher($cypher);
62
        $this->assertSame($cypher, $this->mailQueuePdo->getCypher());
63
64
        $this->mailQueuePdo->init();
65
66
        $this->assertTrue($this->mailQueuePdo->enqueue($mailJob));
67
        $this->assertTrue($this->mailQueuePdo->isEmpty() === false);
68
69
        $dequeuedMailJob = $this->mailQueuePdo->dequeue();
70
71
        $this->assertTrue($dequeuedMailJob->isNewRecord() === false);
72
        $this->assertEquals($mailMessage, $dequeuedMailJob->getMessage());
73
    }
74
}
75