OrderLineTest   A
last analyzed

Complexity

Total Complexity 2

Size/Duplication

Total Lines 49
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 2
eloc 31
dl 0
loc 49
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A testOrderRelation() 0 17 1
A testMaybeGiveTemporaryAccess() 0 28 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace ApplicationTest\Model;
6
7
use Application\Enum\ProductType;
8
use Application\Model\Order;
9
use Application\Model\OrderLine;
10
use Application\Model\Subscription;
11
use Application\Model\User;
12
use PHPUnit\Framework\TestCase;
13
14
class OrderLineTest extends TestCase
15
{
16
    public function testOrderRelation(): void
17
    {
18
        $order1 = new Order();
19
        self::assertCount(0, $order1->getOrderLines());
20
21
        $orderLine1 = new OrderLine();
22
        $orderLine2 = new OrderLine();
23
        $orderLine1->setOrder($order1);
24
        $orderLine2->setOrder($order1);
25
26
        self::assertCount(2, $order1->getOrderLines());
27
28
        $order2 = new Order();
29
        $orderLine2->setOrder($order2);
30
31
        self::assertCount(1, $order1->getOrderLines());
32
        self::assertCount(1, $order2->getOrderLines());
33
    }
34
35
    public function testMaybeGiveTemporaryAccess(): void
36
    {
37
        $creator = new User();
38
        User::setCurrent($creator);
39
40
        $orderLine = new OrderLine();
41
        $orderLine->timestampCreation();
42
43
        $orderLine->maybeGiveTemporaryAccess();
44
        self::assertFalse($creator->getWebTemporaryAccess(), 'no access because not a subscription');
45
46
        $subscription = new Subscription();
47
        $subscription->setType(ProductType::Paper);
48
        $orderLine->setSubscription($subscription);
49
        $orderLine->maybeGiveTemporaryAccess();
50
        self::assertFalse($creator->getWebTemporaryAccess(), 'no access because paper subscription');
51
52
        $subscription->setType(ProductType::Both);
53
        $orderLine->maybeGiveTemporaryAccess();
54
        self::assertTrue($creator->getWebTemporaryAccess(), 'access because subscription includes digital');
55
56
        /** @var User $beneficiary */
57
        $beneficiary = _em()->getReference(User::class, 1000);
58
        self::assertFalse($beneficiary->getWebTemporaryAccess(), 'originally no access');
59
60
        $orderLine->setAdditionalEmails(['[email protected]']);
61
        $orderLine->maybeGiveTemporaryAccess();
62
        self::assertTrue($beneficiary->getWebTemporaryAccess(), 'automatically given access via his email');
63
    }
64
}
65