ILIAS  trunk Revision v13.0_alpha-62-g3b72d83f2e5
ilCtrlEventTest.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22use PHPUnit\Framework\TestCase;
24use ILIAS\Refinery\Factory as Refinery;
26use Psr\Http\Message\ServerRequestInterface;
28
32class ilCtrlEventTest extends TestCase
33{
35
36 protected function setUp(): void
37 {
38 $this->subject = new ilCtrlSubject();
39 }
40
41 public function testObserverAttachment(): void
42 {
43 // Default Attachment
44 $mocked_observer = $this->createStub(ilCtrlObserver::class);
45 $mocked_subject = $this->createMock(ilCtrlSubject::class);
46 $mocked_ilctrl = $this->getMockedCtrl($mocked_subject);
47 $mocked_subject->expects($this->once())
48 ->method('attach')
49 ->with($mocked_observer, ilCtrlEvent::ALL);
50
51 $mocked_ilctrl->attachObserver($mocked_observer);
52
53 $mocked_subject->expects($this->once())
54 ->method('detach')
55 ->with($mocked_observer, ilCtrlEvent::ALL);
56 $mocked_ilctrl->detachObserver($mocked_observer);
57
58 // Command Class Attachment
59 $mocked_observer = $this->createStub(ilCtrlObserver::class);
60 $mocked_subject = $this->createMock(ilCtrlSubject::class);
61 $mocked_ilctrl = $this->getMockedCtrl($mocked_subject);
62 $mocked_subject->expects($this->once())
63 ->method('attach')
64 ->with($mocked_observer, ilCtrlEvent::COMMAND_CLASS_FORWARD);
65
66 $mocked_ilctrl->attachObserver($mocked_observer, ilCtrlEvent::COMMAND_CLASS_FORWARD);
67
68 $mocked_subject->expects($this->once())
69 ->method('detach')
70 ->with($mocked_observer, ilCtrlEvent::COMMAND_CLASS_FORWARD);
71 $mocked_ilctrl->detachObserver($mocked_observer, ilCtrlEvent::COMMAND_CLASS_FORWARD);
72
73 // Command Determination Attachment
74 $mocked_observer = $this->createStub(ilCtrlObserver::class);
75 $mocked_subject = $this->createMock(ilCtrlSubject::class);
76 $mocked_ilctrl = $this->getMockedCtrl($mocked_subject);
77 $mocked_subject->expects($this->once())
78 ->method('attach')
79 ->with($mocked_observer, ilCtrlEvent::COMMAND_DETERMINATION);
80
81 $mocked_ilctrl->attachObserver($mocked_observer, ilCtrlEvent::COMMAND_DETERMINATION);
82
83 $mocked_subject->expects($this->once())
84 ->method('detach')
85 ->with($mocked_observer, ilCtrlEvent::COMMAND_DETERMINATION);
86 $mocked_ilctrl->detachObserver($mocked_observer, ilCtrlEvent::COMMAND_DETERMINATION);
87 }
88
89 public function testNotifyEvents(): void
90 {
91 require_once __DIR__ . '/Data/GUI/class.ilCtrlBaseClass1TestGUI.php';
92 $base_class = new ilCtrlBaseClass1TestGUI();
93
94 $mocked_ilctrl = $this->getMockedCtrl();
95
96 $mocked_observer = $this->createMock(ilCtrlObserver::class);
97 $mocked_ilctrl->attachObserver($mocked_observer, ilCtrlEvent::ALL);
98 $consecutive = [
99 [ilCtrlEvent::COMMAND_CLASS_FORWARD, ilCtrlBaseClass1TestGUI::class],
100 [ilCtrlEvent::COMMAND_DETERMINATION, 'fallback']
101 ];
102 $mocked_observer
103 ->expects($this->exactly(2))
104 ->method('update')
105 ->willReturnCallback(
106 function ($event, $cmd) use (&$consecutive) {
107 $expected = array_shift($consecutive);
108 $this->assertEquals($expected, [$event, $cmd]);
109 }
110 );
111
112 $mocked_ilctrl->forwardCommand($base_class);
113 $command = $mocked_ilctrl->getCmd('fallback');
114 }
115
121 {
122 return new ilCtrl(
123 $this->createStub(ilCtrlStructureInterface::class),
124 $this->createStub(ilCtrlTokenRepositoryInterface::class),
125 $this->createStub(ilCtrlPathFactoryInterface::class),
126 $this->createStub(ilCtrlContextInterface::class),
127 $this->createStub(ResponseSenderStrategy::class),
128 $this->createStub(ServerRequestInterface::class),
129 $this->createStub(RequestWrapper::class),
130 $this->createStub(RequestWrapper::class),
131 $this->createStub(Refinery::class),
132 $this->createStub(ilComponentFactory::class),
133 $subject ?? $this->subject,
134 $this->createStub(ilCtrlQueryParserInterface::class),
135 $this->createStub(MessageFactory::class),
136 );
137 }
138}
Builds data types.
Definition: Factory.php:36
Class ilCtrlBaseClass1TestGUI.
ilCtrlSubject $subject
getMockedCtrl(?ilCtrlSubject $subject=null)
Helper function that returns an ilCtrl instance with mocked dependencies.
Class ilCtrl provides processing control methods.
@ ALL
event string being used if
Creates psr-7 messages without binding components to the underlying library.
Interface RequestWrapper.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...