DelegateTest   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 63
Duplicated Lines 0 %

Importance

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

4 Methods

Rating   Name   Duplication   Size   Complexity  
A testDelegateRegistered() 0 13 1
A setupLogger() 0 5 1
A testUpdateDelegateInformation() 0 20 1
A testDelegateCheckedIn() 0 17 1
1
<?php
2
3
namespace ConferenceTools\Checkin\Domain\Projection;
4
5
6
use Carnage\Cqrs\Persistence\ReadModel\InMemoryRepository;
7
use ConferenceTools\Checkin\Domain\Event\Delegate\DelegateCheckedIn;
8
use ConferenceTools\Checkin\Domain\Event\Delegate\DelegateInformationUpdated;
9
use ConferenceTools\Checkin\Domain\Event\Delegate\DelegateRegistered;
10
use ConferenceTools\Checkin\Domain\ReadModel\Delegate as DelegateReadModel;
11
use ConferenceTools\Checkin\Domain\ValueObject\DelegateInfo;
12
use ConferenceTools\Checkin\Domain\ValueObject\Ticket;
13
use PHPUnit\Framework\TestCase;
14
use Zend\Log\Logger;
15
use Zend\Log\LoggerAwareInterface;
16
use Zend\Log\Writer\Noop;
17
18
class DelegateTest extends TestCase
19
{
20
    public function testDelegateRegistered()
21
    {
22
        $delegate = new DelegateInfo('ted', 'banks', '[email protected]');
23
        $ticket = new Ticket('pid', 'tid');
24
        $repository = new InMemoryRepository();
25
26
        $sut = new Delegate($repository);
27
        $this->setupLogger($sut);
28
29
        $sut->handle(new DelegateRegistered('did', $delegate, $ticket, '[email protected]'));
30
31
        $expected = new DelegateReadModel('did', $delegate, $ticket, '[email protected]');
32
        self::assertEquals($expected, $repository->get(0));
33
    }
34
35
    public function testUpdateDelegateInformation()
36
    {
37
        $delegate = new DelegateInfo('ted', 'banks', '[email protected]');
38
        $ticket = new Ticket('pid', 'tid');
39
        $existing = new DelegateReadModel('did', $delegate, $ticket, '[email protected]');
40
41
        $repository = new InMemoryRepository();
42
        $repository->add($existing);
43
44
        $sut = new Delegate($repository);
45
        $this->setupLogger($sut);
46
47
        $delegate = new DelegateInfo('fred', 'franks', '[email protected]');
48
        $sut->handle(new DelegateInformationUpdated('did', $delegate));
49
50
        /** @var DelegateReadModel $result */
51
        $result = $repository->get(0);
52
        self::assertEquals('fred', $result->getFirstName());
53
        self::assertEquals('franks', $result->getLastName());
54
        self::assertEquals('[email protected]', $result->getEmail());
55
    }
56
57
    public function testDelegateCheckedIn()
58
    {
59
        $delegate = new DelegateInfo('ted', 'banks', '[email protected]');
60
        $ticket = new Ticket('pid', 'tid');
61
        $existing = new DelegateReadModel('did', $delegate, $ticket, '[email protected]');
62
63
        $repository = new InMemoryRepository();
64
        $repository->add($existing);
65
66
        $sut = new Delegate($repository);
67
        $this->setupLogger($sut);
68
69
        $sut->handle(new DelegateCheckedIn('did'));
70
71
        /** @var DelegateReadModel $result */
72
        $result = $repository->get(0);
73
        self::assertTrue($result->checkedIn(), 'Delegate was not marked as checked in');
74
    }
75
76
    protected function setupLogger(LoggerAwareInterface $handler)
77
    {
78
        $logger = (new Logger())->addWriter(new Noop());
79
80
        $handler->setLogger($logger);
81
    }
82
}
83