FilterTest   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 77
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 44
dl 0
loc 77
rs 10
c 0
b 0
f 0
wmc 4

4 Methods

Rating   Name   Duplication   Size   Complexity  
A testFilterBasic() 0 15 1
A testFilterOrder() 0 13 1
A testFilterRemoval() 0 16 1
A testFilterWithinFilter() 0 25 1
1
<?php
2
3
namespace BasicTests;
4
5
use CommonTestClass;
6
use kalanis\kw_filter\Filter;
7
use kalanis\kw_filter\FilterEntry;
8
use kalanis\kw_filter\Interfaces\IFilterEntry;
9
10
11
class FilterTest extends CommonTestClass
12
{
13
    public function testFilterBasic(): void
14
    {
15
        $filter = new Filter();
16
        $this->assertEmpty($filter->getValue());
17
18
        $this->assertInstanceOf(IFilterEntry::class, $filter->getDefaultItem());
19
20
        $filter->setValue($this->mockEntry1());
21
        $filter->setValue($this->mockEntry2());
22
        $filter->setValue($this->mockEntry3());
23
24
        $this->assertNotEmpty(iterator_to_array($filter->getEntries()));
25
26
        $filter->clear();
27
        $this->assertEmpty(iterator_to_array($filter->getEntries()));
28
    }
29
30
    public function testFilterRemoval(): void
31
    {
32
        $filter = new Filter();
33
34
        $filter->addFilter($this->mockEntry1());
35
        $filter->addFilter($this->mockEntry3());
36
        $filter->addFilter($this->mockEntry3()); // intentional
37
        $filter->addFilter($this->mockEntry2());
38
39
        $this->assertEquals(4, count(iterator_to_array($filter->getEntries())));
40
41
        $filter->remove($this->mockEntry3()->getKey());
42
        $this->assertEquals(2, count(iterator_to_array($filter->getEntries())));
43
44
        $filter->clear();
45
        $this->assertEmpty(iterator_to_array($filter->getEntries()));
46
    }
47
48
    public function testFilterOrder(): void
49
    {
50
        $filter = new Filter();
51
52
        $filter->addFilter($this->mockEntry1());
53
        $filter->addFilter($this->mockEntry3());
54
        $filter->addFilter($this->mockEntry2());
55
56
        /** @var IFilterEntry[] $result */
57
        $result = iterator_to_array($filter->getEntries());
58
        $this->assertEquals($this->mockEntry1()->getKey(), $result[0]->getKey());
59
        $this->assertEquals($this->mockEntry3()->getKey(), $result[1]->getKey());
60
        $this->assertEquals($this->mockEntry2()->getKey(), $result[2]->getKey());
61
    }
62
63
    public function testFilterWithinFilter(): void
64
    {
65
        $filter1 = new Filter();
66
        $filter2 = new Filter();
67
68
        $filter1->addFilter($this->mockEntry1());
69
        $filter2->addFilter($this->mockEntry2());
70
        $filter2->addFilter($this->mockEntry3());
71
        $filter2->setRelation(Filter::RELATION_ANYTHING);
72
73
        $filter1->addFilter($filter2);
74
        /// entry1 and (entry2 or entry3)
75
76
        /** @var Filter[] $result */
77
        $result = iterator_to_array($filter1->getEntries());
78
        $this->assertEquals(Filter::RELATION_EVERYTHING, $filter1->getRelation());
79
        $this->assertInstanceOf(FilterEntry::class, $result[0]);
80
        $this->assertInstanceOf(Filter::class, $result[1]);
81
        $this->assertEquals($this->mockEntry1()->getKey(), $result[0]->getKey());
82
83
        /** @var IFilterEntry[] $resultSub */
84
        $resultSub = $result[1]->getValue();
85
        $this->assertEquals(Filter::RELATION_ANYTHING, $result[1]->getRelation());
86
        $this->assertEquals($this->mockEntry2()->getKey(), $resultSub[0]->getKey());
87
        $this->assertEquals($this->mockEntry3()->getKey(), $resultSub[1]->getKey());
88
    }
89
}
90