ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
ilObjChatroomAccessTest.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
21use PHPUnit\Framework\MockObject\MockObject;
22
28{
30 protected ilDBInterface&MockObject $db;
31
33 {
34 $expected = [
35 ['permission' => 'read', 'cmd' => 'view', 'lang_var' => 'enter', 'default' => true],
36 ['permission' => 'write', 'cmd' => 'settings-general', 'lang_var' => 'settings'],
37 ];
38
39 $commands = $this->access::_getCommands();
40
41 $this->assertIsArray($commands);
42 $this->assertSame($expected, $commands);
43 }
44
45 public function testGotoCheckFails(): void
46 {
47 $user = $this->getMockBuilder(ilObjUser::class)->disableOriginalConstructor()->onlyMethods(
48 ['getId']
49 )->getMock();
50 $user->method('getId')->willReturn(6);
51
52 $this->setGlobalVariable('ilObjDataCache', $this->createMock(ilObjectDataCache::class));
53
54 $this->setGlobalVariable('ilUser', $user);
55
56 $chatroomSettings = $this->createMock(ilDBStatement::class);
57 $chatroomSettings
58 ->method('fetchAssoc')
59 ->willReturnOnConsecutiveCalls(
60 [
61 'keyword' => 'public_room_ref',
62 'value' => '1',
63 ],
64 null,
65 );
66
67 $this->db
68 ->method('fetchAssoc')
69 ->willReturnCallback(static fn(ilDBStatement $statement) => $statement->fetchAssoc());
70
71 $this->db
72 ->method('query')
73 ->with($this->stringContains("FROM settings WHERE module='chatroom'", false))
74 ->willReturn($chatroomSettings);
75 $this->setGlobalVariable('ilDB', $this->db);
76
77 $rbacsystem = $this->getMockBuilder(ilRbacSystem::class)->disableOriginalConstructor()->onlyMethods(
78 ['checkAccess', 'checkAccessOfUser']
79 )->getMock();
80 $rbacsystem->method('checkAccess')->with(
81 $this->logicalOr($this->equalTo('read'), $this->equalTo('visible')),
82 $this->equalTo('1')
83 )->willReturn(false);
84 $rbacsystem->method('checkAccessOfUser')->with(
85 $this->equalTo(6),
86 $this->logicalOr($this->equalTo('read'), $this->equalTo('visible')),
87 $this->equalTo('1')
88 )->willReturn(false);
89
90 $this->setGlobalVariable('rbacsystem', $rbacsystem);
91
92 $this->assertFalse($this->access::_checkGoto(''));
93 $this->assertFalse($this->access::_checkGoto('chtr'));
94 $this->assertFalse($this->access::_checkGoto('chtr_'));
95 $this->assertFalse($this->access::_checkGoto('chtr_'));
96 $this->assertFalse($this->access::_checkGoto('chtr_test'));
97 $this->assertFalse($this->access::_checkGoto('chtr_1'));
98 }
99
100 public function testGotoCheckSucceeds(): void
101 {
102 $user = $this->getMockBuilder(ilObjUser::class)->disableOriginalConstructor()->onlyMethods(
103 ['getId']
104 )->getMock();
105 $user->method('getId')->willReturn(6);
106
107 $this->setGlobalVariable('ilObjDataCache', $this->createMock(ilObjectDataCache::class));
108 $this->setGlobalVariable('ilUser', $user);
109
110 $chatroomSettings = $this->createMock(ilDBStatement::class);
111 $chatroomSettings
112 ->method('fetchAssoc')
113 ->willReturnOnConsecutiveCalls(
114 [
115 'keyword' => 'public_room_ref',
116 'value' => '5',
117 ],
118 null
119 );
120
121 $this->db
122 ->method('fetchAssoc')
123 ->willReturnCallback(static fn(ilDBStatement $statement) => $statement->fetchAssoc());
124
125 $this->db
126 ->method('query')
127 ->with($this->stringContains("FROM settings WHERE module='chatroom'", false))
128 ->willReturn($chatroomSettings);
129 $this->setGlobalVariable('ilDB', $this->db);
130
131 $rbacsystem = $this->getMockBuilder(ilRbacSystem::class)->disableOriginalConstructor()->onlyMethods(
132 ['checkAccess', 'checkAccessOfUser']
133 )->getMock();
134 $rbacsystem->method('checkAccess')->with(
135 $this->logicalOr($this->equalTo('read'), $this->equalTo('visible'), $this->equalTo('write')),
136 $this->equalTo('5')
137 )->willReturn(true);
138 $rbacsystem->method('checkAccessOfUser')->with(
139 $this->equalTo(6),
140 $this->logicalOr($this->equalTo('read'), $this->equalTo('visible'), $this->equalTo('write')),
141 $this->equalTo('5')
142 )->willReturn(true);
143
144 $this->setGlobalVariable('rbacsystem', $rbacsystem);
145
146 $this->assertTrue($this->access::_checkGoto('chtr_5'));
147 }
148
149 public function testAccessChecksFail(): void
150 {
151 $userId = 1;
152 $refId = 99;
153 $objId = 6;
154
155 $user = $this->getMockBuilder(ilObjUser::class)->disableOriginalConstructor()->onlyMethods(
156 ['getId']
157 )->getMock();
158 $user->expects($this->once())->method('getId')->willReturn($userId);
159
160 $this->setGlobalVariable('ilUser', $user);
161
162 $rbacsystem = $this->getMockBuilder(ilRbacSystem::class)->disableOriginalConstructor()->onlyMethods(
163 ['checkAccessOfUser']
164 )->getMock();
165 $rbacsystem->expects($this->once())->method('checkAccessOfUser')->with(
166 $this->equalTo($userId),
167 $this->equalTo('write'),
168 $this->equalTo($refId)
169 )->willReturn(false);
170
171 $this->setGlobalVariable('rbacsystem', $rbacsystem);
172
173 $this->assertFalse($this->access->_checkAccess('unused', 'write', $refId, $objId));
174 }
175
176 public function testAccessChecksSucceed(): void
177 {
178 $userId = 1;
179 $refId = 99;
180 $objId = 6;
181
182 $user = $this->getMockBuilder(ilObjUser::class)->disableOriginalConstructor()->onlyMethods(
183 ['getId']
184 )->getMock();
185 $user->expects($this->once())->method('getId')->willReturn($userId);
186
187 $this->setGlobalVariable('ilUser', $user);
188
189 $this->db->method('fetchAssoc')->willReturnOnConsecutiveCalls(
190 ['keyword' => 'chat_enabled', 'value' => '0'],
191 null
192 );
193
194 $rbacsystem = $this->getMockBuilder(ilRbacSystem::class)->disableOriginalConstructor()->onlyMethods(
195 ['checkAccessOfUser']
196 )->getMock();
197 $rbacsystem->expects($this->once())->method('checkAccessOfUser')->with(
198 $this->equalTo($userId),
199 $this->equalTo('write'),
200 $this->equalTo($refId)
201 )->willReturn(true);
202
203 $this->setGlobalVariable('rbacsystem', $rbacsystem);
204
205 $this->assertTrue($this->access->_checkAccess('unused', 'write', $refId, $objId));
206 }
207
208 protected function setUp(): void
209 {
210 parent::setUp();
211
212 $settingsReflection = new ReflectionClass(ilSetting::class);
213 $cache = $settingsReflection->getProperty('settings_cache');
214 $cache->setAccessible(true);
215 $cache->setValue($settingsReflection, []);
216
217 $this->access = new ilObjChatroomAccess();
218 $this->db = $this->createGlobalIlDBMock();
219 }
220}
Class ilObjChatroomAccessTest.
ilDBInterface &MockObject $db
Access class for chatroom objects.
Interface ilDBInterface.
Interface ilDBStatement.
$objId
Definition: xapitoken.php:57
$refId
Definition: xapitoken.php:58