Completed
Push — master ( e56856...67d12b )
by Antonio
04:26
created

MailMessageWorkerTest::testRunMethodOnFailureDueToException()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 38
Code Lines 26

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 38
rs 8.8571
cc 1
eloc 26
nc 1
nop 0
1
<?php
2
namespace Da\Mailer\Test\Queue\Cli;
3
4
use Da\Mailer\Event\Event;
5
use Da\Mailer\Mailer;
6
use Da\Mailer\Model\MailMessage;
7
use Da\Mailer\Queue\Cli\MailMessageWorker;
8
use Mockery;
9
use PHPUnit_Framework_TestCase;
10
use Swift_Message;
11
12
class MailMessageWorkerTest extends PHPUnit_Framework_TestCase
13
{
14
    public function testRunMethodOnSuccess()
15
    {
16
        $swift = new Swift_Message();
17
        $mockedMailMessage = Mockery::mock(MailMessage::class);
18
19
        $mockedMailMessage
20
            ->shouldReceive('asSwiftMessage')
21
            ->once()
22
            ->andReturn($swift);
23
24
        $mockedMailer = Mockery::mock(Mailer::class);
25
26
        $mockedMailer
27
            ->shouldReceive('sendSwiftMessage')
28
            ->once()
29
            ->with($swift)
30
            ->andReturn(null);
31
32
        $mailMessageWorker = new MailMessageWorker($mockedMailer, $mockedMailMessage);
33
        $eventResponse = null;
34
        $failedRecipientsResponse = 0;
35
36
        $handler = function (Event $event) use (&$eventResponse, &$failedRecipientsResponse) {
37
            $data = $event->getData();
38
            $eventResponse = $data[0];
39
            $failedRecipientsResponse = $data[1];
40
        };
41
        $onSuccessEvent = new Event($handler);
42
43
        $mailMessageWorker->attach('onSuccess', $onSuccessEvent);
44
45
        $mailMessageWorker->run();
46
47
        $this->assertEquals($eventResponse, $mockedMailMessage);
48
        $this->assertEquals($failedRecipientsResponse, null);
49
    }
50
51
    public function testRunMethodOnFailure()
52
    {
53
        $swift = new Swift_Message();
54
        $mockedMailMessage = Mockery::mock(MailMessage::class);
55
56
        $mockedMailMessage
57
            ->shouldReceive('asSwiftMessage')
58
            ->once()
59
            ->andReturn($swift);
60
61
        $mockedMailMessage->to = '[email protected]';
62
63
        $mockedMailer = Mockery::mock(Mailer::class);
64
65
        $mockedMailer
66
            ->shouldReceive('sendSwiftMessage')
67
            ->once()
68
            ->with($swift)
69
            ->andReturn(['[email protected]']);
70
71
        $mailMessageWorker = new MailMessageWorker($mockedMailer, $mockedMailMessage);
72
        $eventResponse = null;
73
        $failedRecipientsResponse = 0;
74
75
        $handler = function (Event $event) use (&$eventResponse, &$failedRecipientsResponse) {
76
            $data = $event->getData();
77
            $eventResponse = $data[0];
78
            $failedRecipientsResponse = $data[1];
79
        };
80
        $onSuccessEvent = new Event($handler);
81
82
        $mailMessageWorker->attach('onFailure', $onSuccessEvent);
83
84
        $mailMessageWorker->run();
85
86
        $this->assertEquals($eventResponse, $mockedMailMessage);
87
        $this->assertEquals($failedRecipientsResponse, ['[email protected]']);
88
    }
89
90
    public function testRunMethodOnFailureDueToException()
91
    {
92
        $swift = new Swift_Message();
93
        $mockedMailMessage = Mockery::mock(MailMessage::class);
94
95
        $mockedMailMessage
96
            ->shouldReceive('asSwiftMessage')
97
            ->once()
98
            ->andReturn($swift);
99
100
        $mockedMailMessage->to = '[email protected]';
101
102
        $mockedMailer = Mockery::mock(Mailer::class);
103
104
        $mockedMailer
105
            ->shouldReceive('sendSwiftMessage')
106
            ->once()
107
            ->with($swift)
108
            ->andThrow('Exception');
109
110
        $mailMessageWorker = new MailMessageWorker($mockedMailer, $mockedMailMessage);
111
        $eventResponse = null;
112
        $failedRecipientsResponse = 0;
113
114
        $handler = function (Event $event) use (&$eventResponse, &$failedRecipientsResponse) {
115
            $data = $event->getData();
116
            $eventResponse = $data[0];
117
            $failedRecipientsResponse = $data[1];
118
        };
119
        $onSuccessEvent = new Event($handler);
120
121
        $mailMessageWorker->attach('onFailure', $onSuccessEvent);
122
123
        $mailMessageWorker->run();
124
125
        $this->assertEquals($eventResponse, $mockedMailMessage);
126
        $this->assertEquals($failedRecipientsResponse, ['[email protected]']);
127
    }
128
}
129