Passed
Push — master ( 062b8f...6eb324 )
by Adrien
07:53
created

php$0 ➔ testMockTransportHasCursorAtEndOfList()   A

Complexity

Conditions 1

Size

Total Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
dl 0
loc 16
rs 9.7333
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace ApplicationTest\Service;
6
7
use Application\Model\Message;
8
use Application\Service\Mailer;
9
use Doctrine\ORM\EntityManager;
10
use Laminas\Mail;
11
use Laminas\Mail\Address;
12
use Laminas\Mail\Transport\TransportInterface;
13
14
class MailerTest extends \PHPUnit\Framework\TestCase
15
{
16
    private function createMockMailer(): Mailer
17
    {
18
        /** @var EntityManager $entityManager */
19
        $entityManager = $this->createMock(EntityManager::class);
20
        $transport = $this->createMockTransport();
21
22
        $mailer = new Mailer(
23
            $entityManager,
24
            $transport,
25
            null,
26
            '[email protected]',
27
            '/user/bin/php'
28
        );
29
30
        return $mailer;
31
    }
32
33
    private function createMockTransport(): TransportInterface
34
    {
35
        return new class() implements TransportInterface {
36
            public function send(Mail\Message $message): void
37
            {
38
                // Purposefully place current cursor at the end of list
39
                foreach ($message->getFrom() as $a) {
40
                    $a->getEmail();
41
                }
42
43
                foreach ($message->getTo() as $a) {
44
                    $a->getEmail();
45
                }
46
            }
47
        };
48
    }
49
50
    public function testMockTransportHasCursorAtEndOfList(): void
51
    {
52
        $message = new Mail\Message();
53
        $message->setFrom('[email protected]');
54
        $message->setTo('[email protected]');
55
56
        // New message has current cursor on first element
57
        self::assertInstanceOf(Address::class, $message->getFrom()->current());
58
        self::assertInstanceOf(Address::class, $message->getTo()->current());
59
60
        $transport = $this->createMockTransport();
61
        $transport->send($message);
62
63
        // After transport, message has current cursor on end of list
64
        self::assertFalse($message->getFrom()->current());
65
        self::assertFalse($message->getTo()->current());
66
    }
67
68
    public function testSendMessage(): void
69
    {
70
        $mailer = $this->createMockMailer();
71
        $message = new Message();
72
        $message->setEmail('[email protected]');
73
74
        $this->expectOutputRegex('~email from noreply@example\.com sent to: john\.doe@example\.com~');
75
        $mailer->sendMessage($message);
76
        self::assertNotNull($message->getDateSent());
77
    }
78
}
79