ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
ilCtrlContextTest.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
21use PHPUnit\Framework\TestCase;
23use ILIAS\Refinery\Factory as Refinery;
24
29class ilCtrlContextTest extends TestCase
30{
35
40
44 private Refinery $refinery;
45
49 private array $values;
50
54 protected function setUp(): void
55 {
56 $this->values = [];
57 $this->refinery = $this->createMock(Refinery::class);
58 $this->factory = $this->createMock(ilCtrlPathFactory::class);
59 $this->request = $this->createMock(ArrayBasedRequestWrapper::class);
60 $this->request->method('has')->willReturn(true);
61 $this->request
62 ->method('retrieve')
63 ->willReturnCallback(function ($key) {
64 return $this->values[$key] ?? null;
65 });
66 }
67
72 protected function getPath(?string $cid_path = null): ilCtrlPathInterface
73 {
74 return new class ($cid_path) extends ilCtrlAbstractPath {
75 // override parent constructor, so we don't
76 // have to mock the ilCtrlStructure.
77 public function __construct(?string $cid_path = null)
78 {
79 $this->cid_path = $cid_path;
80 }
81 };
82 }
83
88 protected function getContextWithManualAdoption(?array $request_values = null): ilCtrlContextInterface
89 {
90 $this->values = $request_values ?? [];
91
92 return new class ($this->factory, $this->request, $this->refinery) extends ilCtrlContext {
93 // override parent constructor, so the request values
94 // are not adopted immediately.
95 public function __construct(
96 ilCtrlPathFactory $path_factory,
98 Refinery $refinery
99 ) {
100 $this->path_factory = $path_factory;
101 $this->path = $path_factory->null();
102 $this->request_wrapper = $request_wrapper;
103 $this->refinery = $refinery;
104 }
105
106 // provide a public method that manually adopts the
107 // request values.
108 public function adopt(): void
109 {
110 $this->adoptRequestParameters();
111 }
112 };
113 }
114
116 {
117 $expected_cid_path = 'test_cid_path';
118 $this->factory
119 ->method('existing')
120 ->willReturn($this->getPath($expected_cid_path));
121
122 $this->factory
123 ->method('find')
124 ->willReturn($this->getPath($expected_cid_path));
125
127 ilCtrlInterface::PARAM_CMD_MODE => 'test_cmd_mode',
128 ilCtrlInterface::PARAM_REDIRECT => 'test_redirect_source',
129 ilCtrlInterface::PARAM_BASE_CLASS => 'test_base_class',
130 ilCtrlInterface::PARAM_CMD_CLASS => 'test_cmd_class',
131 ilCtrlInterface::PARAM_CMD => 'test_cmd',
132 ilCtrlInterface::PARAM_CID_PATH => $expected_cid_path,
133 ]);
134
135 $this->assertFalse($context->isAsync());
136 $this->assertEquals('ilias.php', $context->getTargetScript());
137 $this->assertNull($context->getCmdMode());
138 $this->assertNull($context->getRedirectSource());
139 $this->assertNull($context->getBaseClass());
140 $this->assertNull($context->getCmdClass());
141 $this->assertNull($context->getCmd());
142 $this->assertNull($context->getPath()->getCidPath());
143 $this->assertNull($context->getObjType());
144 $this->assertNull($context->getObjId());
145
146 // manually adopt request values.
147 $context->adopt();
148
149 $this->assertFalse($context->isAsync());
150 $this->assertNull($context->getObjType());
151 $this->assertNull($context->getObjId());
152 $this->assertEquals('ilias.php', $context->getTargetScript());
153
154 $this->assertEquals('test_cmd_mode', $context->getCmdMode());
155 $this->assertEquals('test_redirect_source', $context->getRedirectSource());
156 $this->assertEquals('test_base_class', $context->getBaseClass());
157 $this->assertEquals('test_cmd_class', $context->getCmdClass());
158 $this->assertEquals('test_cmd', $context->getCmd());
159 $this->assertEquals('test_cid_path', $context->getPath()->getCidPath());
160 }
161
163 {
165 $this->assertFalse($context->isAsync());
166
168 $context->adopt();
169 $this->assertFalse($context->isAsync());
170
172 $context->adopt();
173 $this->assertFalse($context->isAsync());
174
176 $context->adopt();
177 $this->assertTrue($context->isAsync());
178 }
179
181 {
182 $expected_cid_path = '0';
183 $this->factory
184 ->method('find')
185 ->willReturn($this->getPath($expected_cid_path));
186
188 $this->assertNull($context->getBaseClass());
189
190 $this->values[ilCtrlInterface::PARAM_BASE_CLASS] = ilCtrlBaseClass1TestGUI::class;
191 $context->adopt();
192
193 $this->assertEquals(ilCtrlBaseClass1TestGUI::class, $context->getBaseClass());
194 $this->assertEquals($expected_cid_path, $context->getPath()->getCidPath());
195 }
196
198 {
200 $this->assertNull($context->getBaseClass());
201 $this->assertNull($context->getPath()->getCidPath());
202
203 $context->adopt();
204
205 $this->assertNull($context->getBaseClass());
206 $this->assertNull($context->getPath()->getCidPath());
207 }
208
210 {
211 $context = new ilCtrlContext($this->factory, $this->request, $this->refinery);
212
213 $this->assertNull($context->getObjType());
214 $this->assertNull($context->getObjId());
215 $this->assertEquals('ilias.php', $context->getTargetScript());
216
218 ->setObjType('test_type')
219 ->setObjId(42)
220 ->setTargetScript('test_script');
221
222 $this->assertEquals('test_type', $context->getObjType());
223 $this->assertEquals(42, $context->getObjId());
224 $this->assertEquals('test_script', $context->getTargetScript());
225 }
226
228 {
229 $context = new ilCtrlContext($this->factory, $this->request, $this->refinery);
230 $this->factory
231 ->method('find')
232 ->willReturn($this->getPath('http://localhost'));
233
234 $this->assertNull($context->getCmdClass());
235 $context->setCmdClass(ilCtrlCommandClass1TestGUI::class);
236 $this->assertEquals(ilCtrlCommandClass1TestGUI::class, $context->getCmdClass());
237
239 ilCtrlInterface::PARAM_CMD_CLASS => ilCtrlBaseClass1TestGUI::class,
240 ]);
241
242 $this->assertNull($context->getCmdClass());
243 $context->adopt();
244 $this->assertEquals(ilCtrlBaseClass1TestGUI::class, $context->getCmdClass());
245 }
246
248 {
249 $context = new ilCtrlContext($this->factory, $this->request, $this->refinery);
250 $this->factory
251 ->method('find')
252 ->willReturn($this->getPath('http://localhost'));
253
254 $context->setBaseClass(ilCtrlBaseClass1TestGUI::class);
255 $this->assertEquals(ilCtrlBaseClass1TestGUI::class, $context->getCmdClass());
256
257 $context->setCmdClass(ilCtrlCommandClass1TestGUI::class);
258 $this->assertEquals(ilCtrlBaseClass1TestGUI::class, $context->getBaseClass());
259 $this->assertEquals(ilCtrlCommandClass1TestGUI::class, $context->getCmdClass());
260
262 ilCtrlInterface::PARAM_CMD_CLASS => ilCtrlBaseClass1TestGUI::class,
263 ]);
264
265 $this->assertNull($context->getCmdClass());
266 $context->adopt();
267 $this->assertEquals(ilCtrlBaseClass1TestGUI::class, $context->getCmdClass());
268 }
269
271 {
272 // for this test an actual instance of the path factory
273 // is required, therefore we have to creat the test ctrl
274 // structure.
275
276 $structure_artifact = require __DIR__ . '/Data/Structure/test_ctrl_structure.php';
277 $base_class_artifact = require __DIR__ . '/Data/Structure/test_base_classes.php';
278
280 $structure_artifact,
281 $base_class_artifact,
282 []
283 );
284
285 $path_factory = new ilCtrlPathFactory($structure);
286 $context = new ilCtrlContext($path_factory, $this->request, $this->refinery);
287 $this->assertNull($context->getPath()->getCidPath());
288
289 $context->setBaseClass(ilCtrlInvalidGuiClass::class);
290 $this->assertNull($context->getPath()->getCidPath());
291 $this->assertNull($context->getBaseClass());
292
293 $context->setCmdClass(ilCtrlCommandClass1TestGUI::class);
294 $this->assertNull($context->getPath()->getCidPath());
295 $this->assertNull($context->getCmdClass());
296
297 $context->setBaseClass(ilCtrlBaseClass1TestGUI::class);
298 $this->assertEquals('0', $context->getPath()->getCidPath());
299 $this->assertEquals(ilCtrlBaseClass1TestGUI::class, $context->getBaseClass());
300 $this->assertEquals(ilCtrlBaseClass1TestGUI::class, $context->getCmdClass());
301
302 $context->setCmdClass(ilCtrlCommandClass1TestGUI::class);
303 $this->assertEquals('0:2', $context->getPath()->getCidPath());
304 $this->assertEquals(ilCtrlBaseClass1TestGUI::class, $context->getBaseClass());
305 $this->assertEquals(ilCtrlCommandClass1TestGUI::class, $context->getCmdClass());
306 }
307}
$structure
TOTAL STRUCTURE.
factory()
Builds data types.
Definition: Factory.php:36
Class ilCtrlAbstractPath.
Class ilCtrlContextTest.
ArrayBasedRequestWrapper $request
testContextCommandClassPropertyWithBaseClass()
ilCtrlPathFactory $factory
testContextPropertyAdoptionWithoutCidPathAndBaseClass()
testContextPathProgressionWhenSettingClasses()
getPath(?string $cid_path=null)
testContextCommandClassPropertyWithoutBaseClass()
getContextWithManualAdoption(?array $request_values=null)
testContextBaseClassPropertyAdoptionByRequest()
Class ilCtrlContext is responsible for holding the current context information.
Class ilCtrlPathFactory.
Class ilCtrlStructure holds the currently read control structure.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
const CMD_MODE_PROCESS
different modes used for UI plugins (or in dev-mode).
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
$context
Definition: webdav.php:31