SenderTest::testSendTriggersEvents()   B
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 37
Code Lines 24

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 37
rs 8.8571
cc 1
eloc 24
nc 1
nop 0
1
<?php
2
/**
3
 * MtMail - e-mail module for Zend Framework
4
 *
5
 * @link      http://github.com/mtymek/MtMail
6
 * @copyright Copyright (c) 2013-2017 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 Prophecy\Argument;
15
use Zend\EventManager\EventManager;
16
use Zend\Mail\Message;
17
use Zend\Mail\Transport\TransportInterface;
18
19
class SenderTest extends \PHPUnit\Framework\TestCase
20
{
21
    /**
22
     * @var Sender
23
     */
24
    protected $service;
25
26
    /**
27
     * @var array
28
     */
29
    protected $senderEventsTriggered = [];
30
31
    public function setUp()
32
    {
33
        $transport = $this->prophesize(TransportInterface::class);
34
        $this->service = new Sender($transport->reveal());
35
    }
36
37
    public function testSendPassesMessageToTransportObject()
38
    {
39
        $message = new Message();
40
        $transport = $this->prophesize(TransportInterface::class);
41
        $transport->send($message)->shouldBeCalled();
42
        $service = new Sender($transport->reveal());
43
        $service->send($message);
44
    }
45
46
    public function testServiceIsEventManagerAware()
47
    {
48
        $em = new EventManager();
49
        $this->service->setEventManager($em);
50
        $this->assertEquals($em, $this->service->getEventManager());
51
    }
52
53
    public function testSendTriggersEvents()
54
    {
55
        $transport = $this->prophesize(TransportInterface::class);
56
        $transport->send(Argument::type(Message::class))->shouldBeCalled();
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->reveal());
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