Passed
Pull Request — master (#116)
by Théo
02:02
created

test_it_is_empty_by_default()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 8
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 5
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of the box project.
7
 *
8
 * (c) Kevin Herrera <[email protected]>
9
 *     Théo Fidry <[email protected]>
10
 *
11
 * This source file is subject to the MIT license that is bundled
12
 * with this source code in the file LICENSE.
13
 */
14
15
namespace KevinGH\RequirementChecker;
16
17
use PHPUnit\Framework\TestCase;
18
use function iterator_to_array;
19
20
/**
21
 * @covers \KevinGH\RequirementChecker\RequirementCollection
22
 */
23
class RequirementCollectionTest extends TestCase
24
{
25
    public function test_it_is_empty_by_default(): void
26
    {
27
        $requirements = new RequirementCollection();
28
29
        $this->assertSame([], iterator_to_array($requirements));
30
        $this->assertSame([], $requirements->getRequirements());
31
        $this->assertCount(0, $requirements);
32
        $this->assertTrue($requirements->evaluateRequirements());
33
    }
34
35
    public function test_it_can_have_and_evaluate_requirements(): void
36
    {
37
        $requirements = new RequirementCollection();
38
39
        $reqs = [
40
            $requirementA = new Requirement(
41
                'return true;',
42
                'req tA',
43
                'req hA'
44
            ),
45
            $requirementB = new Requirement(
46
                'return true;',
47
                'req tB',
48
                'req hB'
49
            ),
50
        ];
51
52
        foreach ($reqs as $requirement) {
53
            $requirements->add($requirement);
54
        }
55
56
        $this->assertSame($reqs, iterator_to_array($requirements));
57
        $this->assertSame($reqs, $requirements->getRequirements());
58
        $this->assertCount(2, $requirements);
59
        $this->assertTrue($requirements->evaluateRequirements());
60
61
        $requirements->addRequirement(
62
            'return false;',
63
            'req tC',
64
            'req hC'
65
        );
66
67
        $this->assertCount(3, $requirements);
68
        $this->assertFalse($requirements->evaluateRequirements());
69
70
        $retrievedRequirements = $requirements->getRequirements();
71
72
        $this->assertSame($retrievedRequirements, iterator_to_array($requirements));
73
74
        $this->assertSame($requirementA, $retrievedRequirements[0]);
75
        $this->assertSame($requirementB, $retrievedRequirements[1]);
76
77
        $requirementC = $retrievedRequirements[2];
78
79
        $this->assertSame('return false;', $requirementC->getIsFullfilledChecker());
80
        $this->assertTrue($requirement->isFulfilled());
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $requirement seems to be defined by a foreach iteration on line 52. Are you sure the iterator is never empty, otherwise this variable is not defined?
Loading history...
81
        $this->assertSame('req tC', $requirementC->getTestMessage());
82
        $this->assertSame('req hC', $requirementC->getHelpText());
83
    }
84
}
85