1 | <?php |
||
9 | class PdoQueueStoreAdapterTest extends AbstractMySqlDatabaseTestCase |
||
10 | { |
||
11 | /** |
||
12 | * @var PdoQueueStoreAdapter |
||
13 | */ |
||
14 | private $pdoQueueStore; |
||
15 | |||
16 | protected function setUp() |
||
17 | { |
||
18 | parent::setUp(); |
||
19 | |||
20 | $this->pdoQueueStore = new PdoQueueStoreAdapter(self::getPdoQueueStoreConnection()); |
||
21 | } |
||
22 | |||
23 | public function testEnqueueDequeueAndAcknowledge() |
||
24 | { |
||
25 | $mailJob = FixtureHelper::getPdoMailJob(); |
||
26 | |||
27 | $this->assertSame($this->pdoQueueStore, $this->pdoQueueStore->init()); |
||
28 | |||
29 | $this->assertTrue($this->pdoQueueStore->enqueue($mailJob)); |
||
30 | |||
31 | $this->assertTrue($this->pdoQueueStore->isEmpty() === false); |
||
32 | |||
33 | $mailJob = $this->pdoQueueStore->dequeue(); |
||
34 | |||
35 | $this->assertTrue($this->pdoQueueStore->isEmpty() === true); // message set to 'A' on process |
||
36 | |||
37 | $this->assertTrue(!empty($mailJob->getMessage())); |
||
38 | |||
39 | $dequeuedMailMessage = MailMessage::fromArray(json_decode($mailJob->getMessage(), true)); |
||
40 | |||
41 | $this->assertEquals(FixtureHelper::getMailMessage(), $dequeuedMailMessage); |
||
42 | |||
43 | $mailJob->markAsCompleted(); |
||
44 | $this->pdoQueueStore->ack($mailJob); |
||
45 | |||
46 | $this->assertTrue($this->pdoQueueStore->dequeue() === null); |
||
47 | } |
||
48 | |||
49 | public function testAcknowledgementToUpdateMailJobs() |
||
50 | { |
||
51 | $mailJob = FixtureHelper::getPdoMailJob(); |
||
52 | |||
53 | $this->pdoQueueStore->enqueue($mailJob); |
||
54 | $this->assertTrue($this->pdoQueueStore->isEmpty() === false); |
||
55 | $dequedMailJob = $this->pdoQueueStore->dequeue(); |
||
56 | $this->assertTrue($this->pdoQueueStore->isEmpty() === true); |
||
57 | // enqueue it back to be able to get it |
||
58 | // we could actually set the time to be processed in the future :) |
||
59 | // lets simply update the increment |
||
60 | $dequedMailJob->incrementAttempt(); |
||
61 | $dequedMailJob->setTimeToSend(date('Y-m-d H:i:s', time() + 1)); |
||
62 | $this->assertEquals(1, $dequedMailJob->getAttempt()); |
||
63 | $dequedMailJob->markAsNew(); |
||
64 | $this->pdoQueueStore->ack($dequedMailJob); |
||
65 | sleep(1); |
||
66 | $this->assertTrue($this->pdoQueueStore->isEmpty() === false); |
||
67 | } |
||
68 | |||
69 | /** |
||
70 | * @expectedException \BadMethodCallException |
||
71 | */ |
||
72 | public function testBadMethodCallExceptionOnAck() |
||
73 | { |
||
74 | $mailJob = FixtureHelper::getPdoMailJob(); |
||
75 | $this->pdoQueueStore->ack($mailJob); |
||
76 | } |
||
77 | } |
||
78 |