ILIAS  release_6 Revision v6.24-5-g0c8bfefb3b8
ilEventDetectorTest.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2014 ILIAS open source, Extended GPL, see docs/LICENSE */
3
16{
17 public function setUp() : void
18 {
20
21 require_once './Services/WorkflowEngine/classes/utils/class.ilWorkflowUtils.php';
22
23 // Empty workflow.
24 require_once './Services/WorkflowEngine/classes/workflows/class.ilEmptyWorkflow.php';
25 $this->workflow = new ilEmptyWorkflow();
26
27 // Basic node
28 require_once './Services/WorkflowEngine/classes/nodes/class.ilBasicNode.php';
29 $this->node = new ilBasicNode($this->workflow);
30
31 // Wiring up so the node is attached to the workflow.
32 $this->workflow->addNode($this->node);
33
34 require_once './Services/WorkflowEngine/classes/detectors/class.ilEventDetector.php';
35 }
36
37 public function tearDown() : void
38 {
39 global $DIC;
40
41 if (isset($DIC['ilSetting'])) {
42 $DIC['ilSetting']->delete('IL_PHPUNIT_TEST_TIME');
43 $DIC['ilSetting']->delete('IL_PHPUNIT_TEST_MICROTIME');
44 }
45 }
46
48 {
49 // Act
50 $detector = new ilEventDetector($this->node);
51
52 // Assert
53 // No exception - good
54 $this->assertTrue(
55 true,
56 'Construction failed with valid context passed to constructor.'
57 );
58 }
59
61 {
62 // Arrange
63 $detector = new ilEventDetector($this->node);
64 $timer_start = ilWorkflowUtils::time() + 5 * 60; # +5 Minutes from here.
65 $timer_end = 0;
66 $detector->setListeningTimeframe($timer_start, $timer_end);
67
68 // Act
69 $actual = $detector->isListening();
70
71 // Assert
72 $this->assertFalse($actual, 'Detector should not be listening.');
73 }
74
76 {
77 // Arrange
78 $detector = new ilEventDetector($this->node);
79 $timer_start = ilWorkflowUtils::time() - 5 * 60; # -5 Minutes from now.
80 $timer_end = ilWorkflowUtils::time() - 1 * 60; # -1 Minute from now.
81 $detector->setListeningTimeframe($timer_start, $timer_end);
82
83 // Act
84 $actual = $detector->isListening();
85
86 // Assert
87 $this->assertFalse($actual, 'Detector should not be listening.');
88 }
89
91 {
92 // Arrange
93 $detector = new ilEventDetector($this->node);
94 $timer_start = ilWorkflowUtils::time() - 5 * 60; # -5 Minutes from now.
95 $timer_end = 0; # Wildcard.
96 $detector->setListeningTimeframe($timer_start, $timer_end);
97
98 // Act
99 $actual = $detector->isListening();
100
101 // Assert
102 $this->assertTrue($actual, 'Detector should not be listening.');
103 }
104
106 {
107 // Arrange
108 $detector = new ilEventDetector($this->node);
109 $timer_start = 0; # Wildcard.
110 $timer_end = ilWorkflowUtils::time() + 5 * 60; # +5 Minutes from now.
111 $detector->setListeningTimeframe($timer_start, $timer_end);
112
113 // Act
114 $actual = $detector->isListening();
115
116 // Assert
117 $this->assertTrue($actual, 'Detector should not be listening.');
118 }
119
121 {
122 // Arrange
123 $detector = new ilEventDetector($this->node);
124
125 // Act
126 $actual = $detector->isListening();
127
128 // Assert
129 $this->assertTrue($actual, 'Detector should be listening.');
130 }
131
133 {
134 // Arrange
135 $detector = new ilEventDetector($this->node);
136 $exp_start = 4711;
137 $exp_end = 4712;
138
139 // Act
140 $detector->setListeningTimeframe($exp_start, $exp_end);
141 $act = $detector->getListeningTimeframe();
142
143 // Assert
144 $this->assertEquals($exp_start . $exp_end, $act['listening_start'] . $act['listening_end']);
145 }
146
151 {
152 $this->expectException(ilWorkflowInvalidArgumentException::class);
153
154 // Arrange
155 $detector = new ilEventDetector($this->node);
156 $exp_start = 4712; # +5 Minutes from here.
157 $exp_end = 4711;
158
159 // Act
160 $detector->setListeningTimeframe($exp_start, $exp_end);
161 $act = $detector->getListeningTimeframe();
162
163 // Assert
164 $this->assertEquals($exp_start . $exp_end, $act['listening_start'] . $act['listening_end']);
165 }
166
167 public function testSetGetDbId()
168 {
169 // Arrange
170 $detector = new ilEventDetector($this->node);
171 $expected = '1234';
172
173 // Act
174 $detector->setDbId($expected);
175 $actual = $detector->getDbId();
176
177 // Assert
178 $this->assertEquals($expected, $actual);
179 }
180
184 public function testGetNonExistingDbId()
185 {
186 $this->expectException(ilWorkflowObjectStateException::class);
187
188 // Arrange
189 $detector = new ilEventDetector($this->node);
190 $expected = '1234';
191
192 // Act
193 $actual = $detector->getDbId();
194
195 // Assert
196 $this->assertEquals($expected, $actual);
197 }
198
199 public function testHasDbIdSet()
200 {
201 // Arrange
202 $detector = new ilEventDetector($this->node);
203 $expected = '1234';
204
205 // Act
206 $detector->setDbId($expected);
207 $actual = $detector->hasDbId();
208
209 // Assert
210 $this->assertTrue($actual);
211 }
212
213 public function testHasDbIdUnset()
214 {
215 // Arrange
216 $detector = new ilEventDetector($this->node);
217
218 // Act
219 $actual = $detector->hasDbId();
220
221 // Assert
222 $this->assertFalse($actual);
223 }
224
225 public function testSetGetEvent()
226 {
227 // Arrange INC
228 $detector = new ilEventDetector($this->node);
229 $exp_type = 'time_passed';
230 $exp_content = 'time_passed';
231
232 // Act
233 $detector->setEvent($exp_type, $exp_content);
234
235 // Assert
236 $event = $detector->getEvent();
237 $act_type = $event['type'];
238 $act_content = $event['content'];
239 $this->assertEquals($exp_type . $exp_content, $act_type . $act_content);
240 }
241
242 public function testSetGetEventSubject()
243 {
244 // Arrange INC
245 $detector = new ilEventDetector($this->node);
246 $exp_type = 'none';
247 $exp_id = '0';
248
249 // Act
250 $detector->setEventSubject($exp_type, $exp_id);
251
252 // Assert
253 $event = $detector->getEventSubject();
254 $act_type = $event['type'];
255 $act_id = $event['identifier'];
256 $this->assertEquals($exp_type . $exp_id, $act_type . $act_id);
257 }
258
259 public function testSetGetEventContext()
260 {
261 // Arrange INC
262 $detector = new ilEventDetector($this->node);
263 $exp_type = 'none';
264 $exp_id = '0';
265
266 // Act
267 $detector->setEventContext($exp_type, $exp_id);
268
269 // Assert
270 $event = $detector->getEventContext();
271 $act_type = $event['type'];
272 $act_id = $event['identifier'];
273 $this->assertEquals($exp_type . $exp_id, $act_type . $act_id);
274 }
275
276 public function testGetContext()
277 {
278 // Arrange
279 $detector = new ilEventDetector($this->node);
280
281 // Act
282 $actual = $detector->getContext();
283
284 // Assert
285 if ($actual === $this->node) {
286 $this->assertEquals($actual, $this->node);
287 } else {
288 $this->assertTrue(false, 'Context not identical.');
289 }
290 }
291
292 public function testTriggerValid()
293 {
294 // Arrange
295 $detector = new ilEventDetector($this->node);
296 $evt_type = 'testEvent';
297 $evt_content = 'content';
298 $detector->setEvent($evt_type, $evt_content);
299 $subj_type = 'usr';
300 $subj_id = 6;
301 $detector->setEventSubject($subj_type, $subj_id);
302 $ctx_type = 'crs';
303 $ctx_id = 48;
304 $detector->setEventContext($ctx_type, $ctx_id);
305 $params = array(
306 $evt_type, $evt_content,
307 $subj_type, $subj_id,
308 $ctx_type, $ctx_id
309 );
310
311 // Act
312 $detector->trigger($params);
313
314 // Assert
315 $actual = $detector->getDetectorState();
316 $this->assertTrue($actual);
317 }
318
319 public function testTriggerValidTwice()
320 {
321 // Arrange
322 $detector = new ilEventDetector($this->node);
323 $evt_type = 'testEvent';
324 $evt_content = 'content';
325 $detector->setEvent($evt_type, $evt_content);
326 $subj_type = 'usr';
327 $subj_id = 6;
328 $detector->setEventSubject($subj_type, $subj_id);
329 $ctx_type = 'crs';
330 $ctx_id = 48;
331 $detector->setEventContext($ctx_type, $ctx_id);
332 $params = array(
333 $evt_type, $evt_content,
334 $subj_type, $subj_id,
335 $ctx_type, $ctx_id
336 );
337
338 // Act
339 $this->assertTrue($detector->trigger($params), 'First trigger should receive a true state.');
340 $this->assertFalse($detector->trigger($params), 'Second trigger should receive a false state.');
341
342 // Assert
343 $actual = $detector->getDetectorState();
344 $this->assertTrue($actual, 'After satisfaction of the trigger, detectorstate should be true.');
345 }
346
347 // TODO Test wildcards!
348
350 {
351 // Arrange
352 $detector = new ilEventDetector($this->node);
353 $evt_type = 'testEvent';
354 $evt_content = 'content';
355 $detector->setEvent($evt_type, $evt_content);
356 $subj_type = 'usr';
357 $subj_id = 6;
358 $detector->setEventSubject($subj_type, $subj_id);
359 $ctx_type = 'crs';
360 $ctx_id = 48;
361 $detector->setEventContext($ctx_type, $ctx_id);
362 $params = array(
363 $evt_type, $evt_content . 'INVALIDATE',
364 $subj_type, $subj_id,
365 $ctx_type, $ctx_id
366 );
367
368 // Act
369 $detector->trigger($params);
370
371 // Assert
372 $actual = $detector->getDetectorState();
373 $this->assertFalse($actual);
374 }
375
376 public function testTriggerInvalidType()
377 {
378 // Arrange
379 $detector = new ilEventDetector($this->node);
380 $evt_type = 'testEvent';
381 $evt_content = 'content';
382 $detector->setEvent($evt_type, $evt_content);
383 $subj_type = 'usr';
384 $subj_id = 6;
385 $detector->setEventSubject($subj_type, $subj_id);
386 $ctx_type = 'crs';
387 $ctx_id = 48;
388 $detector->setEventContext($ctx_type, $ctx_id);
389 $params = array(
390 $evt_type . 'INVALIDATE', $evt_content,
391 $subj_type, $subj_id,
392 $ctx_type, $ctx_id
393 );
394
395 // Act
396 $detector->trigger($params);
397
398 // Assert
399 $actual = $detector->getDetectorState();
400 $this->assertFalse($actual);
401 }
402
404 {
405 // Arrange
406 $detector = new ilEventDetector($this->node);
407 $evt_type = 'testEvent';
408 $evt_content = 'content';
409 $detector->setEvent($evt_type, $evt_content);
410 $subj_type = 'usr';
411 $subj_id = 6;
412 $detector->setEventSubject($subj_type, $subj_id);
413 $ctx_type = 'crs';
414 $ctx_id = 48;
415 $detector->setEventContext($ctx_type, $ctx_id);
416 $params = array(
417 $evt_type, $evt_content,
418 $subj_type . 'INVALIDATE', $subj_id,
419 $ctx_type, $ctx_id
420 );
421
422 // Act
423 $detector->trigger($params);
424
425 // Assert
426 $actual = $detector->getDetectorState();
427 $this->assertFalse($actual);
428 }
429
431 {
432 // Arrange
433 $detector = new ilEventDetector($this->node);
434 $evt_type = 'testEvent';
435 $evt_content = 'content';
436 $detector->setEvent($evt_type, $evt_content);
437 $subj_type = 'usr';
438 $subj_id = 6;
439 $detector->setEventSubject($subj_type, $subj_id);
440 $ctx_type = 'crs';
441 $ctx_id = 48;
442 $detector->setEventContext($ctx_type, $ctx_id);
443 $params = array(
444 $evt_type, $evt_content,
445 $subj_type, $subj_id . 'INVALIDATE',
446 $ctx_type, $ctx_id
447 );
448
449 // Act
450 $detector->trigger($params);
451
452 // Assert
453 $actual = $detector->getDetectorState();
454 $this->assertFalse($actual);
455 }
456
458 {
459 // Arrange
460 $detector = new ilEventDetector($this->node);
461 $evt_type = 'testEvent';
462 $evt_content = 'content';
463 $detector->setEvent($evt_type, $evt_content);
464 $subj_type = 'usr';
465 $subj_id = 6;
466 $detector->setEventSubject($subj_type, $subj_id);
467 $ctx_type = 'crs';
468 $ctx_id = 48;
469 $detector->setEventContext($ctx_type, $ctx_id);
470 $params = array(
471 $evt_type, $evt_content,
472 $subj_type, $subj_id,
473 $ctx_type . 'INVALIDATE', $ctx_id
474 );
475
476 // Act
477 $detector->trigger($params);
478
479 // Assert
480 $actual = $detector->getDetectorState();
481 $this->assertFalse($actual);
482 }
483
485 {
486 // Arrange
487 $detector = new ilEventDetector($this->node);
488 $evt_type = 'testEvent';
489 $evt_content = 'content';
490 $detector->setEvent($evt_type, $evt_content);
491 $subj_type = 'usr';
492 $subj_id = 6;
493 $detector->setEventSubject($subj_type, $subj_id);
494 $ctx_type = 'crs';
495 $ctx_id = 48;
496 $detector->setEventContext($ctx_type, $ctx_id);
497 $params = array(
498 $evt_type, $evt_content,
499 $subj_type, $subj_id,
500 $ctx_type, $ctx_id . 'INVALIDATE'
501 );
502
503 // Act
504 $detector->trigger($params);
505
506 // Assert
507 $actual = $detector->getDetectorState();
508 $this->assertFalse($actual);
509 }
510}
An exception for terminatinating execution or to throw for unit testing.
@noinspection PhpIncludeInspection
@noinspection PhpIncludeInspection
ilEventDetectorTest is part of the petri net based workflow engine.
@noinspection PhpIncludeInspection
Class ilWorkflowEngineBaseTest.
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
$DIC
Definition: xapitoken.php:46