DelegateTest   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 89
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 89
rs 10
wmc 4

4 Methods

Rating   Name   Duplication   Size   Complexity  
A testRegister() 0 19 1
A testDelegateCheckIn() 0 20 1
A testUpdateDelegateInfo() 0 23 1
A testDelegateCheckInThrowsException() 0 17 1
1
<?php
2
3
namespace ConferenceTools\Checkin\Domain\Model\Delegate;
4
5
use Carnage\Cqrs\Testing\AbstractBusTest;
6
use ConferenceTools\Checkin\Domain\Command\Delegate\CheckInDelegate;
7
use ConferenceTools\Checkin\Domain\Command\Delegate\RegisterDelegate;
8
use ConferenceTools\Checkin\Domain\Command\Delegate\UpdateDelegateInformation;
9
use ConferenceTools\Checkin\Domain\CommandHandler\Delegate as DelegateCommandHandler;
10
use ConferenceTools\Checkin\Domain\Event\Delegate\DelegateCheckedIn;
11
use ConferenceTools\Checkin\Domain\Event\Delegate\DelegateInformationUpdated;
12
use ConferenceTools\Checkin\Domain\Event\Delegate\DelegateRegistered;
13
use ConferenceTools\Checkin\Domain\ValueObject\DelegateInfo;
14
use ConferenceTools\Checkin\Domain\ValueObject\Ticket;
15
16
class DelegateTest extends AbstractBusTest
17
{
18
    protected $modelClass = Delegate::class;
19
20
    public function testRegister()
21
    {
22
        $sut = new DelegateCommandHandler($this->repository, $this->idGenerator);
23
        $this->setupLogger($sut);
24
25
        $delegate = new DelegateInfo('ted', 'banks', '[email protected]');
26
        $ticket = new Ticket('pid', 'tid');
27
        $message = new RegisterDelegate($delegate, $ticket, '[email protected]');
28
        $sut->handle($message);
29
30
        self::assertCount(1, $this->messageBus->messages);
31
        /** @var DelegateRegistered $domainMessage */
32
        $domainMessage = $this->messageBus->messages[0]->getEvent();
33
34
        self::assertInstanceOf(DelegateRegistered::class, $domainMessage);
35
        self::assertEquals(1, $domainMessage->getDelegateId());
36
        self::assertSame($delegate, $domainMessage->getDelegateInfo());
37
        self::assertSame($ticket, $domainMessage->getTicket());
38
        self::assertEquals('[email protected]', $domainMessage->getPurchaserEmail());
39
    }
40
41
    public function testUpdateDelegateInfo()
42
    {
43
        $delegate = new DelegateInfo('ted', 'banks', '[email protected]');
44
        $ticket = new Ticket('pid', 'tid');
45
46
        $this->given(Delegate::class, 'delid', [
47
            new DelegateRegistered('delid', $delegate, $ticket, '[email protected]')
48
        ]);
49
50
        $sut = new DelegateCommandHandler($this->repository, $this->idGenerator);
51
        $this->setupLogger($sut);
52
53
        $delegate = new DelegateInfo('fred', 'franks', '[email protected]');
54
        $message = new UpdateDelegateInformation('delid', $delegate);
55
        $sut->handle($message);
56
57
        self::assertCount(1, $this->messageBus->messages);
58
        /** @var DelegateInformationUpdated $domainMessage */
59
        $domainMessage = $this->messageBus->messages[0]->getEvent();
60
61
        self::assertInstanceOf(DelegateInformationUpdated::class, $domainMessage);
62
        self::assertEquals('delid', $domainMessage->getId());
63
        self::assertSame($delegate, $domainMessage->getDelegateInfo());
64
    }
65
66
    public function testDelegateCheckIn()
67
    {
68
        $delegate = new DelegateInfo('ted', 'banks', '[email protected]');
69
        $ticket = new Ticket('pid', 'tid');
70
71
        $this->given(Delegate::class, 'delid', [
72
            new DelegateRegistered('delid', $delegate, $ticket, '[email protected]')
73
        ]);
74
75
        $sut = new DelegateCommandHandler($this->repository, $this->idGenerator);
76
        $this->setupLogger($sut);
77
78
        $sut->handle(new CheckInDelegate('delid'));
79
80
        self::assertCount(1, $this->messageBus->messages);
81
        /** @var DelegateCheckedIn $domainMessage */
82
        $domainMessage = $this->messageBus->messages[0]->getEvent();
83
84
        self::assertInstanceOf(DelegateCheckedIn::class, $domainMessage);
85
        self::assertEquals('delid', $domainMessage->getId());
86
    }
87
88
    public function testDelegateCheckInThrowsException()
89
    {
90
        $delegate = new DelegateInfo('ted', 'banks', '[email protected]');
91
        $ticket = new Ticket('pid', 'tid');
92
93
        $this->given(Delegate::class, 'delid', [
94
            new DelegateRegistered('delid', $delegate, $ticket, '[email protected]'),
95
            new DelegateCheckedIn('delid')
96
        ]);
97
98
        $this->expectException(\DomainException::class);
99
        $this->expectExceptionMessage('Delegate has already been checked in');
100
101
        $sut = new DelegateCommandHandler($this->repository, $this->idGenerator);
102
        $this->setupLogger($sut);
103
104
        $sut->handle(new CheckInDelegate('delid'));
105
106
    }
107
}