ILIAS  release_8 Revision v8.24
ilCtrlContextTest.php
Go to the documentation of this file.
1<?php
2
3declare(strict_types=1);
4
5/* Copyright (c) 2021 Thibeau Fuhrer <thf@studer-raimann.ch> Extended GPL, see docs/LICENSE */
6
7use PHPUnit\Framework\TestCase;
9use ILIAS\Refinery\Factory as Refinery;
10
15class ilCtrlContextTest extends TestCase
16{
21
26
30 private Refinery $refinery;
31
35 private array $values;
36
40 protected function setUp(): void
41 {
42 $this->values = [];
43 $this->refinery = $this->createMock(Refinery::class);
44 $this->factory = $this->createMock(ilCtrlPathFactory::class);
45 $this->request = $this->createMock(ArrayBasedRequestWrapper::class);
46 $this->request->method('has')->willReturn(true);
47 $this->request
48 ->method('retrieve')
49 ->willReturnCallback(function ($key) {
50 return $this->values[$key] ?? null;
51 });
52 }
53
58 protected function getPath(string $cid_path = null): ilCtrlPathInterface
59 {
60 return new class ($cid_path) extends ilCtrlAbstractPath {
61 // override parent constructor, so we don't
62 // have to mock the ilCtrlStructure.
63 public function __construct(string $cid_path = null)
64 {
65 $this->cid_path = $cid_path;
66 }
67 };
68 }
69
74 protected function getContextWithManualAdoption(array $request_values = null): ilCtrlContextInterface
75 {
76 $this->values = $request_values ?? [];
77
78 return new class ($this->factory, $this->request, $this->refinery) extends ilCtrlContext {
79 // override parent constructor, so the request values
80 // are not adopted immediately.
81 public function __construct(
82 ilCtrlPathFactory $path_factory,
84 Refinery $refinery
85 ) {
86 $this->path_factory = $path_factory;
87 $this->path = $path_factory->null();
88 $this->request_wrapper = $request_wrapper;
89 $this->refinery = $refinery;
90 }
91
92 // provide a public method that manually adopts the
93 // request values.
94 public function adopt(): void
95 {
96 $this->adoptRequestParameters();
97 }
98 };
99 }
100
102 {
103 $expected_cid_path = 'test_cid_path';
104 $this->factory
105 ->method('existing')
106 ->willReturn($this->getPath($expected_cid_path));
107
108 $this->factory
109 ->method('find')
110 ->willReturn($this->getPath($expected_cid_path));
111
113 ilCtrlInterface::PARAM_CMD_MODE => 'test_cmd_mode',
114 ilCtrlInterface::PARAM_REDIRECT => 'test_redirect_source',
115 ilCtrlInterface::PARAM_BASE_CLASS => 'test_base_class',
116 ilCtrlInterface::PARAM_CMD_CLASS => 'test_cmd_class',
117 ilCtrlInterface::PARAM_CMD => 'test_cmd',
118 ilCtrlInterface::PARAM_CID_PATH => $expected_cid_path,
119 ]);
120
121 $this->assertFalse($context->isAsync());
122 $this->assertEquals('ilias.php', $context->getTargetScript());
123 $this->assertNull($context->getCmdMode());
124 $this->assertNull($context->getRedirectSource());
125 $this->assertNull($context->getBaseClass());
126 $this->assertNull($context->getCmdClass());
127 $this->assertNull($context->getCmd());
128 $this->assertNull($context->getPath()->getCidPath());
129 $this->assertNull($context->getObjType());
130 $this->assertNull($context->getObjId());
131
132 // manually adopt request values.
133 $context->adopt();
134
135 $this->assertFalse($context->isAsync());
136 $this->assertNull($context->getObjType());
137 $this->assertNull($context->getObjId());
138 $this->assertEquals('ilias.php', $context->getTargetScript());
139
140 $this->assertEquals('test_cmd_mode', $context->getCmdMode());
141 $this->assertEquals('test_redirect_source', $context->getRedirectSource());
142 $this->assertEquals('test_base_class', $context->getBaseClass());
143 $this->assertEquals('test_cmd_class', $context->getCmdClass());
144 $this->assertEquals('test_cmd', $context->getCmd());
145 $this->assertEquals('test_cid_path', $context->getPath()->getCidPath());
146 }
147
149 {
151 $this->assertFalse($context->isAsync());
152
154 $context->adopt();
155 $this->assertFalse($context->isAsync());
156
158 $context->adopt();
159 $this->assertFalse($context->isAsync());
160
162 $context->adopt();
163 $this->assertTrue($context->isAsync());
164 }
165
167 {
168 $expected_cid_path = '0';
169 $this->factory
170 ->method('find')
171 ->willReturn($this->getPath($expected_cid_path));
172
174 $this->assertNull($context->getBaseClass());
175
176 $this->values[ilCtrlInterface::PARAM_BASE_CLASS] = ilCtrlBaseClass1TestGUI::class;
177 $context->adopt();
178
179 $this->assertEquals(ilCtrlBaseClass1TestGUI::class, $context->getBaseClass());
180 $this->assertEquals($expected_cid_path, $context->getPath()->getCidPath());
181 }
182
184 {
186 $this->assertNull($context->getBaseClass());
187 $this->assertNull($context->getPath()->getCidPath());
188
189 $context->adopt();
190
191 $this->assertNull($context->getBaseClass());
192 $this->assertNull($context->getPath()->getCidPath());
193 }
194
196 {
197 $context = new ilCtrlContext($this->factory, $this->request, $this->refinery);
198
199 $this->assertNull($context->getObjType());
200 $this->assertNull($context->getObjId());
201 $this->assertEquals('ilias.php', $context->getTargetScript());
202
204 ->setObjType('test_type')
205 ->setObjId(42)
206 ->setTargetScript('test_script');
207
208 $this->assertEquals('test_type', $context->getObjType());
209 $this->assertEquals(42, $context->getObjId());
210 $this->assertEquals('test_script', $context->getTargetScript());
211 }
212
214 {
215 $context = new ilCtrlContext($this->factory, $this->request, $this->refinery);
216 $this->factory
217 ->method('find')
218 ->willReturn($this->getPath('http://localhost'));
219
220 $this->assertNull($context->getCmdClass());
221 $context->setCmdClass(ilCtrlCommandClass1TestGUI::class);
222 $this->assertEquals(ilCtrlCommandClass1TestGUI::class, $context->getCmdClass());
223
225 ilCtrlInterface::PARAM_CMD_CLASS => ilCtrlBaseClass1TestGUI::class,
226 ]);
227
228 $this->assertNull($context->getCmdClass());
229 $context->adopt();
230 $this->assertEquals(ilCtrlBaseClass1TestGUI::class, $context->getCmdClass());
231 }
232
234 {
235 $context = new ilCtrlContext($this->factory, $this->request, $this->refinery);
236 $this->factory
237 ->method('find')
238 ->willReturn($this->getPath('http://localhost'));
239
240 $context->setBaseClass(ilCtrlBaseClass1TestGUI::class);
241 $this->assertEquals(ilCtrlBaseClass1TestGUI::class, $context->getCmdClass());
242
243 $context->setCmdClass(ilCtrlCommandClass1TestGUI::class);
244 $this->assertEquals(ilCtrlBaseClass1TestGUI::class, $context->getBaseClass());
245 $this->assertEquals(ilCtrlCommandClass1TestGUI::class, $context->getCmdClass());
246
248 ilCtrlInterface::PARAM_CMD_CLASS => ilCtrlBaseClass1TestGUI::class,
249 ]);
250
251 $this->assertNull($context->getCmdClass());
252 $context->adopt();
253 $this->assertEquals(ilCtrlBaseClass1TestGUI::class, $context->getCmdClass());
254 }
255
257 {
258 // for this test an actual instance of the path factory
259 // is required, therefore we have to creat the test ctrl
260 // structure.
261
262 $structure_artifact = require __DIR__ . '/Data/Structure/test_ctrl_structure.php';
263 $base_class_artifact = require __DIR__ . '/Data/Structure/test_base_classes.php';
264
265 $structure = new ilCtrlStructure(
266 $structure_artifact,
267 $base_class_artifact,
268 []
269 );
270
271 $path_factory = new ilCtrlPathFactory($structure);
272 $context = new ilCtrlContext($path_factory, $this->request, $this->refinery);
273 $this->assertNull($context->getPath()->getCidPath());
274
275 $context->setBaseClass(ilCtrlInvalidGuiClass::class);
276 $this->assertNull($context->getPath()->getCidPath());
277 $this->assertNull($context->getBaseClass());
278
279 $context->setCmdClass(ilCtrlCommandClass1TestGUI::class);
280 $this->assertNull($context->getPath()->getCidPath());
281 $this->assertNull($context->getCmdClass());
282
283 $context->setBaseClass(ilCtrlBaseClass1TestGUI::class);
284 $this->assertEquals('0', $context->getPath()->getCidPath());
285 $this->assertEquals(ilCtrlBaseClass1TestGUI::class, $context->getBaseClass());
286 $this->assertEquals(ilCtrlBaseClass1TestGUI::class, $context->getCmdClass());
287
288 $context->setCmdClass(ilCtrlCommandClass1TestGUI::class);
289 $this->assertEquals('0:2', $context->getPath()->getCidPath());
290 $this->assertEquals(ilCtrlBaseClass1TestGUI::class, $context->getBaseClass());
291 $this->assertEquals(ilCtrlCommandClass1TestGUI::class, $context->getCmdClass());
292 }
293}
Builds data types.
Definition: Factory.php:21
Class ilCtrlAbstractPath.
Class ilCtrlContextTest.
ArrayBasedRequestWrapper $request
testContextCommandClassPropertyWithBaseClass()
ilCtrlPathFactory $factory
testContextPropertyAdoptionWithoutCidPathAndBaseClass()
getPath(string $cid_path=null)
testContextPathProgressionWhenSettingClasses()
testContextCommandClassPropertyWithoutBaseClass()
testContextBaseClassPropertyAdoptionByRequest()
getContextWithManualAdoption(array $request_values=null)
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).
Interface ilCtrlPathInterface is responsible for holding and manipulating a valid ilCtrl class-path (...
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
string $key
Consumer key/client ID value.
Definition: System.php:193
$context
Definition: webdav.php:29