Passed
Pull Request — master (#69)
by Chris
17:32 queued 08:49
created

PurchaseRecordTest::testSetTotalCost()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
nop 0
dl 0
loc 7
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace ConferenceTools\Tickets\Domain\ReadModel\TicketRecord;
4
5
use Doctrine\Common\Collections\Collection;
6
use ConferenceTools\Tickets\Domain\ValueObject\DiscountCode;
7
use ConferenceTools\Tickets\Domain\ValueObject\DiscountType\Percentage;
8
use ConferenceTools\Tickets\Domain\ValueObject\Money;
9
use ConferenceTools\Tickets\Domain\ValueObject\Price;
10
use ConferenceTools\Tickets\Domain\ValueObject\TaxRate;
11
use ConferenceTools\Tickets\Domain\ValueObject\TicketType;
12
use PHPUnit\Framework\TestCase;
13
14
class PurchaseRecordTest extends TestCase
15
{
16
    public function testCreate()
17
    {
18
        $price = Price::fromNetCost(new Money(0, 'GBP'), new TaxRate(0));
19
        $sut = new PurchaseRecord('randomid');
20
21
        self::assertEquals('randomid', $sut->getPurchaseId());
22
        self::assertEquals(0, $sut->getTicketCount());
23
        self::assertEquals(false, $sut->isPaid());
24
        self::assertEquals(new \DateTime(), $sut->getCreatedAt(), null, 2);
25
        self::assertInstanceOf(Collection::class, $sut->getTickets());
26
        self::assertEquals(0, $sut->getTickets()->count());
27
        self::assertTrue($sut->getTotalCost()->equals($price));
28
        self::assertFalse($sut->hasDiscountCode());
29
        self::assertFalse($sut->hasTimedout());
30
    }
31
32
    public function testApplyDiscountCode()
33
    {
34
        $sut = new PurchaseRecord('randomid');
35
        $discountCode = new DiscountCode('code', 'Code', new Percentage(5));
36
        $sut->applyDiscountCode($discountCode);
37
38
        self::assertTrue($sut->hasDiscountCode());
39
        self::assertEquals($discountCode->getCode(), $sut->getDiscountCode()->getCode());
40
    }
41
42
    public function testSetTotalCost()
43
    {
44
        $sut = new PurchaseRecord('randomid');
45
        $price = Price::fromNetCost(new Money(100, 'GBP'), new TaxRate(20));
46
        $sut->setTotalCost($price);
47
48
        self::assertTrue($price->equals($sut->getTotalCost()));
49
    }
50
51
    public function testAddTicketRecord()
52
    {
53
        $price = Price::fromNetCost(new Money(100, 'GBP'), new TaxRate(20));
54
        $ticketType = new TicketType('test', $price, 'Test ticket');
55
56
        $sut = new PurchaseRecord('randomid');
57
        $sut->addTicketRecord($ticketType, 'ticketid');
58
        $ticketRecord = $sut->getTicketRecord('ticketid');
59
60
        self::assertEquals(1, $sut->getTicketCount());
61
        self::assertEquals($ticketType, $ticketRecord->getTicketType());
62
    }
63
64
    public function testGetInvalidTicketRecord()
65
    {
66
        $this->expectException(\InvalidArgumentException::class);
67
        $sut = new PurchaseRecord('randomid');
68
        $sut->getTicketRecord('ticketid');
69
    }
70
71
    public function testCancelTicket()
72
    {
73
        $price = Price::fromNetCost(new Money(100, 'GBP'), new TaxRate(20));
74
        $ticketType = new TicketType('test', $price, 'Test ticket');
75
76
        $sut = new PurchaseRecord('randomid');
77
        $sut->addTicketRecord($ticketType, 'ticketid');
78
        $sut->addTicketRecord($ticketType, 'ticketid2');
79
        $sut->cancelTicket('ticketid2');
80
81
        self::assertEquals(1, $sut->getTicketCount());
82
        self::assertEquals(false, $sut->shouldBeCancelled());
83
84
        $sut->cancelTicket('ticketid');
85
86
        self::assertEquals(0, $sut->getTicketCount());
87
        self::assertEquals(true, $sut->shouldBeCancelled());
88
    }
89
90
    public function testPay()
91
    {
92
        $sut = new PurchaseRecord('randomid');
93
        $sut->pay('[email protected]');
94
95
        self::assertTrue($sut->isPaid());
96
        self::assertEquals('[email protected]', $sut->getPurchaserEmail());
97
    }
98
99
    public function testGetTicketSummary()
100
    {
101
        $price = Price::fromNetCost(new Money(100, 'GBP'), new TaxRate(20));
102
        $ticketType = new TicketType('test', $price, 'Test ticket');
103
        $ticketType2 = new TicketType('test2', $price, 'Test ticket 2');
104
105
        $expected = [
106
            'test' => ['quantity' => 2, 'lineTotal' => $price->add($price), 'ticketType' => $ticketType],
107
            'test2' => ['quantity' => 1, 'lineTotal' => $price, 'ticketType' => $ticketType2]
108
        ];
109
110
        $sut = new PurchaseRecord('randomid');
111
        $sut->addTicketRecord($ticketType, 'ticketid');
112
        $sut->addTicketRecord($ticketType, 'ticketid2');
113
        $sut->addTicketRecord($ticketType2, 'ticketid3');
114
115
        self::assertEquals($expected, $sut->getTicketSummary());
116
    }
117
}
118