ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
ilCtrlStructureTest.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
21use PHPUnit\Framework\TestCase;
22
27class ilCtrlStructureTest extends TestCase
28{
29 public function testStructureBaseClasses(): void
30 {
32 'baseclass1' => [ilCtrlStructureInterface::KEY_CLASS_CID => 'cid1'],
33 'baseclass2' => [ilCtrlStructureInterface::KEY_CLASS_CID => 'cid2'],
34 'baseclass3' => [ilCtrlStructureInterface::KEY_CLASS_CID => 'cid3'],
35 ], [
36 'baseclass1',
37 'baseclass2',
38 'baseclass3',
39 ], []);
40
41 $this->assertTrue($structure->isBaseClass('baseclass1'));
42 $this->assertTrue($structure->isBaseClass('baseclass2'));
43 $this->assertTrue($structure->isBaseClass('baseclass3'));
44 $this->assertFalse($structure->isBaseClass('baseclass4'));
45 $this->assertFalse($structure->isBaseClass(''));
46 }
47
48 public function testStructureSecurityInfos(): void
49 {
51 'cmdclass1' => [
54 ],
55 'cmdclass2' => [
58 ],
59 ], [], [
60 'cmdclass1' => [
63 'postCmd1',
64 ],
65 ],
66 'cmdclass2' => [
68 'getCmd1',
69 ],
71 ],
72 ]);
73
74 $this->assertEmpty($structure->getUnsafeCommandsByCid('cid1'));
75 $this->assertEmpty($structure->getUnsafeCommandsByName('cmdClass1'));
76
77 $this->assertEquals(['postCmd1'], $structure->getSafeCommandsByCid('cid1'));
78 $this->assertEquals(['postCmd1'], $structure->getSafeCommandsByName('cmdClass1'));
79
80 $this->assertEquals(['getCmd1'], $structure->getUnsafeCommandsByCid('cid2'));
81 $this->assertEquals(['getCmd1'], $structure->getUnsafeCommandsByName('cmdClass2'));
82
83 $this->assertEmpty($structure->getSafeCommandsByCid('cid2'));
84 $this->assertEmpty($structure->getSafeCommandsByName('cmdClass2'));
85
86 $this->assertEmpty($structure->getUnsafeCommandsByName(''));
87 $this->assertEmpty($structure->getUnsafeCommandsByCid(''));
88
89 $this->assertEmpty($structure->getSafeCommandsByCid(''));
90 $this->assertEmpty($structure->getSafeCommandsByName(''));
91 }
92
93 public function testStructureCtrlInfos(): void
94 {
96 'class1' => [
102 'class2',
103 ],
104 ],
105 'class2' => [
110 'class1',
111 ],
113 ],
114 ], [], []);
115
116 $this->assertEquals('Class1', $structure->getObjNameByCid('cid1'));
117 $this->assertEquals('Class1', $structure->getObjNameByName('Class1'));
118 $this->assertEquals('Class2', $structure->getObjNameByCid('cid2'));
119 $this->assertEquals('Class2', $structure->getObjNameByName('Class2'));
120 $this->assertNull($structure->getObjNameByCid('cid3'));
121 $this->assertNull($structure->getObjNameByName('Class3'));
122
123 $this->assertEquals('class1', $structure->getClassNameByCid('cid1'));
124 $this->assertEquals('cid1', $structure->getClassCidByName('Class1'));
125 $this->assertEquals('class2', $structure->getClassNameByCid('cid2'));
126 $this->assertEquals('cid2', $structure->getClassCidByName('Class2'));
127 $this->assertNull($structure->getClassNameByCid('cid3'));
128 $this->assertNull($structure->getClassCidByName('Class3'));
129
130 $this->assertEquals('./path/1', $structure->getRelativePathByCid('cid1'));
131 $this->assertEquals('./path/1', $structure->getRelativePathByName('Class1'));
132 $this->assertEquals('./path/2', $structure->getRelativePathByCid('cid2'));
133 $this->assertEquals('./path/2', $structure->getRelativePathByName('Class2'));
134 $this->assertNull($structure->getRelativePathByCid('cid3'));
135 $this->assertNull($structure->getRelativePathByName('Class3'));
136
137 $this->assertEquals(['class2'], $structure->getChildrenByCid('cid1'));
138 $this->assertEquals(['class2'], $structure->getChildrenByName('Class1'));
139 $this->assertNull($structure->getChildrenByCid('cid2'));
140 $this->assertNull($structure->getChildrenByName('Class2'));
141 $this->assertNull($structure->getChildrenByCid('cid3'));
142 $this->assertNull($structure->getChildrenByName('Class3'));
143
144 $this->assertNull($structure->getParentsByCid('cid1'));
145 $this->assertNull($structure->getParentsByName('Class1'));
146 $this->assertEquals(['class1'], $structure->getParentsByCid('cid2'));
147 $this->assertEquals(['class1'], $structure->getParentsByName('Class2'));
148 $this->assertNull($structure->getParentsByCid('cid3'));
149 $this->assertNull($structure->getParentsByName('Class3'));
150 }
151
152 public function testStructureSavedParameters(): void
153 {
154 $structure = new ilCtrlStructure([], [], []);
155
156 $structure->setPermanentParameterByClass('Class1', 'param1');
157 $structure->setPermanentParameterByClass('Class1', 'param2');
158 $structure->setPermanentParameterByClass('Class2', 'param1');
159
160 // parameters must be as set above
161 $this->assertEquals(['param1', 'param2'], $structure->getPermanentParametersByClass('Class1'));
162 $this->assertEquals(['param1'], $structure->getPermanentParametersByClass('Class2'));
163
164 $structure->removeSingleParameterByClass('Class1', 'param1');
165
166 // parameter 'param1' must no longer be contained and not
167 // affect parameters of 'Class2'.
168 $this->assertEquals(['param2'], $structure->getPermanentParametersByClass('Class1'));
169 $this->assertEquals(['param1'], $structure->getPermanentParametersByClass('Class2'));
170
171 $structure->removePermanentParametersByClass('Class1');
172
173 // no parameters must be contained anymore for 'Class1',
174 // but not affect parameters of 'Class2'
175 $this->assertNull($structure->getPermanentParametersByClass('Class1'));
176 $this->assertEquals(['param1'], $structure->getPermanentParametersByClass('Class2'));
177
178 // parameter must not be set, it contains invalid characters.
179 $parameter_name = '$param';
180 $this->expectException(ilCtrlException::class);
181 $this->expectExceptionMessage("Cannot save parameter '$parameter_name', as it contains invalid characters.");
182 $structure->setPermanentParameterByClass('Class2', $parameter_name);
183 }
184
185 #[\PHPUnit\Framework\Attributes\DataProvider('getProtectedParameters')]
186 public function testStructureSavedParametersWithProtectedKey($protected_parameter): void
187 {
188 $structure = new ilCtrlStructure([], [], []);
189 $this->expectException(ilCtrlException::class);
190 $structure->setPermanentParameterByClass('a_class', $protected_parameter);
191 }
192
193 public function testStructureTemporaryParameters(): void
194 {
195 $structure = new ilCtrlStructure([], [], []);
196
197 $structure->setTemporaryParameterByClass('Class1', 'param1', 1);
198 $structure->setTemporaryParameterByClass('Class1', 'param2', '2');
199 $structure->setTemporaryParameterByClass('Class2', 'param1', true);
200
201 // parameters must be as set above
202 $this->assertEquals(['param1' => true], $structure->getTemporaryParametersByClass('Class2'));
203 $this->assertEquals(
204 ['param1' => 1, 'param2' => '2'],
205 $structure->getTemporaryParametersByClass('Class1')
206 );
207
208 $structure->removeSingleParameterByClass('Class1', 'param1');
209
210 // parameter 'param1' must no longer be contained and not
211 // affect parameters of 'Class2'.
212 $this->assertEquals(['param1' => true], $structure->getTemporaryParametersByClass('Class2'));
213 $this->assertEquals(
214 ['param2' => '2'],
215 $structure->getTemporaryParametersByClass('Class1')
216 );
217
218 $structure->removeTemporaryParametersByClass('Class1');
219
220 // no parameters must be contained anymore for 'Class1',
221 // but not affect parameters of 'Class2'
222 $this->assertEquals(['param1' => true], $structure->getTemporaryParametersByClass('Class2'));
223 $this->assertNull($structure->getTemporaryParametersByClass('Class1'));
224
225 // parameter must not be set, it contains invalid characters.
226 $parameter_name = '$param';
227 $this->expectException(ilCtrlException::class);
228 $this->expectExceptionMessage("Cannot save parameter '$parameter_name', as it contains invalid characters.");
229 $structure->setTemporaryParameterByClass('Class3', $parameter_name, 0);
230 }
231
232 public function testStructureReturnTargets(): void
233 {
234 $structure = new ilCtrlStructure([], [], []);
235
236 $test_url = 'https://domain.com/tests/url';
237 $structure->setReturnTargetByClass('Class1', $test_url);
238 $this->assertEquals($test_url, $structure->getReturnTargetByClass('Class1'));
239 $this->assertNull($structure->getReturnTargetByClass('Class2'));
240 }
241
242 public static function getProtectedParameters(): array
243 {
244 return [
245 ['baseClass'],
246 ['cmdClass'],
247 ['cmdNode'],
248 ['rtoken'],
249 ];
250 }
251}
$structure
TOTAL STRUCTURE.
Class ilCtrlStructureTest.
testStructureSavedParametersWithProtectedKey($protected_parameter)
Class ilCtrlStructure holds the currently read control structure.
const KEY_CLASS_CID
array key constants that are used for certain information.