Completed
Push — stable8 ( 420dab...a42074 )
by
unknown
10:01
created

Manager   F

Complexity

Total Complexity 69

Size/Duplication

Total Lines 858
Duplicated Lines 43.59 %

Coupling/Cohesion

Components 0
Dependencies 4

Importance

Changes 0
Metric Value
dl 374
loc 858
rs 2.2641
c 0
b 0
f 0
wmc 69
lcom 0
cbo 4

24 Methods

Rating   Name   Duplication   Size   Complexity  
A testGet() 0 21 1
A testGetNoBackend() 0 9 1
A testGetNotExists() 19 19 1
A testGetDeleted() 0 15 1
B testGetMultipleBackends() 0 31 1
B testCreate() 0 31 1
A testCreateExists() 0 22 1
B testSearch() 0 26 1
B testSearchMultipleBackends() 0 40 1
B testSearchMultipleBackendsLimitAndOffset() 0 40 1
B testGetUserGroups() 0 27 1
A testInGroup() 23 23 1
A testIsAdmin() 23 23 1
A testNotAdmin() 23 23 1
B testGetUserGroupsMultipleBackends() 0 41 1
C testDisplayNamesInGroupWithOneUserBackend() 0 63 11
C testDisplayNamesInGroupWithOneUserBackendWithLimitSpecified() 66 66 13
C testDisplayNamesInGroupWithOneUserBackendWithLimitAndOffsetSpecified() 69 69 12
B testDisplayNamesInGroupWithOneUserBackendAndSearchEmpty() 44 44 5
B testDisplayNamesInGroupWithOneUserBackendAndSearchEmptyAndLimitSpecified() 43 43 5
B testDisplayNamesInGroupWithOneUserBackendAndSearchEmptyAndLimitAndOffsetSpecified() 44 44 5
B testGetUserGroupsWithAddUser() 0 43 1
A testGetUserGroupsWithRemoveUser() 0 49 1
A testGetUserIdGroups() 20 20 1

How to fix   Duplicated Code    Complexity   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

Complex Class

 Tip:   Before tackling complexity, make sure that you eliminate any duplication first. This often can reduce the size of classes significantly.

Complex classes like Manager often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

While breaking up the class, it is a good idea to analyze how other classes use Manager, and based on these observations, apply Extract Interface, too.

1
<?php
2
3
/**
4
 * Copyright (c) 2013 Robin Appelman <[email protected]>
5
 * This file is licensed under the Affero General Public License version 3 or
6
 * later.
7
 * See the COPYING-README file.
8
 */
