ILIAS  trunk Revision v11.0_alpha-1723-g8e69f309bab
All Data Structures Namespaces Files Functions Variables Enumerations Enumerator Modules Pages
ilCtrlContextTest.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
24 
30 {
35 
40 
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 
115  public function testContextPropertyAdoptionByRequest(): void
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 
217  $context
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 }
Class ilCtrlContextTest.
$context
Definition: webdav.php:31
const CMD_MODE_PROCESS
different modes used for UI plugins (or in dev-mode).
ArrayBasedRequestWrapper $request
Class ilCtrlPathFactory.
Class ilCtrlContext is responsible for holding the current context information.
factory()
Class ilCtrlStructure holds the currently read control structure.
Class ilCtrlAbstractPath.
getContextWithManualAdoption(?array $request_values=null)
getPath(?string $cid_path=null)
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
testContextCommandClassPropertyWithBaseClass()
testContextPathProgressionWhenSettingClasses()
testContextBaseClassPropertyAdoptionByRequest()
testContextPropertyAdoptionWithoutCidPathAndBaseClass()
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
$structure
TOTAL STRUCTURE.
ilCtrlPathFactory $factory
testContextCommandClassPropertyWithoutBaseClass()
__construct(Container $dic, ilPlugin $plugin)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...