ILIAS  release_7 Revision v7.30-3-g800a261c036
All Data Structures Namespaces Files Functions Variables Modules Pages
ilObjContainerDAVTest.php
Go to the documentation of this file.
1 <?php
2 
3 use \PHPUnit\Framework\TestCase;
4 use \Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration;
5 
6 require_once 'ilObjDummyDAV.php';
7 
9 {
11 
13  protected $ref_id;
14 
16  protected $mocked_obj;
17 
20 
22  protected $mocked_dav_helper;
23 
25  protected $container_dav;
26 
30  protected function setUp() : void
31  {
32  $this->ref_id = 100;
33  $this->mocked_obj = \Mockery::mock('ilContainer');
34  $this->mocked_obj->shouldReceive(['getRefId' => $this->ref_id]);
35 
36  $this->mocked_repo_helper = \Mockery::mock('ilWebDAVRepositoryHelper');
37 
38  $this->mocked_dav_helper = \Mockery::mock('ilWebDAVObjDAVHelper');
39 
40  $this->container_dav = $this->setUpContainerDAV($this->mocked_obj, $this->mocked_repo_helper, $this->mocked_dav_helper);
41 
42  parent::setUp();
43  }
44 
49  {
51  // Dummy implementation
52  public function getChildCollectionType()
53  {
54  return null;
55  }
56  };
57  }
58 
64  {
65  // Arrange
66  $number_of_children = 5;
67  $number_of_davable_children = $number_of_children;
68 
69  $children_ref_ids = array();
70  for ($i = 101; $i < $number_of_children + 101; $i++) {
71  $children_ref_ids[] = $i;
72  $children_titles[] = "abc" . $i;
73  }
74 
75  $this->mocked_repo_helper->shouldReceive('getChildrenOfRefId')->andReturn($children_ref_ids);
76  $this->mocked_dav_helper->shouldReceive('isDAVableObject')->andReturn(true);
77  $this->mocked_repo_helper->shouldReceive('checkAccess')->andReturn(true);
78  $this->mocked_repo_helper->shouldReceive('getObjectTitleFromRefId')->andReturnValues($children_titles);
79  $this->mocked_dav_helper->shouldReceive('createDAVObjectForRefId')->andReturn(new ilObjDummyDAV());
80 
81  // Act
82  $dav_children = $this->container_dav->getChildren();
83 
84  // Assert
85  $this->assertTrue(count($dav_children) == $number_of_children);
86  }
87 
97  {
98  // Arrange
99  $number_of_children = 5;
100  $number_of_davable_children = 0;
101 
102  $children_ref_ids = array();
103  $children_titles = array();
104  for ($i = 101; $i < $number_of_children + 101; $i++) {
105  $children_ref_ids[] = $i;
106  $children_titles[] = "abc" . $i;
107  }
108 
109  $this->mocked_repo_helper->shouldReceive('getChildrenOfRefId')->andReturn($children_ref_ids);
110  $this->mocked_dav_helper->shouldReceive('isDAVableObject')->andReturn(false);
111  $this->mocked_repo_helper->shouldReceive('getObjectTitleFromRefId')->andReturnValues($children_titles);
112  $this->mocked_repo_helper->shouldReceive('getObjectTypeFromRefId')->andReturnValues($children_ref_ids);
113  $this->mocked_dav_helper->shouldReceive('isDAVableObjType')->andReturn(false);
114 
115  // Act
116  $dav_children = $this->container_dav->getChildren();
117 
118  // Assert
119  $this->assertTrue(count($dav_children) == $number_of_davable_children);
120  }
121 
127  {
128  // Arrange
129  $number_of_children = 5;
130  $number_of_davable_children = 0;
131 
132  $children_ref_ids = array();
133  $children_titles = array();
134  for ($i = 101; $i < $number_of_children + 101; $i++) {
135  $children_ref_ids[] = $i;
136  $children_titles[] = "abc" . $i;
137  }
138 
139  $this->mocked_repo_helper->shouldReceive('getChildrenOfRefId')->andReturn($children_ref_ids);
140  $this->mocked_dav_helper->shouldReceive('isDAVableObject')->andReturn(true);
141  $this->mocked_repo_helper->shouldReceive('getObjectTitleFromRefId')->andReturnValues($children_titles);
142  $this->mocked_repo_helper->shouldReceive('checkAccess')->andReturnUsing(function ($permission, $ref) {
143  if ($permission == 'visible' || $permission == 'read') {
144  return false; // No Visible and no read
145  } else {
146  throw new UnexpectedValueException($permission . ' was not expected as argument in this test case');
147  }
148  });
149 
150  // Act
151  $dav_children = $this->container_dav->getChildren();
152 
153  // Assert
154  $this->assertTrue(count($dav_children) == $number_of_davable_children);
155  }
156 
162  {
163  // Arrange
164  $number_of_children = 5;
165  $number_of_davable_children = 0;
166 
167  $children_ref_ids = array();
168  $children_titles = array();
169  for ($i = 101; $i < $number_of_children + 101; $i++) {
170  $children_ref_ids[] = $i;
171  $children_titles[] = "abc" . $i;
172  }
173 
174  $this->mocked_repo_helper->shouldReceive('getChildrenOfRefId')->andReturn($children_ref_ids);
175  $this->mocked_dav_helper->shouldReceive('isDAVableObject')->andReturn(true);
176  $this->mocked_repo_helper->shouldReceive('getObjectTitleFromRefId')->andReturnValues($children_titles);
177  $this->mocked_repo_helper->shouldReceive('checkAccess')->andReturnUsing(function ($permission, $ref) {
178  if ($permission == 'visible') {
179  return true; // With visible
180  } elseif ($permission == 'read') {
181  return false; // No Read
182  } else {
183  throw new UnexpectedValueException($permission . ' was not expected as argument in this test case');
184  }
185  });
186 
187  // Act
188  $dav_children = $this->container_dav->getChildren();
189 
190  // Assert
191  $this->assertTrue(count($dav_children) == $number_of_davable_children);
192  }
193 
199  {
200  // Arrange
201  $number_of_children = 5;
202  $number_of_davable_children = 0;
203 
204  $children_ref_ids = array();
205  $children_titles = array();
206  for ($i = 101; $i < $number_of_children + 101; $i++) {
207  $children_ref_ids[] = $i;
208  $children_titles[] = "abc" . $i;
209  }
210 
211  $this->mocked_repo_helper->shouldReceive('getChildrenOfRefId')->andReturn($children_ref_ids);
212  $this->mocked_dav_helper->shouldReceive('isDAVableObject')->andReturn(true);
213  $this->mocked_repo_helper->shouldReceive('getObjectTitleFromRefId')->andReturnValues($children_titles);
214  $this->mocked_repo_helper->shouldReceive('checkAccess')->andReturnUsing(function ($permission, $ref) {
215  if ($permission == 'visible') {
216  return false; // No Visible
217  } elseif ($permission == 'read') {
218  return true; // With Read
219  } else {
220  throw new UnexpectedValueException($permission . ' was not expected as argument in this test case');
221  }
222  });
223 
224  // Act
225  $dav_children = $this->container_dav->getChildren();
226 
227  // Assert
228  $this->assertTrue(count($dav_children) == $number_of_davable_children);
229  }
230 
236  {
237  // Arrange
238  $number_of_children = 5;
239  $number_of_davable_children = 3;
240 
241  $children_ref_ids = array();
242  $children_titles = array();
243  for ($i = 101; $i < $number_of_children + 101; $i++) {
244  $children_ref_ids[] = $i;
245  $children_titles[] = "abc" . $i;
246  }
247 
248  $this->mocked_repo_helper->shouldReceive('getChildrenOfRefId')->andReturn($children_ref_ids);
249  $this->mocked_dav_helper->shouldReceive('isDAVableObject')->andReturn(true, true, true, false, false);
250  $this->mocked_repo_helper->shouldReceive('getObjectTitleFromRefId')->andReturnValues($children_titles);
251  $this->mocked_repo_helper->shouldReceive('checkAccess')->andReturn(true);
252  $this->mocked_repo_helper->shouldReceive('getObjectTypeFromRefId')->andReturn(false);
253  $this->mocked_dav_helper->shouldReceive('isDAVableObjType')->andReturn(false);
254  $this->mocked_dav_helper->shouldReceive('createDAVObjectForRefId')->andReturn(new ilObjDummyDAV());
255 
256  // Act
257  $dav_children = $this->container_dav->getChildren();
258 
259  // Assert
260  $this->mocked_dav_helper->shouldHaveReceived('isDAVableObject')->times(5);
261  $this->mocked_repo_helper->shouldHaveReceived('checkAccess')->times(6);
262  $this->assertTrue(count($dav_children) == $number_of_davable_children);
263  }
264 
270  {
271  // Arrange
272  $number_of_children = 5;
273 
274  $children_ref_ids = array();
275  $children_titles = array();
276  for ($i = 101; $i < $number_of_children + 101; $i++) {
277  $children_ref_ids[] = $i;
278  $children_titles[] = "abc" . $i;
279  }
280 
281  $this->mocked_repo_helper->shouldReceive('getChildrenOfRefId')->andReturn($children_ref_ids);
282  $this->mocked_dav_helper->shouldReceive('isDAVableObject')->andReturn(false);
283 
284  // Act
285  $child_exists = $this->container_dav->childExists('dummy');
286 
287  // Assert
288  $this->assertTrue(!$child_exists);
289  }
290 
296  {
297  // Arrange
298  $number_of_children = 5;
299  $searched_title = 'dummy';
300 
301  $children_ref_ids = array();
302  for ($i = 101; $i < $number_of_children + 101; $i++) {
303  $children_ref_ids[] = $i;
304  }
305 
306  $this->mocked_repo_helper->shouldReceive('getChildrenOfRefId')->andReturn($children_ref_ids);
307  $this->mocked_dav_helper->shouldReceive('isDAVableObject')->andReturn(true);
308  $this->mocked_repo_helper->shouldReceive('getObjectTitleFromRefId')->andReturn('t1', 't2', $searched_title, 't4', 't5');
309  $this->mocked_repo_helper->shouldReceive('checkAccess')->andReturnUsing(function ($permission, $ref) {
310  if ($permission == 'visible' || $permission == 'read') {
311  return false; // No Visible
312  } else {
313  throw new UnexpectedValueException($permission . ' was not expected as argument in this test case');
314  }
315  });
316 
317  // Act
318  $child_exists = $this->container_dav->childExists($searched_title);
319 
320  // Assert
321  $this->mocked_repo_helper->shouldHaveReceived('checkAccess')->once();
322  $this->assertTrue(!$child_exists);
323  }
324 
330  {
331  // Arrange
332  $number_of_children = 5;
333  $searched_title = 'dummy';
334 
335  $children_ref_ids = array();
336  for ($i = 101; $i < $number_of_children + 101; $i++) {
337  $children_ref_ids[] = $i;
338  }
339 
340  $this->mocked_repo_helper->shouldReceive('getChildrenOfRefId')->andReturn($children_ref_ids);
341  $this->mocked_dav_helper->shouldReceive('isDAVableObject')->andReturn(true);
342  $this->mocked_repo_helper->shouldReceive('getObjectTitleFromRefId')->andReturn('t1', 't2', $searched_title, 't4', 't5');
343  $this->mocked_repo_helper->shouldReceive('checkAccess')->andReturnUsing(function ($permission, $ref) {
344  if ($permission == 'visible') {
345  return true; // With Visible
346  } elseif ($permission == 'read') {
347  return false; // No Read
348  } else {
349  throw new UnexpectedValueException($permission . ' was not expected as argument in this test case');
350  }
351  });
352 
353  // Act
354  $child_exists = $this->container_dav->childExists($searched_title);
355 
356  // Assert
357  $this->mocked_repo_helper->shouldHaveReceived('checkAccess')->twice();
358  $this->assertTrue(!$child_exists);
359  }
360 
366  {
367  // Arrange
368  $number_of_children = 5;
369  $searched_title = 'dummy';
370 
371  $children_ref_ids = array();
372  for ($i = 101; $i < $number_of_children + 101; $i++) {
373  $children_ref_ids[] = $i;
374  }
375 
376  $this->mocked_repo_helper->shouldReceive('getChildrenOfRefId')->andReturn($children_ref_ids);
377  $this->mocked_dav_helper->shouldReceive('isDAVableObject')->andReturn(true);
378  $this->mocked_repo_helper->shouldReceive('getObjectTitleFromRefId')->andReturn('t1', 't2', $searched_title, 't4', 't5');
379  $this->mocked_repo_helper->shouldReceive('checkAccess')->andReturnUsing(function ($permission, $ref) {
380  if ($permission == 'visible') {
381  return false; // No Visible
382  } elseif ($permission == 'read') {
383  return true; // With Read
384  } else {
385  throw new UnexpectedValueException($permission . ' was not expected as argument in this test case');
386  }
387  });
388 
389  // Act
390  $child_exists = $this->container_dav->childExists($searched_title);
391 
392  // Assert
393  $this->mocked_repo_helper->shouldHaveReceived('checkAccess')->once();
394  $this->assertTrue(!$child_exists);
395  }
396 
402  {
403  // Arrange
404  $number_of_children = 5;
405  $searched_title = 'dummy';
406 
407  $children_ref_ids = array();
408  for ($i = 101; $i < $number_of_children + 101; $i++) {
409  $children_ref_ids[] = $i;
410  }
411 
412  $this->mocked_repo_helper->shouldReceive('getChildrenOfRefId')->andReturn($children_ref_ids);
413  $this->mocked_dav_helper->shouldReceive('isDAVableObject')->andReturn(true);
414  $this->mocked_repo_helper->shouldReceive('getObjectTitleFromRefId')->andReturn('1', '2', $searched_title, '4', '5');
415  $this->mocked_repo_helper->shouldReceive('checkAccess')->andReturn(true);
416 
417  // Act
418  $child_exists = $this->container_dav->childExists($searched_title);
419 
420  // Assert
421  $this->assertTrue($child_exists
422  && $this->mocked_repo_helper->shouldHaveReceived('checkAccess')->twice());
423  }
424 
430  {
431  // Arrange
432  $number_of_children = 5;
433  $searched_title = 'dummy';
434  $dummy_obj_dav = new ilObjDummyDAV();
435 
436  $children_ref_ids = array();
437  for ($i = 101; $i < $number_of_children + 101; $i++) {
438  $children_ref_ids[] = $i;
439  }
440 
441  $this->mocked_repo_helper->shouldReceive('getChildrenOfRefId')->andReturn($children_ref_ids);
442  $this->mocked_dav_helper->shouldReceive('isDAVableObject')->andReturn(true);
443  $this->mocked_repo_helper->shouldReceive('getObjectTitleFromRefId')->andReturn('1', '2', $searched_title, '4', '5');
444  $this->mocked_repo_helper->shouldReceive('checkAccess')->andReturn(true);
445  $this->mocked_dav_helper->shouldReceive('createDAVObjectForRefId')->andReturn($dummy_obj_dav);
446 
447  // Act
448  $returned_child = $this->container_dav->getChild($searched_title);
449 
450  // Assert
451  $this->mocked_repo_helper->shouldHaveReceived('checkAccess')->twice();
452  $this->assertTrue($returned_child === $dummy_obj_dav);
453  }
454 
460  {
461  // Arrange
462  $number_of_children = 5;
463  $searched_title = 'dummy';
464  $exception_thrown = false;
465 
466  $children_ref_ids = array();
467  for ($i = 101; $i < $number_of_children + 101; $i++) {
468  $children_ref_ids[] = $i;
469  }
470 
471  $this->mocked_repo_helper->shouldReceive('getChildrenOfRefId')->andReturn($children_ref_ids);
472  $this->mocked_dav_helper->shouldReceive('isDAVableObject')->andReturn(false);
473 
474  // Act
475  try {
476  $this->container_dav->getChild($searched_title);
477  } catch (\Sabre\DAV\Exception\NotFound $e) {
478  $exception_thrown = true;
479  }
480 
481  // Assert
482  $this->assertTrue($exception_thrown);
483  }
484 
490  {
491  // Arrange
492  $number_of_children = 5;
493  $searched_title = 'dummy';
494 
495  $children_ref_ids = array();
496  for ($i = 101; $i < $number_of_children + 101; $i++) {
497  $children_ref_ids[] = $i;
498  }
499 
500  $this->mocked_repo_helper->shouldReceive('getChildrenOfRefId')->andReturn($children_ref_ids);
501  $this->mocked_dav_helper->shouldReceive('isDAVableObject')->andReturn(true);
502  $this->mocked_repo_helper->shouldReceive('getObjectTitleFromRefId')->andReturn('1', '2', '3', '4', '5');
503 
504  // Act
505  try {
506  $this->container_dav->getChild($searched_title);
507  } catch (\Sabre\DAV\Exception\NotFound $e) {
508  $exception_thrown = true;
509  }
510 
511  // Assert
512  $this->assertTrue($exception_thrown);
513  }
514 
520  {
521  // Arrange
522  $file_title = 'some_file.txt';
523 
524  $this->mocked_repo_helper->shouldReceive('checkCreateAccessForType')->andReturn(false);
525 
526  // Act
527  try {
528  $this->container_dav->createFile($file_title);
529  } catch (\Sabre\DAV\Exception\Forbidden $e) {
530  if ($e->getMessage() == 'No write access') {
531  $exception_thrown = true;
532  }
533  }
534 
535  // Assert
536  $this->assertTrue($exception_thrown);
537  }
538 
544  {
545  // Arrange
546  $file_title = 'some_file.exe';
547  $exception_thrown = false;
548 
549  $this->mocked_repo_helper->shouldReceive('checkCreateAccessForType')->andReturn(true);
550  $this->mocked_dav_helper->shouldReceive('isValidFileNameWithValidFileExtension')->andReturn(false);
551 
552  // Act
553  try {
554  $this->container_dav->createFile($file_title);
555  } catch (\Sabre\DAV\Exception\Forbidden $e) {
556  if ($e->getMessage() == 'Invalid file name or file extension') {
557  $exception_thrown = true;
558  }
559  }
560 
561  // Assert
562  $this->assertTrue($exception_thrown);
563  }
564 }
GetChildren_NoVisibleNoReadPermissionToObjects_ReturnEmptyArray()
GetChildren_NoVisibleWithReadPermissionToObjects_ReturnEmptyArray()
GetChildren_NoDavableObjects_ReturnEmptyArray()
Important parameters: isDAVableObject = true checkAccess = false -> we test the behavior for no acces...
ChildExists_ChildExistsButUserHasNoVisibleAndNoReadPermission_returnFalse()
GetChildren_WithVisibleNoReadPermissionToObjects_ReturnEmptyArray()
GetChildren_MixedWithNonDavableObjects_ReturnOnlyDavableObjects()
ChildExists_ChildExistsButUserHasOnlyVisiblePermission_returnFalse()
This is just a dummy class for unit testing.
Class ilObjContainerDAV.
setUpContainerDAV($mocked_obj, $mocked_repo_helper, $mocked_dav_helper)
Setup instance for ilObjectDAV.
ChildExists_ChildExistsButUserHasOnlyReadPermission_returnFalse()
$i
Definition: metadata.php:24