Passed
Push — v3_compat ( 23df76...881577 )
by Mateusz
04:16
created

SenderTest::testSendTriggersEvents()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 38
Code Lines 25

Duplication

Lines 0
Ratio 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
c 3
b 0
f 0
dl 0
loc 38
rs 8.8571
cc 1
eloc 25
nc 1
nop 0
1
<?php
2
/**
3
 * MtMail - e-mail module for Zend Framework 2
4
 *
5
 * @link      http://github.com/mtymek/MtMail
6
 * @copyright Copyright (c) 2013-2014 Mateusz Tymek
7
 * @license   BSD 2-Clause
8
 */
9
10
namespace MtMailTest\Service;
11
12
use MtMail\Event\SenderEvent;
13
use MtMail\Service\Sender;
14
use Zend\EventManager\EventManager;
15
use Zend\Mail\Message;
16
17
class SenderTest extends \PHPUnit_Framework_TestCase
18
{
19
    /**
20
     * @var Sender
21
     */
22
    protected $service;
23
24
    /**
25
     * @var array
26
     */
27
    protected $senderEventsTriggered = [];  
28
29
    public function setUp()
30
    {
31
        $transport = $this->getMock('Zend\Mail\Transport\TransportInterface');
32
        $this->service = new Sender($transport);
33
    }
34
35
    public function testSendPassesMessageToTransportObject()
36
    {
37
        $message = new Message();
38
        $transport = $this->getMock('Zend\Mail\Transport\TransportInterface', ['send']);
39
        $transport->expects($this->once())->method('send')
40
            ->with($message);
41
        $service = new Sender($transport);
42
        $service->send($message);
43
    }
44
45
    public function testServiceIsEventManagerAware()
46
    {
47
        $em = new EventManager();
48
        $this->service->setEventManager($em);
49
        $this->assertEquals($em, $this->service->getEventManager());
50
    }
51
52
    public function testSendTriggersEvents()
53
    {
54
        $transport = $this->getMock('Zend\Mail\Transport\TransportInterface', ['send']);
55
        $transport->expects($this->once())->method('send')
56
            ->with($this->isInstanceOf('Zend\Mail\Message'));
57
58
        $em = new EventManager();
59
        $listener = function ($event) {
60
            $this->assertInstanceOf(
61
                SenderEvent::class,
62
                $event,
63
                'Failed asserting event instance of ' . get_class($event) . 'is of type ' . SenderEvent::class
64
            );
65
            $this->senderEventsTriggered[] = $event->getName();
66
        };
67
68
        $em->attach(
69
            SenderEvent::EVENT_SEND_PRE,
70
            $listener
71
        );
72
        $em->attach(
73
            SenderEvent::EVENT_SEND_POST,
74
            $listener
75
        );
76
77
        $service = new Sender($transport);
78
        $service->setEventManager($em);
79
        $message = new Message();
80
        $service->send($message);
81
82
        $this->assertEquals(
83
            [
84
                SenderEvent::EVENT_SEND_PRE,
85
                SenderEvent::EVENT_SEND_POST,
86
            ],
87
            $this->senderEventsTriggered
88
        );
89
    }
90
}
91