Passed
Push — master ( cb50cd...7264d5 )
by Chris
37s
created

TicketMetadata::isAvailableOn()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 2

Importance

Changes 0
Metric Value
cc 2
eloc 1
nc 2
nop 1
dl 0
loc 3
ccs 2
cts 2
cp 1
crap 2
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace ConferenceTools\Tickets\Domain\ValueObject;
4
5
class TicketMetadata
6
{
7
    private $ticketType;
8
    private $availableFrom;
9
    private $availableTo;
10
    private $privateTicket;
11
    private $afterSoldOut;
12
13
    /**
14
     * TicketMetadata constructor.
15
     * @param TicketType $ticketType
16
     * @param \DateTime $availableFrom
17
     * @param \DateTime $availableTo
18
     * @param bool $privateTicket
19
     */
20 3
    public function __construct(
21
        TicketType $ticketType,
22
        \DateTime $availableFrom,
23
        \DateTime $availableTo,
24
        bool $privateTicket
25
    ) {
26 3
        $this->ticketType = $ticketType;
27 3
        $this->availableFrom = $availableFrom;
28 3
        $this->availableTo = $availableTo;
29 3
        $this->privateTicket = $privateTicket;
30 3
    }
31
32 3
    public static function fromArray(TicketType $ticketType, array $metadata)
33
    {
34 3
        $instance = new static(
35 3
            $ticketType,
36 3
            $metadata['availableFrom'] ?? (new \DateTime())->sub(new \DateInterval('P1D')),
37 3
            $metadata['availableTo'] ?? (new \DateTime())->add(new \DateInterval('P1D')),
38 3
            $metadata['private'] ?? false
39
        );
40
41 3
        $instance->afterSoldOut = $metadata['after'] ?? [];
42
43 3
        return $instance;
44
    }
45
46
    /**
47
     * @return TicketType
48
     */
49
    public function getTicketType(): TicketType
50
    {
51
        return $this->ticketType;
52
    }
53
54
    /**
55
     * @return \DateTime
56
     */
57
    public function getAvailableFrom(): \DateTime
58
    {
59
        return $this->availableFrom;
60
    }
61
62
    /**
63
     * @return \DateTime
64
     */
65
    public function getAvailableTo(): \DateTime
66
    {
67
        return $this->availableTo;
68
    }
69
70 7
    public function isAvailableOn(\DateTime $date)
71
    {
72 7
        return ($this->availableFrom < $date && $date < $this->availableTo);
73
    }
74
75
    /**
76
     * @return boolean
77
     */
78 4
    public function isPrivateTicket(): bool
79
    {
80 4
        return $this->privateTicket;
81
    }
82
83 4
    public function getAfterSoldOut(): array
84
    {
85 4
        return $this->afterSoldOut;
86
    }
87
}