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