Passed
Push — master ( 62264f...226050 )
by Petr
08:16
created

OrderTest::testParamColumn()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 37
Code Lines 29

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 29
c 1
b 0
f 0
dl 0
loc 37
rs 9.456
cc 1
nc 1
nop 0
1
<?php
2
3
namespace coreTests;
4
5
6
use CommonTestClass;
7
use kalanis\kw_address_handler\Handler;
8
use kalanis\kw_address_handler\Sources\Sources;
9
use kalanis\kw_table\core\Table\Columns;
10
use kalanis\kw_table\core\Table\Order;
11
12
13
class OrderTest extends CommonTestClass
14
{
15
    public function testNoColumns(): void
16
    {
17
        $src = new Sources();
18
        $src->setAddress('//foo/bar');
19
        $col1 = new Columns\Basic('id');
20
        $col1->setHeaderText('top id');
21
22
        $lib = new Order(new Handler($src));
23
        $lib->process();
24
25
        $ord = $lib->getOrdering();
26
        $this->assertEmpty(reset($ord));
27
        $this->assertEmpty($lib->getAddressColumnName());
28
        $this->assertEmpty($lib->getAddressDirection());
29
        $this->assertEmpty($lib->getMasterColumnName());
30
        $this->assertEmpty($lib->getMasterDirection());
31
32
        $this->assertEmpty($lib->getHref($col1));
33
        $this->assertEquals('top id', $lib->getHeaderText($col1, '!!! '));
34
    }
35
36
    public function testUnselectedColumn(): void
37
    {
38
        $src = new Sources();
39
        $src->setAddress('//foo/bar');
40
        $col1 = new Columns\Basic('id');
41
        $col1->setHeaderText('top id');
42
        $col2 = new Columns\Basic('name');
43
        $col2->setHeaderText('top name');
44
45
        $lib = new Order(new Handler($src));
46
        $lib->addColumn($col1);
47
        $lib->addColumn($col2);
48
        $lib->process();
49
50
        $ord = $lib->getOrdering();
51
        $ordered = reset($ord);
52
        $this->assertEquals('id', $ordered->getColumnName());
53
        $this->assertEquals('ASC', $ordered->getProperty());
54
        $ordered = next($ord);
55
        $this->assertEquals('name', $ordered->getColumnName());
56
        $this->assertEquals('ASC', $ordered->getProperty());
57
        $this->assertTrue(false === next($ord));
58
59
        $this->assertEmpty($lib->getAddressColumnName());
60
        $this->assertEmpty($lib->getAddressDirection());
61
        $this->assertEquals('id', $lib->getMasterColumnName());
62
        $this->assertEquals('ASC', $lib->getMasterDirection());
63
64
        $this->assertEquals('/foo/bar?column=id&direction=DESC', $lib->getHref($col1));
65
        $this->assertEquals('!!! top id', $lib->getHeaderText($col1, '!!! '));
66
        $this->assertEquals('/foo/bar?column=name&direction=ASC', $lib->getHref($col2));
67
        $this->assertEquals('top name', $lib->getHeaderText($col2, '!!! '));
68
    }
69
70
    public function testParamColumn(): void
71
    {
72
        $src = new Sources();
73
        $src->setAddress('//foo/bar?column=id&direction=DESC');
74
        $col1 = new Columns\Basic('id');
75
        $col1->setHeaderText('top id');
76
        $col2 = new Columns\Basic('name');
77
        $col2->setHeaderText('top name');
78
79
        $lib = new Order(new Handler($src));
80
        $lib->addColumn($col1);
81
        $lib->addColumn($col2);
82
        $lib->process();
83
84
        // no order entry defined, so it will be columns plus direction
85
        // see that direction is written as default for columns ordering
86
        $ord = $lib->getOrdering();
87
        $ordered = reset($ord);
88
        $this->assertEquals('id', $ordered->getColumnName());
89
        $this->assertEquals('DESC', $ordered->getProperty());
90
        $ordered = next($ord);
91
        $this->assertEquals('id', $ordered->getColumnName());
92
        $this->assertEquals('DESC', $ordered->getProperty());
93
        $ordered = next($ord);
94
        $this->assertEquals('name', $ordered->getColumnName());
95
        $this->assertEquals('DESC', $ordered->getProperty());
96
        $this->assertTrue(false === next($ord));
97
98
        $this->assertEquals('id', $lib->getAddressColumnName());
99
        $this->assertEquals('DESC', $lib->getAddressDirection());
100
        $this->assertEquals('id', $lib->getMasterColumnName());
101
        $this->assertEquals('DESC', $lib->getMasterDirection());
102
103
        $this->assertEquals('/foo/bar?column=id&direction=ASC', $lib->getHref($col1));
104
        $this->assertEquals('!!! top id', $lib->getHeaderText($col1, '!!! '));
105
        $this->assertEquals('/foo/bar?column=name&direction=ASC', $lib->getHref($col2));
106
        $this->assertEquals('top name', $lib->getHeaderText($col2, '!!! '));
107
    }
108
109
    public function testSetColumn(): void
110
    {
111
        $src = new Sources();
112
        $src->setAddress('//foo/bar');
113
        $col1 = new Columns\Basic('id');
114
        $col1->setHeaderText('top id');
115
        $col2 = new Columns\Basic('name');
116
        $col2->setHeaderText('top name');
117
118
        $lib = new Order(new Handler($src));
119
        $lib->addColumn($col1);
120
        $lib->addColumn($col2);
121
        $lib->addOrdering('name', 'ASC');
122
        $lib->addPrependOrdering('id', 'DESC');
123
        $lib->addOrdering('xcrem', 'ASC'); // this one is undefined - invalid and will be kicked out
124
        $lib->process();
125
126
        $ord = $lib->getOrdering();
127
        $ordered = reset($ord);
128
        $this->assertEquals('id', $ordered->getColumnName());
129
        $this->assertEquals('DESC', $ordered->getProperty());
130
        $ordered = next($ord);
131
        $this->assertEquals('name', $ordered->getColumnName());
132
        $this->assertEquals('ASC', $ordered->getProperty());
133
        $this->assertTrue(false === next($ord));
134
135
        $this->assertEmpty($lib->getAddressColumnName());
136
        $this->assertEmpty($lib->getAddressDirection());
137
        $this->assertEquals('id', $lib->getMasterColumnName());
138
        $this->assertEquals('DESC', $lib->getMasterDirection());
139
140
        $this->assertEquals('/foo/bar?column=id&direction=ASC', $lib->getHref($col1));
141
        $this->assertEquals('!!! top id', $lib->getHeaderText($col1, '!!! '));
142
        $this->assertEquals('/foo/bar?column=name&direction=ASC', $lib->getHref($col2));
143
        $this->assertEquals('top name', $lib->getHeaderText($col2, '!!! '));
144
    }
145
146
    public function testSetParamColumn(): void
147
    {
148
        $src = new Sources();
149
        $src->setAddress('//foo/bar?column=name&direction=DESC');
150
        $col1 = new Columns\Basic('id');
151
        $col1->setHeaderText('top id');
152
        $col2 = new Columns\Basic('name');
153
        $col2->setHeaderText('top name');
154
155
        $lib = new Order(new Handler($src));
156
        $lib->addColumn($col1);
157
        $lib->addColumn($col2);
158
        $lib->addOrdering('name', 'ASC');
159
        $lib->addPrependOrdering('id', 'DESC');
160
        $lib->process();
161
162
        // ordering by preset columns, not just that defined ones
163
        $ord = $lib->getOrdering();
164
        $ordered = reset($ord); // first from address
165
        $this->assertEquals('name', $ordered->getColumnName());
166
        $this->assertEquals('DESC', $ordered->getProperty());
167
        $ordered = next($ord); // then from definitions
168
        $this->assertEquals('id', $ordered->getColumnName());
169
        $this->assertEquals('DESC', $ordered->getProperty());
170
        $ordered = next($ord);
171
        $this->assertEquals('name', $ordered->getColumnName());
172
        $this->assertEquals('ASC', $ordered->getProperty());
173
        $this->assertTrue(false === next($ord));
174
175
        $this->assertEquals('name', $lib->getAddressColumnName());
176
        $this->assertEquals('DESC', $lib->getAddressDirection());
177
        $this->assertEquals('name', $lib->getMasterColumnName());
178
        $this->assertEquals('DESC', $lib->getMasterDirection());
179
180
        $this->assertEquals('/foo/bar?column=id&direction=ASC', $lib->getHref($col1));
181
        $this->assertEquals('top id', $lib->getHeaderText($col1, '!!! '));
182
        $this->assertEquals('/foo/bar?column=name&direction=ASC', $lib->getHref($col2));
183
        $this->assertEquals('!!! top name', $lib->getHeaderText($col2, '!!! '));
184
    }
185
}
186