FilterTest::testFilterBasic()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 15
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 9
nc 1
nop 0
dl 0
loc 15
rs 9.9666
c 0
b 0
f 0
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