9
10
namespace Test\Group;
11
12
use OC\User\User;
13
14
class Manager extends \Test\TestCase {
15
	public function testGet() {
16
		/**
17
		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend
18
		 */
19
		$backend = $this->getMock('\OC_Group_Database');
20
		$backend->expects($this->any())
21
			->method('groupExists')
22
			->with('group1')
23
			->will($this->returnValue(true));
24
25
		/**
26
		 * @var \OC\User\Manager $userManager
27
		 */
28
		$userManager = $this->getMock('\OC\User\Manager');
29
		$manager = new \OC\Group\Manager($userManager);
30
		$manager->addBackend($backend);
31
32
		$group = $manager->get('group1');
33
		$this->assertNotNull($group);
34
		$this->assertEquals('group1', $group->getGID());
35
	}
36
37
	public function testGetNoBackend() {
38
		/**
39
		 * @var \OC\User\Manager $userManager
40
		 */
41
		$userManager = $this->getMock('\OC\User\Manager');
42
		$manager = new \OC\Group\Manager($userManager);
43
44
		$this->assertNull($manager->get('group1'));
45
	}
46
47 View Code Duplication
	public function testGetNotExists() {
48
		/**
49
		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend
50
		 */
51
		$backend = $this->getMock('\OC_Group_Database');
52
		$backend->expects($this->once())
53
			->method('groupExists')
54
			->with('group1')
55
			->will($this->returnValue(false));
56
57
		/**
58
		 * @var \OC\User\Manager $userManager
59
		 */
60
		$userManager = $this->getMock('\OC\User\Manager');
61
		$manager = new \OC\Group\Manager($userManager);
62
		$manager->addBackend($backend);
63
64
		$this->assertNull($manager->get('group1'));
65
	}
66
67
	public function testGetDeleted() {
68
		$backend = new \OC_Group_Dummy();
69
		$backend->createGroup('group1');
70
71
		/**
72
		 * @var \OC\User\Manager $userManager
73
		 */
74
		$userManager = $this->getMock('\OC\User\Manager');
75
		$manager = new \OC\Group\Manager($userManager);
76
		$manager->addBackend($backend);
77
78
		$group = $manager->get('group1');
79
		$group->delete();
80
		$this->assertNull($manager->get('group1'));
81
	}
82
83
	public function testGetMultipleBackends() {
84
		/**
85
		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend1
86
		 */
87
		$backend1 = $this->getMock('\OC_Group_Database');
88
		$backend1->expects($this->any())
89
			->method('groupExists')
90
			->with('group1')
91
			->will($this->returnValue(false));
92
93
		/**
94
		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend2
95
		 */
96
		$backend2 = $this->getMock('\OC_Group_Database');
97
		$backend2->expects($this->any())
98
			->method('groupExists')
99
			->with('group1')
100
			->will($this->returnValue(true));
101
102
		/**
103
		 * @var \OC\User\Manager $userManager
104
		 */
105
		$userManager = $this->getMock('\OC\User\Manager');
106
		$manager = new \OC\Group\Manager($userManager);
107
		$manager->addBackend($backend1);
108
		$manager->addBackend($backend2);
109
110
		$group = $manager->get('group1');
111
		$this->assertNotNull($group);
112
		$this->assertEquals('group1', $group->getGID());
113
	}
114
115
	public function testCreate() {
116
		/**
117
		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend
118
		 */
119
		$backendGroupCreated = false;
120
		$backend = $this->getMock('\OC_Group_Database');
121
		$backend->expects($this->any())
122
			->method('groupExists')
123
			->with('group1')
124
			->will($this->returnCallback(function () use (&$backendGroupCreated) {
125
				return $backendGroupCreated;
126
			}));
127
		$backend->expects($this->once())
128
			->method('implementsActions')
129
			->will($this->returnValue(true));
130
		$backend->expects($this->once())
131
			->method('createGroup')
132
			->will($this->returnCallback(function () use (&$backendGroupCreated) {
133
				$backendGroupCreated = true;
134
			}));;
135
136
		/**
137
		 * @var \OC\User\Manager $userManager
138
		 */
139
		$userManager = $this->getMock('\OC\User\Manager');
140
		$manager = new \OC\Group\Manager($userManager);
141
		$manager->addBackend($backend);
142
143
		$group = $manager->createGroup('group1');
144
		$this->assertEquals('group1', $group->getGID());
145
	}
146
147
	public function testCreateExists() {
148
		/**
149
		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend
150
		 */
151
		$backend = $this->getMock('\OC_Group_Database');
152
		$backend->expects($this->any())
153
			->method('groupExists')
154
			->with('group1')
155
			->will($this->returnValue(true));
156
		$backend->expects($this->never())
157
			->method('createGroup');
158
159
		/**
160
		 * @var \OC\User\Manager $userManager
161
		 */
162
		$userManager = $this->getMock('\OC\User\Manager');
163
		$manager = new \OC\Group\Manager($userManager);
164
		$manager->addBackend($backend);
165
166
		$group = $manager->createGroup('group1');
167
		$this->assertEquals('group1', $group->getGID());
168
	}
169
170
	public function testSearch() {
171
		/**
172
		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend
173
		 */
174
		$backend = $this->getMock('\OC_Group_Database');
175
		$backend->expects($this->once())
176
			->method('getGroups')
177
			->with('1')
178
			->will($this->returnValue(array('group1')));
179
		$backend->expects($this->once())
180
			->method('groupExists')
181
			->with('group1')
182
			->will($this->returnValue(true));
183
184
		/**
185
		 * @var \OC\User\Manager $userManager
186
		 */
187
		$userManager = $this->getMock('\OC\User\Manager');
188
		$manager = new \OC\Group\Manager($userManager);
189
		$manager->addBackend($backend);
190
191
		$groups = $manager->search('1');
192
		$this->assertEquals(1, count($groups));
193
		$group1 = reset($groups);
194
		$this->assertEquals('group1', $group1->getGID());
195
	}
196
197
	public function testSearchMultipleBackends() {
198
		/**
199
		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend1
200
		 */
201
		$backend1 = $this->getMock('\OC_Group_Database');
202
		$backend1->expects($this->once())
203
			->method('getGroups')
204
			->with('1')
205
			->will($this->returnValue(array('group1')));
206
		$backend1->expects($this->any())
207
			->method('groupExists')
208
			->will($this->returnValue(true));
209
210
		/**
211
		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend2
212
		 */
213
		$backend2 = $this->getMock('\OC_Group_Database');
214
		$backend2->expects($this->once())
215
			->method('getGroups')
216
			->with('1')
217
			->will($this->returnValue(array('group12', 'group1')));
218
		$backend2->expects($this->any())
219
			->method('groupExists')
220
			->will($this->returnValue(true));
221
222
		/**
223
		 * @var \OC\User\Manager $userManager
224
		 */
225
		$userManager = $this->getMock('\OC\User\Manager');
226
		$manager = new \OC\Group\Manager($userManager);
227
		$manager->addBackend($backend1);
228
		$manager->addBackend($backend2);
229
230
		$groups = $manager->search('1');
231
		$this->assertEquals(2, count($groups));
232
		$group1 = reset($groups);
233
		$group12 = next($groups);
234
		$this->assertEquals('group1', $group1->getGID());
235
		$this->assertEquals('group12', $group12->getGID());
236
	}
237
238
	public function testSearchMultipleBackendsLimitAndOffset() {
239
		/**
240
		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend1
241
		 */
242
		$backend1 = $this->getMock('\OC_Group_Database');
243
		$backend1->expects($this->once())
244
			->method('getGroups')
245
			->with('1', 2, 1)
246
			->will($this->returnValue(array('group1')));
247
		$backend1->expects($this->any())
248
			->method('groupExists')
249
			->will($this->returnValue(true));
250
251
		/**
252
		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend2
253
		 */
254
		$backend2 = $this->getMock('\OC_Group_Database');
255
		$backend2->expects($this->once())
256
			->method('getGroups')
257
			->with('1', 2, 1)
258
			->will($this->returnValue(array('group12')));
259
		$backend2->expects($this->any())
260
			->method('groupExists')
261
			->will($this->returnValue(true));
262
263
		/**
264
		 * @var \OC\User\Manager $userManager
265
		 */
266
		$userManager = $this->getMock('\OC\User\Manager');
267
		$manager = new \OC\Group\Manager($userManager);
268
		$manager->addBackend($backend1);
269
		$manager->addBackend($backend2);
270
271
		$groups = $manager->search('1', 2, 1);
272
		$this->assertEquals(2, count($groups));
273
		$group1 = reset($groups);
274
		$group12 = next($groups);
275
		$this->assertEquals('group1', $group1->getGID());
276
		$this->assertEquals('group12', $group12->getGID());
277
	}
278
279
	public function testGetUserGroups() {
280
		/**
281
		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend
282
		 */
283
		$backend = $this->getMock('\OC_Group_Database');
284
		$backend->expects($this->once())
285
			->method('getUserGroups')
286
			->with('user1')
287
			->will($this->returnValue(array('group1')));
288
		$backend->expects($this->any())
289
			->method('groupExists')
290
			->with('group1')
291
			->will($this->returnValue(true));
292
293
		/**
294
		 * @var \OC\User\Manager $userManager
295
		 */
296
		$userManager = $this->getMock('\OC\User\Manager');
297
		$userBackend = $this->getMock('\OC_User_Backend');
298
		$manager = new \OC\Group\Manager($userManager);
299
		$manager->addBackend($backend);
300
301
		$groups = $manager->getUserGroups(new User('user1', $userBackend));
302
		$this->assertEquals(1, count($groups));
303
		$group1 = reset($groups);
304
		$this->assertEquals('group1', $group1->getGID());
305
	}
306
307 View Code Duplication
	public function testInGroup() {
308
		/**
309
		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend
310
		 */
311
		$backend = $this->getMock('\OC_Group_Database');
312
		$backend->expects($this->once())
313
			->method('getUserGroups')
314
			->with('user1')
315
			->will($this->returnValue(array('group1', 'admin', 'group2')));
316
		$backend->expects($this->any())
317
			->method('groupExists')
318
			->will($this->returnValue(true));
319
320
		/**
321
		 * @var \OC\User\Manager $userManager
322
		 */
323
		$userManager = $this->getMock('\OC\User\Manager');
324
		$userBackend = $this->getMock('\OC_User_Backend');
0 ignored issues
show
Unused Code introduced by
$userBackend is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
325
		$manager = new \OC\Group\Manager($userManager);
326
		$manager->addBackend($backend);
327
328
		$this->assertTrue($manager->isInGroup('user1', 'group1'));
0 ignored issues
show
Documentation introduced by
'group1' is of type string, but the function expects a object<OC\Group\Group>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
329
	}
330
331 View Code Duplication
	public function testIsAdmin() {
332
		/**
333
		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend
334
		 */
335
		$backend = $this->getMock('\OC_Group_Database');
336
		$backend->expects($this->once())
337
			->method('getUserGroups')
338
			->with('user1')
339
			->will($this->returnValue(array('group1', 'admin', 'group2')));
340
		$backend->expects($this->any())
341
			->method('groupExists')
342
			->will($this->returnValue(true));
343
344
		/**
345
		 * @var \OC\User\Manager $userManager
346
		 */
347
		$userManager = $this->getMock('\OC\User\Manager');
348
		$userBackend = $this->getMock('\OC_User_Backend');
0 ignored issues
show
Unused Code introduced by
$userBackend is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
349
		$manager = new \OC\Group\Manager($userManager);
350
		$manager->addBackend($backend);
351
352
		$this->assertTrue($manager->isAdmin('user1'));
353
	}
354
355 View Code Duplication
	public function testNotAdmin() {
356
		/**
357
		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend
358
		 */
359
		$backend = $this->getMock('\OC_Group_Database');
360
		$backend->expects($this->once())
361
			->method('getUserGroups')
362
			->with('user1')
363
			->will($this->returnValue(array('group1', 'group2')));
364
		$backend->expects($this->any())
365
			->method('groupExists')
366
			->will($this->returnValue(true));
367
368
		/**
369
		 * @var \OC\User\Manager $userManager
370
		 */
371
		$userManager = $this->getMock('\OC\User\Manager');
372
		$userBackend = $this->getMock('\OC_User_Backend');
0 ignored issues
show
Unused Code introduced by
$userBackend is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
373
		$manager = new \OC\Group\Manager($userManager);
374
		$manager->addBackend($backend);
375
376
		$this->assertFalse($manager->isAdmin('user1'));
377
	}
378
379
	public function testGetUserGroupsMultipleBackends() {
380
		/**
381
		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend1
382
		 */
383
		$backend1 = $this->getMock('\OC_Group_Database');
384
		$backend1->expects($this->once())
385
			->method('getUserGroups')
386
			->with('user1')
387
			->will($this->returnValue(array('group1')));
388
		$backend1->expects($this->any())
389
			->method('groupExists')
390
			->will($this->returnValue(true));
391
392
		/**
393
		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend2
394
		 */
395
		$backend2 = $this->getMock('\OC_Group_Database');
396
		$backend2->expects($this->once())
397
			->method('getUserGroups')
398
			->with('user1')
399
			->will($this->returnValue(array('group1', 'group2')));
400
		$backend1->expects($this->any())
401
			->method('groupExists')
402
			->will($this->returnValue(true));
403
404
		/**
405
		 * @var \OC\User\Manager $userManager
406
		 */
407
		$userManager = $this->getMock('\OC\User\Manager');
408
		$userBackend = $this->getMock('\OC_User_Backend');
409
		$manager = new \OC\Group\Manager($userManager);
410
		$manager->addBackend($backend1);
411
		$manager->addBackend($backend2);
412
413
		$groups = $manager->getUserGroups(new User('user1', $userBackend));
414
		$this->assertEquals(2, count($groups));
415
		$group1 = reset($groups);
416
		$group2 = next($groups);
417
		$this->assertEquals('group1', $group1->getGID());
418
		$this->assertEquals('group2', $group2->getGID());
419
	}
420
421
        public function testDisplayNamesInGroupWithOneUserBackend() {
422
		/**
423
		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend1
424
		 */
425
		$backend = $this->getMock('\OC_Group_Database');
426
		$backend->expects($this->exactly(1))
427
			->method('groupExists')
428
			->with('testgroup')
429
			->will($this->returnValue(true));
430
431
                $backend->expects($this->any())
432
			->method('InGroup')
433
			->will($this->returnCallback(function($uid, $gid) {
0 ignored issues
show
Unused Code introduced by
The parameter $gid is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
434
                                switch($uid) {
435
                                        case 'user1' : return false;
436
                                        case 'user2' : return true;
437
                                        case 'user3' : return false;
438
                                        case 'user33': return true;
439
                                        default:
440
                                                return null;
441
                                }
442
                        }));
443
444
		/**
445
		 * @var \OC\User\Manager $userManager
446
		 */
447
		$userManager = $this->getMock('\OC\User\Manager');
448
		$userBackend = $this->getMock('\OC_User_Backend');
449
450
		$userManager->expects($this->any())
451
			->method('search')
452
			->with('user3')
453
			->will($this->returnCallback(function($search, $limit, $offset) use ($userBackend) {
454
                                switch($offset) {
455
                                        case 0 : return array('user3' => new User('user3', $userBackend),
456
                                                        'user33' => new User('user33', $userBackend));
457
                                        case 2 : return array();
458
                                }
459
                        }));
460
461
		$userManager->expects($this->any())
462
			->method('get')
463
			->will($this->returnCallback(function($uid) use ($userBackend) {
464
				switch($uid) {
465
					case 'user1' : return new User('user1', $userBackend);
466
					case 'user2' : return new User('user2', $userBackend);
467
					case 'user3' : return new User('user3', $userBackend);
468
					case 'user33': return new User('user33', $userBackend);
469
					default:
470
						return null;
471
				}
472
			}));
473
474
		$manager = new \OC\Group\Manager($userManager);
475
		$manager->addBackend($backend);
476
477
		$users = $manager->displayNamesInGroup('testgroup', 'user3');
478
		$this->assertEquals(1, count($users));
479
		$this->assertFalse(isset($users['user1']));
480
		$this->assertFalse(isset($users['user2']));
481
		$this->assertFalse(isset($users['user3']));
482
		$this->assertTrue(isset($users['user33']));
483
	}
484
485 View Code Duplication
        public function testDisplayNamesInGroupWithOneUserBackendWithLimitSpecified() {
486
		/**
487
		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend1
488
		 */
489
		$backend = $this->getMock('\OC_Group_Database');
490
		$backend->expects($this->exactly(1))
491
			->method('groupExists')
492
			->with('testgroup')
493
			->will($this->returnValue(true));
494
495
                $backend->expects($this->any())
496
			->method('InGroup')
497
			->will($this->returnCallback(function($uid, $gid) {
0 ignored issues
show
Unused Code introduced by
The parameter $gid is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
498
                                switch($uid) {
499
                                        case 'user1' : return false;
500
                                        case 'user2' : return true;
501
                                        case 'user3' : return false;
502
                                        case 'user33': return true;
503
                                        case 'user333': return true;
504
                                        default:
505
                                                return null;
506
                                }
507
                        }));
508
509
		/**
510
		 * @var \OC\User\Manager $userManager
511
		 */
512
		$userManager = $this->getMock('\OC\User\Manager');
513
		$userBackend = $this->getMock('\OC_User_Backend');
514
515
		$userManager->expects($this->any())
516
			->method('search')
517
			->with('user3')
518
			->will($this->returnCallback(function($search, $limit, $offset) use ($userBackend) {
519
                                switch($offset) {
520
                                        case 0 : return array('user3' => new User('user3', $userBackend),
521
                                                        'user33' => new User('user33', $userBackend));
522
                                        case 2 : return array('user333' => new User('user333', $userBackend));
523
                                }
524
                        }));
525
526
		$userManager->expects($this->any())
527
			->method('get')
528
			->will($this->returnCallback(function($uid) use ($userBackend) {
529
				switch($uid) {
530
					case 'user1' : return new User('user1', $userBackend);
531
					case 'user2' : return new User('user2', $userBackend);
532
					case 'user3' : return new User('user3', $userBackend);
533
					case 'user33': return new User('user33', $userBackend);
534
					case 'user333': return new User('user333', $userBackend);
535
					default:
536
						return null;
537
				}
538
			}));
539
540
		$manager = new \OC\Group\Manager($userManager);
541
		$manager->addBackend($backend);
542
543
		$users = $manager->displayNamesInGroup('testgroup', 'user3', 1);
544
		$this->assertEquals(1, count($users));
545
		$this->assertFalse(isset($users['user1']));
546
		$this->assertFalse(isset($users['user2']));
547
		$this->assertFalse(isset($users['user3']));
548
		$this->assertTrue(isset($users['user33']));
549
		$this->assertFalse(isset($users['user333']));
550
	}
551
552 View Code Duplication
	public function testDisplayNamesInGroupWithOneUserBackendWithLimitAndOffsetSpecified() {
553
		/**
554
		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend1
555
		 */
556
		$backend = $this->getMock('\OC_Group_Database');
557
		$backend->expects($this->exactly(1))
558
			->method('groupExists')
559
			->with('testgroup')
560
			->will($this->returnValue(true));
561
562
        $backend->expects($this->any())
563
			->method('inGroup')
564
			->will($this->returnCallback(function($uid) {
565
                                switch($uid) {
566
                                        case 'user1' : return false;
567
                                        case 'user2' : return true;
568
                                        case 'user3' : return false;
569
                                        case 'user33': return true;
570
                                        case 'user333': return true;
571
                                        default:
572
                                                return null;
573
                                }
574
                        }));
575
576
		/**
577
		 * @var \OC\User\Manager $userManager
578
		 */
579
		$userManager = $this->getMock('\OC\User\Manager');
580
		$userBackend = $this->getMock('\OC_User_Backend');
581
582
		$userManager->expects($this->any())
583
			->method('search')
584
			->with('user3')
585
			->will($this->returnCallback(function($search, $limit, $offset) use ($userBackend) {
586
                                switch($offset) {
587
                                        case 0 :
588
											return array(
589
												'user3' => new User('user3', $userBackend),
590
                                                'user33' => new User('user33', $userBackend),
591
												'user333' => new User('user333', $userBackend)
592
											);
593
                                }
594
                        }));
595
596
		$userManager->expects($this->any())
597
			->method('get')
598
			->will($this->returnCallback(function($uid) use ($userBackend) {
599
				switch($uid) {
600
					case 'user1' : return new User('user1', $userBackend);
601
					case 'user2' : return new User('user2', $userBackend);
602
					case 'user3' : return new User('user3', $userBackend);
603
					case 'user33': return new User('user33', $userBackend);
604
					case 'user333': return new User('user333', $userBackend);
605
					default:
606
						return null;
607
				}
608
			}));
609
610
		$manager = new \OC\Group\Manager($userManager);
611
		$manager->addBackend($backend);
612
613
		$users = $manager->displayNamesInGroup('testgroup', 'user3', 1, 1);
614
		$this->assertEquals(1, count($users));
615
		$this->assertFalse(isset($users['user1']));
616
		$this->assertFalse(isset($users['user2']));
617
		$this->assertFalse(isset($users['user3']));
618
		$this->assertFalse(isset($users['user33']));
619
		$this->assertTrue(isset($users['user333']));
620
	}
621
622 View Code Duplication
	public function testDisplayNamesInGroupWithOneUserBackendAndSearchEmpty() {
623
		/**
624
		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend1
625
		 */
626
		$backend = $this->getMock('\OC_Group_Database');
627
		$backend->expects($this->exactly(1))
628
			->method('groupExists')
629
			->with('testgroup')
630
			->will($this->returnValue(true));
631
632
                $backend->expects($this->once())
633
			->method('usersInGroup')
634
			->with('testgroup', '', -1, 0)
635
			->will($this->returnValue(array('user2', 'user33')));
636
637
		/**
638
		 * @var \OC\User\Manager $userManager
639
		 */
640
		$userManager = $this->getMock('\OC\User\Manager');
641
		$userBackend = $this->getMock('\OC_User_Backend');
642
643
		$userManager->expects($this->any())
644
			->method('get')
645
			->will($this->returnCallback(function($uid) use ($userBackend) {
646
				switch($uid) {
647
					case 'user1' : return new User('user1', $userBackend);
648
					case 'user2' : return new User('user2', $userBackend);
649
					case 'user3' : return new User('user3', $userBackend);
650
					case 'user33': return new User('user33', $userBackend);
651
					default:
652
						return null;
653
				}
654
			}));
655
656
		$manager = new \OC\Group\Manager($userManager);
657
		$manager->addBackend($backend);
658
659
		$users = $manager->displayNamesInGroup('testgroup', '');
660
		$this->assertEquals(2, count($users));
661
		$this->assertFalse(isset($users['user1']));
662
		$this->assertTrue(isset($users['user2']));
663
		$this->assertFalse(isset($users['user3']));
664
		$this->assertTrue(isset($users['user33']));
665
	}
666
667 View Code Duplication
	public function testDisplayNamesInGroupWithOneUserBackendAndSearchEmptyAndLimitSpecified() {
668
		/**
669
		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend1
670
		 */
671
		$backend = $this->getMock('\OC_Group_Database');
672
		$backend->expects($this->exactly(1))
673
			->method('groupExists')
674
			->with('testgroup')
675
			->will($this->returnValue(true));
676
677
		$backend->expects($this->once())
678
			->method('usersInGroup')
679
			->with('testgroup', '', 1, 0)
680
			->will($this->returnValue(array('user2')));
681
		/**
682
		 * @var \OC\User\Manager $userManager
683
		 */
684
		$userManager = $this->getMock('\OC\User\Manager');
685
		$userBackend = $this->getMock('\OC_User_Backend');
686
687
		$userManager->expects($this->any())
688
			->method('get')
689
			->will($this->returnCallback(function($uid) use ($userBackend) {
690
				switch($uid) {
691
					case 'user1' : return new User('user1', $userBackend);
692
					case 'user2' : return new User('user2', $userBackend);
693
					case 'user3' : return new User('user3', $userBackend);
694
					case 'user33': return new User('user33', $userBackend);
695
					default:
696
						return null;
697
				}
698
			}));
699
700
		$manager = new \OC\Group\Manager($userManager);
701
		$manager->addBackend($backend);
702
703
		$users = $manager->displayNamesInGroup('testgroup', '', 1);
704
		$this->assertEquals(1, count($users));
705
		$this->assertFalse(isset($users['user1']));
706
		$this->assertTrue(isset($users['user2']));
707
		$this->assertFalse(isset($users['user3']));
708
		$this->assertFalse(isset($users['user33']));
709
	}
710
711 View Code Duplication
        public function testDisplayNamesInGroupWithOneUserBackendAndSearchEmptyAndLimitAndOffsetSpecified() {
712
		/**
713
		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend1
714
		 */
715
		$backend = $this->getMock('\OC_Group_Database');
716
		$backend->expects($this->exactly(1))
717
			->method('groupExists')
718
			->with('testgroup')
719
			->will($this->returnValue(true));
720
721
		$backend->expects($this->once())
722
			->method('usersInGroup')
723
			->with('testgroup', '', 1, 1)
724
			->will($this->returnValue(array('user33')));
725
726
		/**
727
		 * @var \OC\User\Manager $userManager
728
		 */
729
		$userManager = $this->getMock('\OC\User\Manager');
730
		$userBackend = $this->getMock('\OC_User_Backend');
731
732
		$userManager->expects($this->any())
733
			->method('get')
734
			->will($this->returnCallback(function($uid) use ($userBackend) {
735
				switch($uid) {
736
					case 'user1' : return new User('user1', $userBackend);
737
					case 'user2' : return new User('user2', $userBackend);
738
					case 'user3' : return new User('user3', $userBackend);
739
					case 'user33': return new User('user33', $userBackend);
740
					default:
741
						return null;
742
				}
743
			}));
744
745
		$manager = new \OC\Group\Manager($userManager);
746
		$manager->addBackend($backend);
747
748
		$users = $manager->displayNamesInGroup('testgroup', '', 1, 1);
749
		$this->assertEquals(1, count($users));
750
		$this->assertFalse(isset($users['user1']));
751
		$this->assertFalse(isset($users['user2']));
752
		$this->assertFalse(isset($users['user3']));
753
		$this->assertTrue(isset($users['user33']));
754
	}
755
756
	public function testGetUserGroupsWithAddUser() {
757
		/**
758
		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend
759
		 */
760
		$backend = $this->getMock('\OC_Group_Database');
761
		$expectedGroups = array();
762
		$backend->expects($this->any())
763
			->method('getUserGroups')
764
			->with('user1')
765
			->will($this->returnCallback(function () use (&$expectedGroups) {
766
				return $expectedGroups;
767
			}));
768
		$backend->expects($this->any())
769
			->method('groupExists')
770
			->with('group1')
771
			->will($this->returnValue(true));
772
		$backend->expects($this->once())
773
			->method('implementsActions')
774
			->will($this->returnValue(true));
775
776
		/**
777
		 * @var \OC\User\Manager $userManager
778
		 */
779
		$userManager = $this->getMock('\OC\User\Manager');
780
		$manager = new \OC\Group\Manager($userManager);
781
		$manager->addBackend($backend);
782
783
		// prime cache
784
		$user1 = new User('user1', null);
0 ignored issues
show
Documentation introduced by
null is of type null, but the function expects a object<OC_User_Interface>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
785
		$groups = $manager->getUserGroups($user1);
786
		$this->assertEquals(array(), $groups);
787
788
		// add user
789
		$group = $manager->get('group1');
790
		$group->addUser($user1);
791
		$expectedGroups = array('group1');
0 ignored issues
show
Unused Code introduced by
$expectedGroups is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
792
793
		// check result
794
		$groups = $manager->getUserGroups($user1);
795
		$this->assertEquals(1, count($groups));
796
		$group1 = reset($groups);
797
		$this->assertEquals('group1', $group1->getGID());
798
	}
799
800
	public function testGetUserGroupsWithRemoveUser() {
801
		/**
802
		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend
803
		 */
804
		$backend = $this->getMock('\OC_Group_Database');
805
		$expectedGroups = array('group1');
806
		$backend->expects($this->any())
807
			->method('getUserGroups')
808
			->with('user1')
809
			->will($this->returnCallback(function () use (&$expectedGroups) {
810
				return $expectedGroups;
811
			}));
812
		$backend->expects($this->any())
813
			->method('groupExists')
814
			->with('group1')
815
			->will($this->returnValue(true));
816
		$backend->expects($this->once())
817
			->method('implementsActions')
818
			->will($this->returnValue(true));
819
		$backend->expects($this->once())
820
			->method('inGroup')
821
			->will($this->returnValue(true));
822
		$backend->expects($this->once())
823
			->method('removeFromGroup')
824
			->will($this->returnValue(true));
825
826
		/**
827
		 * @var \OC\User\Manager $userManager
828
		 */
829
		$userManager = $this->getMock('\OC\User\Manager');
830
		$manager = new \OC\Group\Manager($userManager);
831
		$manager->addBackend($backend);
832
833
		// prime cache
834
		$user1 = new User('user1', null);
0 ignored issues
show
Documentation introduced by
null is of type null, but the function expects a object<OC_User_Interface>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
835
		$groups = $manager->getUserGroups($user1);
836
		$this->assertEquals(1, count($groups));
837
		$group1 = reset($groups);
838
		$this->assertEquals('group1', $group1->getGID());
839
840
		// remove user
841
		$group = $manager->get('group1');
842
		$group->removeUser($user1);
843
		$expectedGroups = array();
0 ignored issues
show
Unused Code introduced by
$expectedGroups is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
844
845
		// check result
846
		$groups = $manager->getUserGroups($user1);
847
		$this->assertEquals(array(), $groups);
848
	}
849
850 View Code Duplication
	public function testGetUserIdGroups() {
851
		/**
852
		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend
853
		 */
854
		$backend = $this->getMock('\OC_Group_Database');
855
		$backend->expects($this->any())
856
			->method('getUserGroups')
857
			->with('user1')
858
			->will($this->returnValue(null));
859
860
		/**
861
		 * @var \OC\User\Manager $userManager
862
		 */
863
		$userManager = $this->getMock('\OC\User\Manager');
864
		$manager = new \OC\Group\Manager($userManager);
865
		$manager->addBackend($backend);
866
867
		$groups = $manager->getUserIdGroups('user1');
868
		$this->assertEquals([], $groups);
869
	}
870
871
}
872