Completed
Push — ezp26914-imagine_resolve_excep... ( c5a137...48c7cc )
by
unknown
42:21 queued 27:20
created

testMoveUserGroupThrowsNotFoundException()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 31
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 14
nc 1
nop 0
dl 0
loc 31
rs 8.8571
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * File containing the UserServiceTest class.
5
 *
6
 * @copyright Copyright (C) eZ Systems AS. All rights reserved.
7
 * @license For full copyright and license information view LICENSE file distributed with this source code.
8
 */
9
namespace eZ\Publish\API\Repository\Tests;
10
11
use eZ\Publish\API\Repository\Values\Content\VersionInfo;
12
use eZ\Publish\API\Repository\Values\User\User;
13
use eZ\Publish\API\Repository\Exceptions\NotFoundException;
14
use Exception;
15
16
/**
17
 * Test case for operations in the UserService using in memory storage.
18
 *
19
 * @see eZ\Publish\API\Repository\UserService
20
 * @group integration
21
 * @group user
22
 */
23
class UserServiceTest extends BaseTest
24
{
25
    /**
26
     * Test for the loadUserGroup() method.
27
     *
28
     * @see \eZ\Publish\API\Repository\UserService::loadUserGroup()
29
     */
30
    public function testLoadUserGroup()
31
    {
32
        $repository = $this->getRepository();
33
34
        $mainGroupId = $this->generateId('group', 4);
35
        /* BEGIN: Use Case */
36
        // $mainGroupId is the ID of the main "Users" group
37
38
        $userService = $repository->getUserService();
39
40
        $userGroup = $userService->loadUserGroup($mainGroupId);
41
        /* END: Use Case */
42
43
        $this->assertInstanceOf('\\eZ\\Publish\\API\\Repository\\Values\\User\\UserGroup', $userGroup);
44
    }
45
46
    /**
47
     * Test for the loadUserGroup() method.
48
     *
49
     * @see \eZ\Publish\API\Repository\UserService::loadUserGroup()
50
     * @expectedException \eZ\Publish\API\Repository\Exceptions\NotFoundException
51
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserGroup
52
     */
53
    public function testLoadUserGroupThrowsNotFoundException()
54
    {
55
        $repository = $this->getRepository();
56
57
        $nonExistingGroupId = $this->generateId('group', self::DB_INT_MAX);
58
        /* BEGIN: Use Case */
59
        $userService = $repository->getUserService();
60
61
        // This call will fail with a NotFoundException
62
        $userService->loadUserGroup($nonExistingGroupId);
63
        /* END: Use Case */
64
    }
65
66
    /**
67
     * Test for the loadSubUserGroups() method.
68
     *
69
     * @see \eZ\Publish\API\Repository\UserService::loadSubUserGroups()
70
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserGroup
71
     */
72
    public function testLoadSubUserGroups()
73
    {
74
        $repository = $this->getRepository();
75
76
        $mainGroupId = $this->generateId('group', 4);
77
        /* BEGIN: Use Case */
78
        // $mainGroupId is the ID of the main "Users" group
79
80
        $userService = $repository->getUserService();
81
82
        $userGroup = $userService->loadUserGroup($mainGroupId);
83
84
        $subUserGroups = $userService->loadSubUserGroups($userGroup);
85
        foreach ($subUserGroups as $subUserGroup) {
86
            // Do something with the $subUserGroup
87
            $this->assertInstanceOf('\\eZ\\Publish\\API\\Repository\\Values\\User\\UserGroup', $subUserGroup);
88
        }
89
        /* END: Use Case */
90
    }
91
92
    /**
93
     * Test for the newUserGroupCreateStruct() method.
94
     *
95
     * @return \eZ\Publish\API\Repository\Values\User\UserGroupCreateStruct
96
     *
97
     * @see \eZ\Publish\API\Repository\UserService::newUserGroupCreateStruct()
98
     * @depends eZ\Publish\API\Repository\Tests\ContentTypeServiceTest::testLoadContentTypeByIdentifier
99
     */
100
    public function testNewUserGroupCreateStruct()
101
    {
102
        $repository = $this->getRepository();
103
104
        /* BEGIN: Use Case */
105
        $userService = $repository->getUserService();
106
107
        $groupCreate = $userService->newUserGroupCreateStruct('eng-US');
108
        /* END: Use Case */
109
110
        $this->assertInstanceOf(
111
            '\\eZ\\Publish\\API\\Repository\\Values\\User\\UserGroupCreateStruct',
112
            $groupCreate
113
        );
114
115
        return $groupCreate;
116
    }
117
118
    /**
119
     * Test for the newUserGroupCreateStruct() method.
120
     *
121
     * @param \eZ\Publish\API\Repository\Values\User\UserGroupCreateStruct $groupCreate
122
     *
123
     * @see \eZ\Publish\API\Repository\UserService::newUserGroupCreateStruct()
124
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testNewUserGroupCreateStruct
125
     */
126
    public function testNewUserGroupCreateStructSetsMainLanguageCode($groupCreate)
127
    {
128
        $this->assertEquals('eng-US', $groupCreate->mainLanguageCode);
129
    }
130
131
    /**
132
     * Test for the newUserGroupCreateStruct() method.
133
     *
134
     * @param \eZ\Publish\API\Repository\Values\User\UserGroupCreateStruct $groupCreate
135
     *
136
     * @see \eZ\Publish\API\Repository\UserService::newUserGroupCreateStruct()
137
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testNewUserGroupCreateStruct
138
     */
139
    public function testNewUserGroupCreateStructSetsContentType($groupCreate)
140
    {
141
        $this->assertInstanceOf(
142
            '\\eZ\\Publish\\API\\Repository\\Values\\ContentType\\ContentType',
143
            $groupCreate->contentType
144
        );
145
    }
146
147
    /**
148
     * Test for the newUserGroupCreateStruct() method.
149
     *
150
     * @see \eZ\Publish\API\Repository\UserService::newUserGroupCreateStruct($mainLanguageCode, $contentType)
151
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testNewUserGroupCreateStruct
152
     * @depends eZ\Publish\API\Repository\Tests\ContentTypeServiceTest::testLoadContentTypeByIdentifier
153
     */
154 View Code Duplication
    public function testNewUserGroupCreateStructWithSecondParameter()
155
    {
156
        if ($this->isVersion4()) {
157
            $this->markTestSkipped('This test is only relevant for eZ Publish versions > 4');
158
        }
159
160
        $repository = $this->getRepository();
161
162
        /* BEGIN: Use Case */
163
        $contentTypeService = $repository->getContentTypeService();
164
        $userService = $repository->getUserService();
165
166
        // Load the default ContentType for user groups
167
        $groupType = $contentTypeService->loadContentTypeByIdentifier('user_group');
168
169
        // Instantiate a new group create struct
170
        $groupCreate = $userService->newUserGroupCreateStruct(
171
            'eng-US',
172
            $groupType
173
        );
174
        /* END: Use Case */
175
176
        $this->assertSame($groupType, $groupCreate->contentType);
177
    }
178
179
    /**
180
     * Test for the createUserGroup() method.
181
     *
182
     * @return \eZ\Publish\API\Repository\Values\User\UserGroup
183
     *
184
     * @see \eZ\Publish\API\Repository\UserService::createUserGroup()
185
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testNewUserGroupCreateStruct
186
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserGroup
187
     * @depends eZ\Publish\API\Repository\Tests\ContentServiceTest::testCreateContent
188
     */
189
    public function testCreateUserGroup()
190
    {
191
        /* BEGIN: Use Case */
192
        $userGroup = $this->createUserGroupVersion1();
193
        /* END: Use Case */
194
195
        $this->assertInstanceOf(
196
            '\\eZ\\Publish\\API\\Repository\\Values\\User\\UserGroup',
197
            $userGroup
198
        );
199
200
        $versionInfo = $userGroup->getVersionInfo();
201
202
        $this->assertEquals(VersionInfo::STATUS_PUBLISHED, $versionInfo->status);
203
        $this->assertEquals(1, $versionInfo->versionNo);
204
205
        return $userGroup;
206
    }
207
208
    /**
209
     * Test for the createUserGroup() method.
210
     *
211
     * @param \eZ\Publish\API\Repository\Values\User\UserGroup $userGroup
212
     *
213
     * @see \eZ\Publish\API\Repository\UserService::createUserGroup()
214
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUserGroup
215
     */
216
    public function testCreateUserGroupSetsExpectedProperties($userGroup)
217
    {
218
        $this->assertEquals(
219
            array(
220
                'parentId' => $this->generateId('group', 4),
221
                'subGroupCount' => 0,
222
            ),
223
            array(
224
                'parentId' => $userGroup->parentId,
225
                'subGroupCount' => $userGroup->subGroupCount,
0 ignored issues
show
Deprecated Code introduced by
The property eZ\Publish\API\Repositor...erGroup::$subGroupCount has been deprecated with message: As of eZ Publish 5.3.3, count can be obtained on demand using location service.

This property has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the property will be removed from the class and what other property to use instead.

Loading history...
226
            )
227
        );
228
    }
229
230
    /**
231
     * Test for the createUserGroup() method.
232
     *
233
     * @see \eZ\Publish\API\Repository\UserService::createUserGroup()
234
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUserGroup
235
     */
236 View Code Duplication
    public function testCreateUserGroupIncrementsParentSubGroupCount()
237
    {
238
        $repository = $this->getRepository();
239
        $userService = $repository->getUserService();
240
        $mainGroupId = $this->generateId('group', 4);
241
242
        $parentUserGroup = $userService->loadUserGroup($mainGroupId);
243
        $parentGroupCount = $parentUserGroup->subGroupCount;
0 ignored issues
show
Deprecated Code introduced by
The property eZ\Publish\API\Repositor...erGroup::$subGroupCount has been deprecated with message: As of eZ Publish 5.3.3, count can be obtained on demand using location service.

This property has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the property will be removed from the class and what other property to use instead.

Loading history...
244
245
        /* BEGIN: Use Case */
246
        $this->createUserGroupVersion1();
247
248
        $this->refreshSearch($repository);
249
250
        // This should be one greater than before
251
        $subGroupCount = $userService->loadUserGroup($mainGroupId)->subGroupCount;
0 ignored issues
show
Deprecated Code introduced by
The property eZ\Publish\API\Repositor...erGroup::$subGroupCount has been deprecated with message: As of eZ Publish 5.3.3, count can be obtained on demand using location service.

This property has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the property will be removed from the class and what other property to use instead.

Loading history...
252
        /* END: Use Case */
253
254
        $this->assertEquals($parentGroupCount + 1, $subGroupCount);
255
    }
256
257
    /**
258
     * Test for the createUserGroup() method.
259
     *
260
     * @see \eZ\Publish\API\Repository\UserService::createUserGroup()
261
     * @expectedException \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException
262
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUserGroup
263
     */
264 View Code Duplication
    public function testCreateUserGroupThrowsInvalidArgumentException()
265
    {
266
        $repository = $this->getRepository();
267
268
        $mainGroupId = $this->generateId('group', 4);
269
        /* BEGIN: Use Case */
270
        // $mainGroupId is the ID of the main "Users" group
271
272
        $userService = $repository->getUserService();
273
274
        // Load main group
275
        $parentUserGroup = $userService->loadUserGroup($mainGroupId);
276
277
        // Instantiate a new create struct
278
        $userGroupCreate = $userService->newUserGroupCreateStruct('eng-US');
279
        $userGroupCreate->setField('name', 'Example Group');
280
        $userGroupCreate->remoteId = '5f7f0bdb3381d6a461d8c29ff53d908f';
281
282
        // This call will fail with an "InvalidArgumentException", because the
283
        // specified remoteId is already used for the "Members" user group.
284
        $userService->createUserGroup(
285
            $userGroupCreate,
286
            $parentUserGroup
287
        );
288
        /* END: Use Case */
289
    }
290
291
    /**
292
     * Test for the createUserGroup() method.
293
     *
294
     * @see \eZ\Publish\API\Repository\UserService::createUserGroup()
295
     * @expectedException \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException
296
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUserGroup
297
     */
298
    public function testCreateUserGroupThrowsInvalidArgumentExceptionFieldTypeNotAccept()
299
    {
300
        $repository = $this->getRepository();
301
302
        $mainGroupId = $this->generateId('group', 4);
303
        /* BEGIN: Use Case */
304
        // $mainGroupId is the ID of the main "Users" group
305
306
        $userService = $repository->getUserService();
307
308
        // Load main group
309
        $parentUserGroup = $userService->loadUserGroup($mainGroupId);
310
311
        // Instantiate a new create struct
312
        $userGroupCreate = $userService->newUserGroupCreateStruct('eng-US');
313
        $userGroupCreate->setField('name', new \stdClass());
314
315
        // This call will fail with an "InvalidArgumentException", because the
316
        // specified remoteId is already used for the "Members" user group.
317
        $userService->createUserGroup(
318
            $userGroupCreate,
319
            $parentUserGroup
320
        );
321
        /* END: Use Case */
322
    }
323
324
    /**
325
     * Test for the createUserGroup() method.
326
     *
327
     * @see \eZ\Publish\API\Repository\UserService::createUserGroup()
328
     * @expectedException \eZ\Publish\API\Repository\Exceptions\ContentFieldValidationException
329
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUserGroup
330
     */
331
    public function testCreateUserGroupWhenMissingField()
332
    {
333
        $repository = $this->getRepository();
334
335
        $mainGroupId = $this->generateId('group', 4);
336
        /* BEGIN: Use Case */
337
        // $mainGroupId is the ID of the main "Users" group
338
339
        $userService = $repository->getUserService();
340
341
        // Load main group
342
        $parentUserGroup = $userService->loadUserGroup($mainGroupId);
343
344
        // Instantiate a new create struct
345
        $userGroupCreate = $userService->newUserGroupCreateStruct('eng-US');
346
347
        // This call will fail with a "ContentFieldValidationException", because the
348
        // only mandatory field "name" is not set.
349
        $userService->createUserGroup($userGroupCreate, $parentUserGroup);
350
        /* END: Use Case */
351
    }
352
353
    /**
354
     * Test for the createUserGroup() method.
355
     *
356
     * @return \eZ\Publish\API\Repository\Values\User\UserGroup
357
     *
358
     * @see \eZ\Publish\API\Repository\UserService::createUserGroup()
359
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testNewUserGroupCreateStruct
360
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserGroup
361
     * @depends eZ\Publish\API\Repository\Tests\ContentServiceTest::testCreateContent
362
     */
363
    public function testCreateUserGroupInTransactionWithRollback()
364
    {
365
        $repository = $this->getRepository();
366
367
        $mainGroupId = $this->generateId('group', 4);
368
        /* BEGIN: Use Case */
369
        // $mainGroupId is the ID of the main "Users" group
370
371
        $userService = $repository->getUserService();
372
373
        $repository->beginTransaction();
374
375
        try {
376
            // Load main group
377
            $parentUserGroup = $userService->loadUserGroup($mainGroupId);
378
379
            // Instantiate a new create struct
380
            $userGroupCreate = $userService->newUserGroupCreateStruct('eng-US');
381
            $userGroupCreate->setField('name', 'Example Group');
382
383
            // Create the new user group
384
            $createdUserGroupId = $userService->createUserGroup(
385
                $userGroupCreate,
386
                $parentUserGroup
387
            )->id;
388
        } catch (Exception $e) {
389
            // Cleanup hanging transaction on error
390
            $repository->rollback();
391
            throw $e;
392
        }
393
394
        $repository->rollback();
395
396
        try {
397
            // Throws exception since creation of user group was rolled back
398
            $loadedGroup = $userService->loadUserGroup($createdUserGroupId);
0 ignored issues
show
Unused Code introduced by
$loadedGroup 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...
399
        } catch (NotFoundException $e) {
400
            return;
401
        }
402
        /* END: Use Case */
403
404
        $this->fail('User group object still exists after rollback.');
405
    }
406
407
    /**
408
     * Test for the deleteUserGroup() method.
409
     *
410
     * @see \eZ\Publish\API\Repository\UserService::deleteUserGroup()
411
     * @expectedException \eZ\Publish\API\Repository\Exceptions\NotFoundException
412
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUserGroup
413
     */
414
    public function testDeleteUserGroup()
415
    {
416
        $repository = $this->getRepository();
417
        $userService = $repository->getUserService();
418
419
        /* BEGIN: Use Case */
420
        $userGroup = $this->createUserGroupVersion1();
421
422
        // Delete the currently created user group again
423
        $userService->deleteUserGroup($userGroup);
424
        /* END: Use Case */
425
426
        // We use the NotFoundException here for verification
427
        $userService->loadUserGroup($userGroup->id);
428
    }
429
430
    /**
431
     * Test for the moveUserGroup() method.
432
     *
433
     * @see \eZ\Publish\API\Repository\UserService::moveUserGroup()
434
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUserGroup
435
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadSubUserGroups
436
     */
437
    public function testMoveUserGroup()
438
    {
439
        $repository = $this->getRepository();
440
        $userService = $repository->getUserService();
441
442
        $membersGroupId = $this->generateId('group', 13);
443
        /* BEGIN: Use Case */
444
        // $membersGroupId is the ID of the "Members" user group in an eZ
445
        // Publish demo installation
446
447
        $userGroup = $this->createUserGroupVersion1();
448
449
        // Load the new parent group
450
        $membersUserGroup = $userService->loadUserGroup($membersGroupId);
451
452
        // Move user group from "Users" to "Members"
453
        $userService->moveUserGroup($userGroup, $membersUserGroup);
454
455
        // Reload the user group to get an updated $parentId
456
        $userGroup = $userService->loadUserGroup($userGroup->id);
457
458
        $this->refreshSearch($repository);
459
460
        // The returned array will no contain $userGroup
461
        $subUserGroups = $userService->loadSubUserGroups(
462
            $membersUserGroup
463
        );
464
        /* END: Use Case */
465
466
        $subUserGroupIds = array_map(
467
            function ($content) {
468
                return $content->id;
469
            },
470
            $subUserGroups
471
        );
472
473
        $this->assertEquals($membersGroupId, $userGroup->parentId);
474
        $this->assertEquals(array($userGroup->id), $subUserGroupIds);
475
    }
476
477
    /**
478
     * Test for the moveUserGroup() method.
479
     *
480
     * @see \eZ\Publish\API\Repository\UserService::moveUserGroup()
481
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testMoveUserGroup
482
     */
483 View Code Duplication
    public function testMoveUserGroupIncrementsSubGroupCountOnNewParent()
484
    {
485
        $repository = $this->getRepository();
486
        $userService = $repository->getUserService();
487
488
        $membersGroupId = $this->generateId('group', 13);
489
        /* BEGIN: Use Case */
490
        // $membersGroupId is the ID of the "Members" user group in an eZ
491
        // Publish demo installation
492
493
        $userGroup = $this->createUserGroupVersion1();
494
495
        // Load the new parent group
496
        $membersUserGroup = $userService->loadUserGroup($membersGroupId);
497
498
        // Move user group from "Users" to "Members"
499
        $userService->moveUserGroup($userGroup, $membersUserGroup);
500
501
        $this->refreshSearch($repository);
502
503
        // Reload the user group to get an updated $subGroupCount
504
        $membersUserGroupUpdated = $userService->loadUserGroup($membersGroupId);
505
        /* END: Use Case */
506
507
        $this->assertEquals(1, $membersUserGroupUpdated->subGroupCount);
0 ignored issues
show
Deprecated Code introduced by
The property eZ\Publish\API\Repositor...erGroup::$subGroupCount has been deprecated with message: As of eZ Publish 5.3.3, count can be obtained on demand using location service.

This property has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the property will be removed from the class and what other property to use instead.

Loading history...
508
    }
509
510
    /**
511
     * Test for the moveUserGroup() method.
512
     *
513
     * @see \eZ\Publish\API\Repository\UserService::moveUserGroup()
514
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testMoveUserGroup
515
     */
516 View Code Duplication
    public function testMoveUserGroupDecrementsSubGroupCountOnOldParent()
517
    {
518
        $repository = $this->getRepository();
519
        $userService = $repository->getUserService();
520
521
        $membersGroupId = $this->generateId('group', 13);
522
        /* BEGIN: Use Case */
523
        // $membersGroupId is the ID of the "Members" user group in an eZ
524
        // Publish demo installation
525
526
        $userGroup = $this->createUserGroupVersion1();
527
528
        // Load the new parent group
529
        $membersUserGroup = $userService->loadUserGroup($membersGroupId);
530
531
        // Move user group from "Users" to "Members"
532
        $userService->moveUserGroup($userGroup, $membersUserGroup);
533
        /* END: Use Case */
534
535
        $mainUserGroup = $userService->loadUserGroup($this->generateId('group', 4));
536
537
        $this->assertEquals(5, $mainUserGroup->subGroupCount);
0 ignored issues
show
Deprecated Code introduced by
The property eZ\Publish\API\Repositor...erGroup::$subGroupCount has been deprecated with message: As of eZ Publish 5.3.3, count can be obtained on demand using location service.

This property has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the property will be removed from the class and what other property to use instead.

Loading history...
538
    }
539
540
    /**
541
     * Test for the newUserGroupUpdateStruct() method.
542
     *
543
     * @see \eZ\Publish\API\Repository\UserService::newUserGroupUpdateStruct()
544
     */
545
    public function testNewUserGroupUpdateStruct()
546
    {
547
        $repository = $this->getRepository();
548
549
        /* BEGIN: Use Case */
550
        $userService = $repository->getUserService();
551
552
        $groupUpdate = $userService->newUserGroupUpdateStruct();
553
        /* END: Use Case */
554
555
        $this->assertInstanceOf(
556
            '\\eZ\\Publish\\API\\Repository\\Values\\User\\UserGroupUpdateStruct',
557
            $groupUpdate
558
        );
559
    }
560
561
    /**
562
     * Test for the updateUserGroup() method.
563
     *
564
     * @see \eZ\Publish\API\Repository\UserService::updateUserGroup()
565
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUserGroup
566
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testNewUserGroupUpdateStruct
567
     */
568
    public function testUpdateUserGroup()
569
    {
570
        $repository = $this->getRepository();
571
        $userService = $repository->getUserService();
572
573
        /* BEGIN: Use Case */
574
        $userGroup = $this->createUserGroupVersion1();
575
576
        // Create a group update struct and change nothing
577
        $groupUpdate = $userService->newUserGroupUpdateStruct();
578
579
        // This update will do nothing
580
        $userGroup = $userService->updateUserGroup(
581
            $userGroup,
582
            $groupUpdate
583
        );
584
        /* END: Use Case */
585
586
        $this->assertInstanceOf(
587
            '\\eZ\\Publish\\API\\Repository\\Values\\User\\UserGroup',
588
            $userGroup
589
        );
590
591
        $this->assertEquals(1, $userGroup->getVersionInfo()->versionNo);
592
    }
593
594
    /**
595
     * Test for the updateUserGroup() method.
596
     *
597
     * @see \eZ\Publish\API\Repository\UserService::updateUserGroup()
598
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testUpdateUserGroup
599
     */
600 View Code Duplication
    public function testUpdateUserGroupWithSubContentUpdateStruct()
601
    {
602
        $repository = $this->getRepository();
603
        $userService = $repository->getUserService();
604
605
        /* BEGIN: Use Case */
606
        $userGroup = $this->createUserGroupVersion1();
607
608
        // Load the content service
609
        $contentService = $repository->getContentService();
610
611
        // Create a content update struct and update the group name
612
        $contentUpdate = $contentService->newContentUpdateStruct();
613
        $contentUpdate->setField('name', 'Sindelfingen', 'eng-US');
614
615
        // Create a group update struct and set content update struct
616
        $groupUpdate = $userService->newUserGroupUpdateStruct();
617
        $groupUpdate->contentUpdateStruct = $contentUpdate;
618
619
        // This will update the name and the increment the group version number
620
        $userGroup = $userService->updateUserGroup(
621
            $userGroup,
622
            $groupUpdate
623
        );
624
        /* END: Use Case */
625
626
        $this->assertEquals('Sindelfingen', $userGroup->getFieldValue('name', 'eng-US'));
627
628
        $versionInfo = $userGroup->getVersionInfo();
629
630
        $this->assertEquals(VersionInfo::STATUS_PUBLISHED, $versionInfo->status);
631
        $this->assertEquals(2, $versionInfo->versionNo);
632
    }
633
634
    /**
635
     * Test for the updateUserGroup() method.
636
     *
637
     * @see \eZ\Publish\API\Repository\UserService::updateUserGroup()
638
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testUpdateUserGroup
639
     */
640
    public function testUpdateUserGroupWithSubContentMetadataUpdateStruct()
641
    {
642
        $repository = $this->getRepository();
643
        $userService = $repository->getUserService();
644
645
        /* BEGIN: Use Case */
646
        $userGroup = $this->createUserGroupVersion1();
647
648
        // Load the content service
649
        $contentService = $repository->getContentService();
650
651
        // Create a metadata update struct and change the remoteId
652
        $metadataUpdate = $contentService->newContentMetadataUpdateStruct();
653
        $metadataUpdate->remoteId = '3c61299780663bafa3af2101e52125da';
654
655
        // Create a group update struct and set content update struct
656
        $groupUpdate = $userService->newUserGroupUpdateStruct();
657
        $groupUpdate->contentMetadataUpdateStruct = $metadataUpdate;
658
659
        // This will update the name and the increment the group version number
660
        $userGroup = $userService->updateUserGroup(
661
            $userGroup,
662
            $groupUpdate
663
        );
664
        /* END: Use Case */
665
666
        $this->assertEquals(
667
            '3c61299780663bafa3af2101e52125da',
668
            $userGroup->contentInfo->remoteId
669
        );
670
671
        $versionInfo = $userGroup->getVersionInfo();
672
673
        $this->assertEquals(VersionInfo::STATUS_PUBLISHED, $versionInfo->status);
674
        $this->assertEquals(1, $versionInfo->versionNo);
675
    }
676
677
    /**
678
     * Test for the updateUserGroup() method.
679
     *
680
     * @see \eZ\Publish\API\Repository\UserService::updateUserGroup()
681
     * @expectedException \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException
682
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testUpdateUserGroup
683
     */
684 View Code Duplication
    public function testUpdateUserGroupThrowsInvalidArgumentExceptionOnFieldTypeNotAccept()
685
    {
686
        $repository = $this->getRepository();
687
        $userService = $repository->getUserService();
688
689
        /* BEGIN: Use Case */
690
        $userGroup = $this->createUserGroupVersion1();
691
692
        // Load the content service
693
        $contentService = $repository->getContentService();
694
695
        // Create a content update struct and update the group name
696
        $contentUpdate = $contentService->newContentUpdateStruct();
697
        // An object of stdClass is not accepted as a value by the field "name"
698
        $contentUpdate->setField('name', new \stdClass(), 'eng-US');
699
700
        // Create a group update struct and set content update struct
701
        $groupUpdate = $userService->newUserGroupUpdateStruct();
702
        $groupUpdate->contentUpdateStruct = $contentUpdate;
703
704
        // This call will fail with an InvalidArgumentException, because the
705
        // field "name" does not accept the given value
706
        $userService->updateUserGroup($userGroup, $groupUpdate);
707
        /* END: Use Case */
708
    }
709
710
    /**
711
     * Test for the newUserCreateStruct() method.
712
     *
713
     * @see \eZ\Publish\API\Repository\UserService::newUserCreateStruct()
714
     */
715
    public function testNewUserCreateStruct()
716
    {
717
        $repository = $this->getRepository();
718
719
        /* BEGIN: Use Case */
720
        $userService = $repository->getUserService();
721
722
        $userCreate = $userService->newUserCreateStruct(
723
            'user',
724
            '[email protected]',
725
            'secret',
726
            'eng-US'
727
        );
728
        /* END: Use Case */
729
730
        $this->assertInstanceOf(
731
            '\\eZ\\Publish\\API\\Repository\\Values\\User\\UserCreateStruct',
732
            $userCreate
733
        );
734
735
        return $userCreate;
736
    }
737
738
    /**
739
     * Test for the newUserCreateStruct() method.
740
     *
741
     * @param \eZ\Publish\API\Repository\Values\User\UserCreateStruct $userCreate
742
     *
743
     * @see \eZ\Publish\API\Repository\UserService::newUserCreateStruct()
744
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testNewUserCreateStruct
745
     */
746 View Code Duplication
    public function testNewUserCreateStructSetsExpectedProperties($userCreate)
747
    {
748
        $this->assertEquals(
749
            array(
750
                'login' => 'user',
751
                'email' => '[email protected]',
752
                'password' => 'secret',
753
                'mainLanguageCode' => 'eng-US',
754
            ),
755
            array(
756
                'login' => $userCreate->login,
757
                'email' => $userCreate->email,
758
                'password' => $userCreate->password,
759
                'mainLanguageCode' => $userCreate->mainLanguageCode,
760
            )
761
        );
762
    }
763
764
    /**
765
     * Test for the newUserCreateStruct() method.
766
     *
767
     * @see \eZ\Publish\API\Repository\UserService::newUserCreateStruct($login, $email, $password, $mainLanguageCode, $contentType)
768
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testNewUserCreateStruct
769
     * @depends eZ\Publish\API\Repository\Tests\ContentTypeServiceTest::testLoadContentTypeByIdentifier
770
     */
771 View Code Duplication
    public function testNewUserCreateStructWithFifthParameter()
772
    {
773
        if ($this->isVersion4()) {
774
            $this->markTestSkipped('This test is only relevant for eZ Publish versions > 4');
775
        }
776
777
        $repository = $this->getRepository();
778
779
        /* BEGIN: Use Case */
780
        $contentTypeService = $repository->getContentTypeService();
781
        $userService = $repository->getUserService();
782
783
        $userType = $contentTypeService->loadContentTypeByIdentifier('user');
784
785
        $userCreate = $userService->newUserCreateStruct(
786
            'user',
787
            '[email protected]',
788
            'secret',
789
            'eng-US',
790
            $userType
791
        );
792
        /* END: Use Case */
793
794
        $this->assertSame($userType, $userCreate->contentType);
795
    }
796
797
    /**
798
     * Test for the createUser() method.
799
     *
800
     * @return \eZ\Publish\API\Repository\Values\User\User
801
     *
802
     * @see \eZ\Publish\API\Repository\UserService::createUser()
803
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserGroup
804
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testNewUserCreateStruct
805
     * @depends eZ\Publish\API\Repository\Tests\ContentServiceTest::testCreateContent
806
     */
807
    public function testCreateUser()
808
    {
809
        /* BEGIN: Use Case */
810
        $user = $this->createUserVersion1();
811
        /* END: Use Case */
812
813
        $this->assertInstanceOf(
814
            '\\eZ\\Publish\\API\\Repository\\Values\\User\\User',
815
            $user
816
        );
817
818
        return $user;
819
    }
820
821
    /**
822
     * Test for the createUser() method.
823
     *
824
     * @param \eZ\Publish\API\Repository\Values\User\User $user
825
     *
826
     * @see \eZ\Publish\API\Repository\UserService::createUser()
827
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser
828
     */
829 View Code Duplication
    public function testCreateUserSetsExpectedProperties(User $user)
830
    {
831
        $this->assertEquals(
832
            array(
833
                'login' => 'user',
834
                'email' => '[email protected]',
835
                'passwordHash' => $this->createHash(
836
                    'user',
837
                    'secret',
838
                    $user->hashAlgorithm
839
                ),
840
                'mainLanguageCode' => 'eng-US',
841
            ),
842
            array(
843
                'login' => $user->login,
844
                'email' => $user->email,
845
                'passwordHash' => $user->passwordHash,
846
                'mainLanguageCode' => $user->contentInfo->mainLanguageCode,
847
            )
848
        );
849
    }
850
851
    /**
852
     * Test for the createUser() method.
853
     *
854
     * @see \eZ\Publish\API\Repository\UserService::createUser()
855
     * @expectedException \eZ\Publish\API\Repository\Exceptions\ContentFieldValidationException
856
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser
857
     */
858 View Code Duplication
    public function testCreateUserWhenMissingField()
859
    {
860
        $repository = $this->getRepository();
861
862
        $editorsGroupId = $this->generateId('group', 13);
863
        /* BEGIN: Use Case */
864
        // $editorsGroupId is the ID of the "Editors" user group in an eZ
865
        // Publish demo installation
866
867
        $userService = $repository->getUserService();
868
869
        // Instantiate a create struct with mandatory properties
870
        $userCreate = $userService->newUserCreateStruct(
871
            'user',
872
            '[email protected]',
873
            'secret',
874
            'eng-US'
875
        );
876
877
        // Do not set the mandatory fields "first_name" and "last_name"
878
        //$userCreate->setField( 'first_name', 'Example' );
879
        //$userCreate->setField( 'last_name', 'User' );
880
881
        // Load parent group for the user
882
        $group = $userService->loadUserGroup($editorsGroupId);
883
884
        // This call will fail with a "ContentFieldValidationException", because the
885
        // mandatory fields "first_name" and "last_name" are not set.
886
        $userService->createUser($userCreate, array($group));
887
        /* END: Use Case */
888
    }
889
890
    /**
891
     * Test for the createUser() method.
892
     *
893
     * @see \eZ\Publish\API\Repository\UserService::createUser()
894
     * @expectedException \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException
895
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser
896
     */
897 View Code Duplication
    public function testCreateUserThrowsInvalidArgumentExceptionOnFieldTypeNotAccept()
898
    {
899
        $repository = $this->getRepository();
900
901
        $editorsGroupId = $this->generateId('group', 13);
902
        /* BEGIN: Use Case */
903
        // $editorsGroupId is the ID of the "Editors" user group in an eZ
904
        // Publish demo installation
905
906
        $userService = $repository->getUserService();
907
908
        // Instantiate a create struct with mandatory properties
909
        $userCreate = $userService->newUserCreateStruct(
910
            'user',
911
            '[email protected]',
912
            'secret',
913
            'eng-US'
914
        );
915
916
        // An object of stdClass is not a valid value for the field first_name
917
        $userCreate->setField('first_name', new \stdClass());
918
        $userCreate->setField('last_name', 'User');
919
920
        // Load parent group for the user
921
        $group = $userService->loadUserGroup($editorsGroupId);
922
923
        // This call will fail with an "InvalidArgumentException", because the
924
        // value for the firled "first_name" is not accepted by the field type.
925
        $userService->createUser($userCreate, array($group));
926
        /* END: Use Case */
927
    }
928
929
    /**
930
     * Test for the createUser() method.
931
     *
932
     * @see \eZ\Publish\API\Repository\UserService::createUser()
933
     * @expectedException \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException
934
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser
935
     */
936 View Code Duplication
    public function testCreateUserThrowsInvalidArgumentException()
937
    {
938
        $repository = $this->getRepository();
939
940
        $editorsGroupId = $this->generateId('group', 13);
941
        /* BEGIN: Use Case */
942
        // $editorsGroupId is the ID of the "Editors" user group in an eZ
943
        // Publish demo installation
944
945
        $userService = $repository->getUserService();
946
947
        // Instantiate a create struct with mandatory properties
948
        $userCreate = $userService->newUserCreateStruct(
949
            // admin is an existing login
950
            'admin',
951
            '[email protected]',
952
            'secret',
953
            'eng-US'
954
        );
955
956
        $userCreate->setField('first_name', 'Example');
957
        $userCreate->setField('last_name', 'User');
958
959
        // Load parent group for the user
960
        $group = $userService->loadUserGroup($editorsGroupId);
961
962
        // This call will fail with a "InvalidArgumentException", because the
963
        // user with "admin" login already exists.
964
        $userService->createUser($userCreate, array($group));
965
        /* END: Use Case */
966
    }
967
968
    /**
969
     * Test for the createUser() method.
970
     *
971
     * @return \eZ\Publish\API\Repository\Values\User\User
972
     *
973
     * @see \eZ\Publish\API\Repository\UserService::createUser()
974
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserGroup
975
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testNewUserCreateStruct
976
     * @depends eZ\Publish\API\Repository\Tests\ContentServiceTest::testCreateContent
977
     */
978
    public function testCreateUserInTransactionWithRollback()
979
    {
980
        $repository = $this->getRepository();
981
        $userService = $repository->getUserService();
982
983
        /* BEGIN: Use Case */
984
        $repository->beginTransaction();
985
986
        try {
987
            $user = $this->createUserVersion1();
988
        } catch (Exception $e) {
989
            // Cleanup hanging transaction on error
990
            $repository->rollback();
991
            throw $e;
992
        }
993
994
        $repository->rollback();
995
996
        try {
997
            // Throws exception since creation of user was rolled back
998
            $loadedUser = $userService->loadUser($user->id);
0 ignored issues
show
Unused Code introduced by
$loadedUser 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...
999
        } catch (NotFoundException $e) {
1000
            return;
1001
        }
1002
        /* END: Use Case */
1003
1004
        $this->fail('User object still exists after rollback.');
1005
    }
1006
1007
    /**
1008
     * Test for the loadUser() method.
1009
     *
1010
     * @see \eZ\Publish\API\Repository\UserService::loadUser()
1011
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser
1012
     */
1013
    public function testLoadUser()
1014
    {
1015
        $repository = $this->getRepository();
1016
1017
        $userService = $repository->getUserService();
1018
1019
        /* BEGIN: Use Case */
1020
        $user = $this->createUserVersion1();
1021
1022
        // Load the newly created user
1023
        $userReloaded = $userService->loadUser($user->id);
1024
        /* END: Use Case */
1025
1026
        $this->assertEquals($user, $userReloaded);
1027
    }
1028
1029
    /**
1030
     * Test for the loadUser() method.
1031
     *
1032
     * @see \eZ\Publish\API\Repository\UserService::loadUser()
1033
     * @expectedException \eZ\Publish\API\Repository\Exceptions\NotFoundException
1034
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUser
1035
     */
1036
    public function testLoadUserThrowsNotFoundException()
1037
    {
1038
        $repository = $this->getRepository();
1039
1040
        $nonExistingUserId = $this->generateId('user', self::DB_INT_MAX);
1041
        /* BEGIN: Use Case */
1042
        $userService = $repository->getUserService();
1043
1044
        // This call will fail with a "NotFoundException", because no user with
1045
        // an id equal to self::DB_INT_MAX should exist.
1046
        $userService->loadUser($nonExistingUserId);
1047
        /* END: Use Case */
1048
    }
1049
1050
    /**
1051
     * Test for the loadAnonymousUser() method.
1052
     *
1053
     * @see \eZ\Publish\API\Repository\UserService::loadAnonymousUser()
1054
     */
1055
    public function testLoadAnonymousUser()
1056
    {
1057
        $repository = $this->getRepository();
1058
1059
        $anonymousUserId = $this->generateId('user', 10);
1060
        /* BEGIN: Use Case */
1061
        // $anonymousUserId is the ID of the "Anonymous" user in a eZ
1062
        // Publish demo installation.
1063
        $userService = $repository->getUserService();
1064
1065
        // Load default anonymous user available in each eZ Publish installation
1066
        $anonymousUser = $userService->loadUser($anonymousUserId);
1067
        /* END: Use Case */
1068
1069
        $this->assertInstanceOf(
1070
            '\\eZ\\Publish\\API\\Repository\\Values\\User\\User',
1071
            $anonymousUser
1072
        );
1073
1074
        $this->assertEquals('anonymous', $anonymousUser->login);
1075
    }
1076
1077
    /**
1078
     * Test for the loadUserByCredentials() method.
1079
     *
1080
     * @see \eZ\Publish\API\Repository\UserService::loadUserByCredentials()
1081
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser
1082
     */
1083
    public function testLoadUserByCredentials()
1084
    {
1085
        $repository = $this->getRepository();
1086
1087
        $userService = $repository->getUserService();
1088
1089
        /* BEGIN: Use Case */
1090
        $user = $this->createUserVersion1();
1091
1092
        // Load the newly created user
1093
        $userReloaded = $userService->loadUserByCredentials('user', 'secret');
1094
        /* END: Use Case */
1095
1096
        $this->assertEquals($user, $userReloaded);
1097
    }
1098
1099
    /**
1100
     * Test for the loadUserByCredentials() method.
1101
     *
1102
     * @see \eZ\Publish\API\Repository\UserService::loadUserByCredentials()
1103
     * @expectedException \eZ\Publish\API\Repository\Exceptions\NotFoundException
1104
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserByCredentials
1105
     */
1106
    public function testLoadUserByCredentialsThrowsNotFoundExceptionForUnknownPassword()
1107
    {
1108
        $repository = $this->getRepository();
1109
1110
        $userService = $repository->getUserService();
1111
1112
        /* BEGIN: Use Case */
1113
        $this->createUserVersion1();
1114
1115
        // This call will fail with a "NotFoundException", because the given
1116
        // login/password combination does not exist.
1117
        $userService->loadUserByCredentials('user', 'SeCrEt');
1118
        /* END: Use Case */
1119
    }
1120
1121
    /**
1122
     * Test for the loadUserByCredentials() method.
1123
     *
1124
     * @see \eZ\Publish\API\Repository\UserService::loadUserByCredentials()
1125
     * @expectedException \eZ\Publish\API\Repository\Exceptions\NotFoundException
1126
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserByCredentials
1127
     */
1128
    public function testLoadUserByCredentialsThrowsNotFoundExceptionForUnknownPasswordEmtpy()
1129
    {
1130
        $repository = $this->getRepository();
1131
1132
        $userService = $repository->getUserService();
1133
1134
        /* BEGIN: Use Case */
1135
        $this->createUserVersion1();
1136
1137
        // This call will fail with a "NotFoundException", because the given
1138
        // login/password combination does not exist.
1139
        $userService->loadUserByCredentials('user', '');
1140
        /* END: Use Case */
1141
    }
1142
1143
    /**
1144
     * Test for the loadUserByCredentials() method.
1145
     *
1146
     * @see \eZ\Publish\API\Repository\UserService::loadUserByCredentials()
1147
     * @expectedException \eZ\Publish\API\Repository\Exceptions\NotFoundException
1148
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserByCredentials
1149
     */
1150
    public function testLoadUserByCredentialsThrowsNotFoundExceptionForUnknownLogin()
1151
    {
1152
        $repository = $this->getRepository();
1153
1154
        $userService = $repository->getUserService();
1155
1156
        /* BEGIN: Use Case */
1157
        $this->createUserVersion1();
1158
1159
        // This call will fail with a "NotFoundException", because the given
1160
        // login/password combination does not exist.
1161
        $userService->loadUserByCredentials('üser', 'secret');
1162
        /* END: Use Case */
1163
    }
1164
1165
    /**
1166
     * Test for the loadUserByCredentials() method.
1167
     *
1168
     * @see \eZ\Publish\API\Repository\UserService::loadUserByCredentials()
1169
     * @expectedException \eZ\Publish\Core\Base\Exceptions\InvalidArgumentValue
1170
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserByCredentials
1171
     */
1172
    public function testLoadUserByCredentialsThrowsInvalidArgumentValueForEmptyLogin()
1173
    {
1174
        $repository = $this->getRepository();
1175
1176
        $userService = $repository->getUserService();
1177
1178
        /* BEGIN: Use Case */
1179
        $this->createUserVersion1();
1180
1181
        // This call will fail with a "InvalidArgumentValue", because the given
1182
        // login is empty.
1183
        $userService->loadUserByCredentials('', 'secret');
1184
        /* END: Use Case */
1185
    }
1186
1187
    /**
1188
     * Test for the loadUserByLogin() method.
1189
     *
1190
     * @see \eZ\Publish\API\Repository\UserService::loadUserByLogin()
1191
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser
1192
     */
1193 View Code Duplication
    public function testLoadUserByLogin()
1194
    {
1195
        $repository = $this->getRepository();
1196
1197
        $userService = $repository->getUserService();
1198
1199
        /* BEGIN: Use Case */
1200
        $user = $this->createUserVersion1();
1201
1202
        // Load the newly created user
1203
        $userReloaded = $userService->loadUserByLogin('user');
1204
        /* END: Use Case */
1205
1206
        $this->assertPropertiesCorrect(
1207
            array(
1208
                'login' => $user->login,
1209
                'email' => $user->email,
1210
                'passwordHash' => $user->passwordHash,
1211
                'hashAlgorithm' => $user->hashAlgorithm,
1212
                'enabled' => $user->enabled,
1213
                'maxLogin' => $user->maxLogin,
1214
                'id' => $user->id,
1215
                'contentInfo' => $user->contentInfo,
1216
                'versionInfo' => $user->versionInfo,
1217
                'fields' => $user->fields,
1218
            ),
1219
            $userReloaded
1220
        );
1221
    }
1222
1223
    /**
1224
     * Test for the loadUserByLogin() method.
1225
     *
1226
     * @see \eZ\Publish\API\Repository\UserService::loadUserByLogin()
1227
     * @expectedException \eZ\Publish\API\Repository\Exceptions\NotFoundException
1228
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserByLogin
1229
     */
1230
    public function testLoadUserByLoginThrowsNotFoundExceptionForUnknownLogin()
1231
    {
1232
        $repository = $this->getRepository();
1233
1234
        $userService = $repository->getUserService();
1235
1236
        /* BEGIN: Use Case */
1237
        $this->createUserVersion1();
1238
1239
        // This call will fail with a "NotFoundException", because the given
1240
        // login/password combination does not exist.
1241
        $userService->loadUserByLogin('user42');
1242
        /* END: Use Case */
1243
    }
1244
1245
    /**
1246
     * Test for the loadUserByLogin() method.
1247
     *
1248
     * @see \eZ\Publish\API\Repository\UserService::loadUserByLogin()
1249
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserByLogin
1250
     */
1251 View Code Duplication
    public function testLoadUserByLoginWorksForLoginWithWrongCase()
1252
    {
1253
        $repository = $this->getRepository();
1254
1255
        $userService = $repository->getUserService();
1256
1257
        /* BEGIN: Use Case */
1258
        $user = $this->createUserVersion1();
1259
1260
        // Lookup by user login should ignore casing
1261
        $userReloaded = $userService->loadUserByLogin('USER');
1262
        /* END: Use Case */
1263
1264
        $this->assertPropertiesCorrect(
1265
            array(
1266
                'login' => $user->login,
1267
                'email' => $user->email,
1268
                'passwordHash' => $user->passwordHash,
1269
                'hashAlgorithm' => $user->hashAlgorithm,
1270
                'enabled' => $user->enabled,
1271
                'maxLogin' => $user->maxLogin,
1272
                'id' => $user->id,
1273
                'contentInfo' => $user->contentInfo,
1274
                'versionInfo' => $user->versionInfo,
1275
                'fields' => $user->fields,
1276
            ),
1277
            $userReloaded
1278
        );
1279
    }
1280
1281
    /**
1282
     * Test for the loadUsersByEmail() method.
1283
     *
1284
     * @see \eZ\Publish\API\Repository\UserService::loadUsersByEmail()
1285
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser
1286
     */
1287 View Code Duplication
    public function testLoadUserByEmail()
1288
    {
1289
        $repository = $this->getRepository();
1290
1291
        $userService = $repository->getUserService();
1292
1293
        /* BEGIN: Use Case */
1294
        $user = $this->createUserVersion1();
1295
1296
        // Load the newly created user
1297
        $usersReloaded = $userService->loadUsersByEmail('[email protected]');
1298
        /* END: Use Case */
1299
1300
        $this->assertEquals(array($user), $usersReloaded);
1301
    }
1302
1303
    /**
1304
     * Test for the loadUsersByEmail() method.
1305
     *
1306
     * @see \eZ\Publish\API\Repository\UserService::loadUsersByEmail()
1307
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserByEmail
1308
     */
1309 View Code Duplication
    public function testLoadUserByEmailReturnsEmptyInUnknownEmail()
1310
    {
1311
        $repository = $this->getRepository();
1312
1313
        $userService = $repository->getUserService();
1314
1315
        /* BEGIN: Use Case */
1316
        $this->createUserVersion1();
1317
1318
        // This call will return empty array, because the given
1319
        // login/password combination does not exist.
1320
        $emptyUserList = $userService->loadUsersByEmail('[email protected]');
1321
        /* END: Use Case */
1322
1323
        $this->assertEquals(array(), $emptyUserList);
1324
    }
1325
1326
    /**
1327
     * Test for the deleteUser() method.
1328
     *
1329
     * @see \eZ\Publish\API\Repository\UserService::deleteUser()
1330
     * @expectedException \eZ\Publish\API\Repository\Exceptions\NotFoundException
1331
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser
1332
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUser
1333
     */
1334 View Code Duplication
    public function testDeleteUser()
1335
    {
1336
        $repository = $this->getRepository();
1337
1338
        $userService = $repository->getUserService();
1339
1340
        /* BEGIN: Use Case */
1341
        $user = $this->createUserVersion1();
1342
1343
        // Delete the currently created user
1344
        $userService->deleteUser($user);
1345
        /* END: Use Case */
1346
1347
        // We use the NotFoundException here to verify that the user not exists
1348
        $userService->loadUser($user->id);
1349
    }
1350
1351
    /**
1352
     * Test for the newUserUpdateStruct() method.
1353
     *
1354
     * @see \eZ\Publish\API\Repository\UserService::newUserUpdateStruct()
1355
     */
1356
    public function testNewUserUpdateStruct()
1357
    {
1358
        $repository = $this->getRepository();
1359
1360
        /* BEGIN: Use Case */
1361
        $userService = $repository->getUserService();
1362
1363
        // Create a new update struct instance
1364
        $userUpdate = $userService->newUserUpdateStruct();
1365
        /* END: Use Case */
1366
1367
        $this->assertInstanceOf(
1368
            '\\eZ\\Publish\\API\\Repository\\Values\\User\\UserUpdateStruct',
1369
            $userUpdate
1370
        );
1371
    }
1372
1373
    /**
1374
     * Test for the updateUser() method.
1375
     *
1376
     * @return \eZ\Publish\API\Repository\Values\User\User
1377
     *
1378
     * @see \eZ\Publish\API\Repository\UserService::updateUser()
1379
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser
1380
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testNewUserUpdateStruct
1381
     * @depends eZ\Publish\API\Repository\Tests\ContentServiceTest::testUpdateContent
1382
     * @depends eZ\Publish\API\Repository\Tests\ContentServiceTest::testUpdateContentMetadata
1383
     */
1384
    public function testUpdateUser()
1385
    {
1386
        $repository = $this->getRepository();
1387
1388
        $userService = $repository->getUserService();
1389
1390
        /* BEGIN: Use Case */
1391
        $user = $this->createUserVersion1();
1392
1393
        // Create a new update struct instance
1394
        $userUpdate = $userService->newUserUpdateStruct();
1395
1396
        // Set new values for password and maxLogin
1397
        $userUpdate->password = 'my-new-password';
1398
        $userUpdate->maxLogin = 42;
1399
        $userUpdate->enabled = false;
1400
1401
        // Updated the user record.
1402
        $userVersion2 = $userService->updateUser($user, $userUpdate);
1403
        /* END: Use Case */
1404
1405
        $this->assertInstanceOf(
1406
            '\\eZ\\Publish\\API\\Repository\\Values\\User\\User',
1407
            $user
1408
        );
1409
1410
        return $userVersion2;
1411
    }
1412
1413
    /**
1414
     * Test for the updateUser() method.
1415
     *
1416
     * @param \eZ\Publish\API\Repository\Values\User\User $user
1417
     *
1418
     * @see \eZ\Publish\API\Repository\UserService::updateUser()
1419
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testUpdateUser
1420
     */
1421
    public function testUpdateUserUpdatesExpectedProperties(User $user)
1422
    {
1423
        $this->assertEquals(
1424
            array(
1425
                'login' => 'user',
1426
                'email' => '[email protected]',
1427
                'passwordHash' => $this->createHash(
1428
                    'user',
1429
                    'my-new-password',
1430
                    $user->hashAlgorithm
1431
                ),
1432
                'maxLogin' => 42,
1433
                'enabled' => false,
1434
            ),
1435
            array(
1436
                'login' => $user->login,
1437
                'email' => $user->email,
1438
                'passwordHash' => $user->passwordHash,
1439
                'maxLogin' => $user->maxLogin,
1440
                'enabled' => $user->enabled,
1441
            )
1442
        );
1443
    }
1444
1445
    /**
1446
     * Test for the updateUser() method.
1447
     *
1448
     * @param \eZ\Publish\API\Repository\Values\User\User $user
1449
     *
1450
     * @see \eZ\Publish\API\Repository\UserService::updateUser()
1451
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testUpdateUser
1452
     */
1453
    public function testUpdateUserReturnsPublishedVersion($user)
1454
    {
1455
        $this->assertEquals(
1456
            VersionInfo::STATUS_PUBLISHED,
1457
            $user->getVersionInfo()->status
1458
        );
1459
    }
1460
1461
    /**
1462
     * Test for the updateUser() method.
1463
     *
1464
     * @see \eZ\Publish\API\Repository\UserService::updateUser()
1465
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testUpdateUser
1466
     */
1467
    public function testUpdateUserWithContentMetadataUpdateStruct()
1468
    {
1469
        $repository = $this->getRepository();
1470
1471
        $userService = $repository->getUserService();
1472
1473
        /* BEGIN: Use Case */
1474
        $user = $this->createUserVersion1();
1475
1476
        // Get the ContentService implementation
1477
        $contentService = $repository->getContentService();
1478
1479
        // Create a metadata update struct and change the remote id.
1480
        $metadataUpdate = $contentService->newContentMetadataUpdateStruct();
1481
        $metadataUpdate->remoteId = '85e10037d1ac0a00aa75443ced483e08';
1482
1483
        // Create a new update struct instance
1484
        $userUpdate = $userService->newUserUpdateStruct();
1485
1486
        // Set the metadata update struct.
1487
        $userUpdate->contentMetadataUpdateStruct = $metadataUpdate;
1488
1489
        // Updated the user record.
1490
        $userVersion2 = $userService->updateUser($user, $userUpdate);
1491
1492
        // The contentInfo->remoteId will be changed now.
1493
        $remoteId = $userVersion2->contentInfo->remoteId;
1494
        /* END: Use Case */
1495
1496
        $this->assertEquals('85e10037d1ac0a00aa75443ced483e08', $remoteId);
1497
    }
1498
1499
    /**
1500
     * Test for the updateUser() method.
1501
     *
1502
     * @see \eZ\Publish\API\Repository\UserService::updateUser()
1503
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testUpdateUser
1504
     */
1505
    public function testUpdateUserWithContentUpdateStruct()
1506
    {
1507
        $repository = $this->getRepository();
1508
1509
        $userService = $repository->getUserService();
1510
1511
        /* BEGIN: Use Case */
1512
        $user = $this->createUserVersion1();
1513
1514
        // Get the ContentService implementation
1515
        $contentService = $repository->getContentService();
1516
1517
        // Create a content update struct and change the remote id.
1518
        $contentUpdate = $contentService->newContentUpdateStruct();
1519
        $contentUpdate->setField('first_name', 'Hello', 'eng-US');
1520
        $contentUpdate->setField('last_name', 'World', 'eng-US');
1521
1522
        // Create a new update struct instance
1523
        $userUpdate = $userService->newUserUpdateStruct();
1524
1525
        // Set the content update struct.
1526
        $userUpdate->contentUpdateStruct = $contentUpdate;
1527
1528
        // Updated the user record.
1529
        $userVersion2 = $userService->updateUser($user, $userUpdate);
1530
1531
        $name = sprintf(
1532
            '%s %s',
1533
            $userVersion2->getFieldValue('first_name'),
1534
            $userVersion2->getFieldValue('last_name')
1535
        );
1536
        /* END: Use Case */
1537
1538
        $this->assertEquals('Hello World', $name);
1539
    }
1540
1541
    /**
1542
     * Test for the updateUser() method.
1543
     *
1544
     * @see \eZ\Publish\API\Repository\UserService::updateUser()
1545
     * @expectedException \eZ\Publish\API\Repository\Exceptions\ContentFieldValidationException
1546
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testUpdateUser
1547
     */
1548 View Code Duplication
    public function testUpdateUserWhenMissingField()
1549
    {
1550
        $repository = $this->getRepository();
1551
1552
        $userService = $repository->getUserService();
1553
1554
        /* BEGIN: Use Case */
1555
        $user = $this->createUserVersion1();
1556
1557
        // Get the ContentService implementation
1558
        $contentService = $repository->getContentService();
1559
1560
        // Create a content update struct and change the remote id.
1561
        $contentUpdate = $contentService->newContentUpdateStruct();
1562
        $contentUpdate->setField('first_name', null, 'eng-US');
1563
1564
        // Create a new update struct instance
1565
        $userUpdate = $userService->newUserUpdateStruct();
1566
1567
        // Set the content update struct.
1568
        $userUpdate->contentUpdateStruct = $contentUpdate;
1569
1570
        // This call will fail with a "ContentFieldValidationException" because the
1571
        // mandatory field "first_name" is set to an empty value.
1572
        $userService->updateUser($user, $userUpdate);
1573
1574
        /* END: Use Case */
1575
    }
1576
1577
    /**
1578
     * Test for the updateUser() method.
1579
     *
1580
     * @see \eZ\Publish\API\Repository\UserService::updateUser()
1581
     * @expectedException \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException
1582
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testUpdateUser
1583
     */
1584 View Code Duplication
    public function testUpdateUserThrowsInvalidArgumentExceptionOnFieldTypeNotAccept()
1585
    {
1586
        $repository = $this->getRepository();
1587
1588
        $userService = $repository->getUserService();
1589
1590
        /* BEGIN: Use Case */
1591
        $user = $this->createUserVersion1();
1592
1593
        // Get the ContentService implementation
1594
        $contentService = $repository->getContentService();
1595
1596
        $contentUpdate = $contentService->newContentUpdateStruct();
1597
        // An object of stdClass is not valid for the field first_name
1598
        $contentUpdate->setField('first_name', new \stdClass(), 'eng-US');
1599
1600
        // Create a new update struct instance
1601
        $userUpdate = $userService->newUserUpdateStruct();
1602
1603
        // Set the content update struct.
1604
        $userUpdate->contentUpdateStruct = $contentUpdate;
1605
1606
        // This call will fail with a "InvalidArgumentException" because the
1607
        // the field "first_name" does not accept the given value.
1608
        $userService->updateUser($user, $userUpdate);
1609
1610
        /* END: Use Case */
1611
    }
1612
1613
    /**
1614
     * Test for the loadUserGroupsOfUser() method.
1615
     *
1616
     * @see \eZ\Publish\API\Repository\UserService::loadUserGroupsOfUser()
1617
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser
1618
     */
1619
    public function testLoadUserGroupsOfUser()
1620
    {
1621
        $repository = $this->getRepository();
1622
1623
        $userService = $repository->getUserService();
1624
1625
        /* BEGIN: Use Case */
1626
        $user = $this->createUserVersion1();
1627
1628
        // This array will contain the "Editors" user group name
1629
        $userGroupNames = array();
1630
        foreach ($userService->loadUserGroupsOfUser($user) as $userGroup) {
1631
            $userGroupNames[] = $userGroup->getFieldValue('name');
1632
        }
1633
        /* END: Use Case */
1634
1635
        $this->assertEquals(array('Editors'), $userGroupNames);
1636
    }
1637
1638
    /**
1639
     * Test for the loadUsersOfUserGroup() method.
1640
     *
1641
     * @see \eZ\Publish\API\Repository\UserService::loadUsersOfUserGroup()
1642
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser
1643
     */
1644
    public function testLoadUsersOfUserGroup()
1645
    {
1646
        $repository = $this->getRepository();
1647
        $userService = $repository->getUserService();
1648
1649
        $group = $userService->loadUserGroup($this->generateId('group', 13));
1650
1651
        /* BEGIN: Use Case */
1652
        $this->createUserVersion1();
1653
1654
        $this->refreshSearch($repository);
1655
1656
        // This array will contain the email of the newly created "Editor" user
1657
        $email = array();
1658
        foreach ($userService->loadUsersOfUserGroup($group) as $user) {
1659
            $email[] = $user->email;
1660
        }
1661
        /* END: Use Case */
1662
        $this->assertEquals(array('[email protected]'), $email);
1663
    }
1664
1665
    /**
1666
     * Test for the assignUserToUserGroup() method.
1667
     *
1668
     * @see \eZ\Publish\API\Repository\UserService::assignUserToUserGroup()
1669
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserGroupsOfUser
1670
     */
1671
    public function testAssignUserToUserGroup()
1672
    {
1673
        $repository = $this->getRepository();
1674
        $userService = $repository->getUserService();
1675
1676
        $administratorGroupId = $this->generateId('group', 12);
1677
        /* BEGIN: Use Case */
1678
        // $administratorGroupId is the ID of the "Administrator" group in an
1679
        // eZ Publish demo installation
1680
1681
        $user = $this->createUserVersion1();
1682
1683
        // Assign group to newly created user
1684
        $userService->assignUserToUserGroup(
1685
            $user,
1686
            $userService->loadUserGroup($administratorGroupId)
1687
        );
1688
1689
        // This array will contain "Editors" and "Administrator users"
1690
        $userGroupNames = array();
1691
        foreach ($userService->loadUserGroupsOfUser($user) as $userGroup) {
1692
            $userGroupNames[] = $userGroup->getFieldValue('name');
1693
        }
1694
        /* END: Use Case */
1695
1696
        sort($userGroupNames, SORT_STRING);
1697
1698
        $this->assertEquals(
1699
            array(
1700
                'Administrator users',
1701
                'Editors',
1702
            ),
1703
            $userGroupNames
1704
        );
1705
    }
1706
1707
    /**
1708
     * Test for the assignUserToUserGroup() method.
1709
     *
1710
     * @see \eZ\Publish\API\Repository\UserService::assignUserToUserGroup()
1711
     * @expectedException \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException
1712
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testAssignUserToUserGroup
1713
     */
1714 View Code Duplication
    public function testAssignUserToUserGroupThrowsInvalidArgumentException()
1715
    {
1716
        $repository = $this->getRepository();
1717
        $userService = $repository->getUserService();
1718
1719
        $editorsGroupId = $this->generateId('group', 13);
1720
        /* BEGIN: Use Case */
1721
        $user = $this->createUserVersion1();
1722
        // $editorsGroupId is the ID of the "Editors" group in an
1723
        // eZ Publish demo installation
1724
1725
        // This call will fail with an "InvalidArgumentException", because the
1726
        // user is already assigned to the "Editors" group
1727
        $userService->assignUserToUserGroup(
1728
            $user,
1729
            $userService->loadUserGroup($editorsGroupId)
1730
        );
1731
        /* END: Use Case */
1732
    }
1733
1734
    /**
1735
     * Test for the unAssignUssrFromUserGroup() method.
1736
     *
1737
     * @see \eZ\Publish\API\Repository\UserService::unAssignUssrFromUserGroup()
1738
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserGroupsOfUser
1739
     */
1740
    public function testUnAssignUserFromUserGroup()
1741
    {
1742
        $repository = $this->getRepository();
1743
        $userService = $repository->getUserService();
1744
1745
        $editorsGroupId = $this->generateId('group', 13);
1746
        $anonymousGroupId = $this->generateId('group', 42);
1747
1748
        /* BEGIN: Use Case */
1749
        // $anonymousGroupId is the ID of the "Anonymous Users" group in an eZ
1750
        // Publish demo installation
1751
1752
        $user = $this->createUserVersion1();
1753
1754
        // Assign group to newly created user
1755
        $userService->assignUserToUserGroup(
1756
            $user,
1757
            $userService->loadUserGroup($anonymousGroupId)
1758
        );
1759
1760
        // Unassign user from "Editors" group
1761
        $userService->unAssignUserFromUserGroup(
1762
            $user,
1763
            $userService->loadUserGroup($editorsGroupId)
1764
        );
1765
1766
        // This array will contain "Anonymous Users"
1767
        $userGroupNames = array();
1768
        foreach ($userService->loadUserGroupsOfUser($user) as $userGroup) {
1769
            $userGroupNames[] = $userGroup->getFieldValue('name');
1770
        }
1771
        /* END: Use Case */
1772
1773
        $this->assertEquals(array('Anonymous Users'), $userGroupNames);
1774
    }
1775
1776
    /**
1777
     * Test for the unAssignUserFromUserGroup() method.
1778
     *
1779
     * @see \eZ\Publish\API\Repository\UserService::unAssignUserFromUserGroup()
1780
     * @expectedException \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException
1781
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testUnAssignUserFromUserGroup
1782
     */
1783
    public function testUnAssignUserFromUserGroupThrowsInvalidArgumentException()
1784
    {
1785
        $repository = $this->getRepository();
1786
        $userService = $repository->getUserService();
1787
1788
        $administratorGroupId = $this->generateId('group', 12);
1789
        /* BEGIN: Use Case */
1790
        $user = $this->createUserVersion1();
1791
        // $administratorGroupId is the ID of the "Administrator" group in an
1792
        // eZ Publish demo installation
1793
1794
        // This call will fail with an "InvalidArgumentException", because the
1795
        // user is not assigned to the "Administrator" group
1796
        $userService->unAssignUserFromUserGroup(
1797
            $user,
1798
            $userService->loadUserGroup($administratorGroupId)
1799
        );
1800
        /* END: Use Case */
1801
    }
1802
1803
    /**
1804
     * Test for the unAssignUserFromUserGroup() method.
1805
     *
1806
     * @see \eZ\Publish\API\Repository\UserService::unAssignUserFromUserGroup()
1807
     * @expectedException \eZ\Publish\API\Repository\Exceptions\BadStateException
1808
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testUnAssignUserFromUserGroup
1809
     */
1810
    public function testUnAssignUserFromUserGroupThrowsBadStateArgumentException()
1811
    {
1812
        $repository = $this->getRepository();
1813
        $userService = $repository->getUserService();
1814
1815
        $editorsGroupId = $this->generateId('group', 13);
1816
        /* BEGIN: Use Case */
1817
        $user = $this->createUserVersion1();
1818
        // $administratorGroupId is the ID of the "Administrator" group in an
1819
        // eZ Publish demo installation
1820
1821
        // This call will fail with an "InvalidArgumentException", because the
1822
        // user is not assigned to the "Administrator" group
1823
        $userService->unAssignUserFromUserGroup(
1824
            $user,
1825
            $userService->loadUserGroup($editorsGroupId)
1826
        );
1827
        /* END: Use Case */
1828
    }
1829
1830
    /**
1831
     * Create a user group fixture in a variable named <b>$userGroup</b>,.
1832
     *
1833
     * @return \eZ\Publish\API\Repository\Values\User\UserGroup
1834
     */
1835
    private function createUserGroupVersion1()
1836
    {
1837
        $repository = $this->getRepository();
1838
1839
        $mainGroupId = $this->generateId('group', 4);
1840
        /* BEGIN: Inline */
1841
        // $mainGroupId is the ID of the main "Users" group
1842
1843
        $userService = $repository->getUserService();
1844
1845
        // Load main group
1846
        $parentUserGroup = $userService->loadUserGroup($mainGroupId);
1847
1848
        // Instantiate a new create struct
1849
        $userGroupCreate = $userService->newUserGroupCreateStruct('eng-US');
1850
        $userGroupCreate->setField('name', 'Example Group');
1851
1852
        // Create the new user group
1853
        $userGroup = $userService->createUserGroup(
1854
            $userGroupCreate,
1855
            $parentUserGroup
1856
        );
1857
        /* END: Inline */
1858
1859
        return $userGroup;
1860
    }
1861
1862 View Code Duplication
    private function createHash($login, $password, $type)
1863
    {
1864
        switch ($type) {
1865
            case 2:
1866
                /* PASSWORD_HASH_MD5_USER */
1867
                return md5("{$login}\n{$password}");
1868
1869
            case 3:
1870
                /* PASSWORD_HASH_MD5_SITE */
1871
                $site = null;
1872
1873
                return md5("{$login}\n{$password}\n{$site}");
1874
1875
            case 5:
1876
                /* PASSWORD_HASH_PLAINTEXT */
1877
                return $password;
1878
        }
1879
        /* PASSWORD_HASH_MD5_PASSWORD (1) */
1880
        return md5($password);
1881
    }
1882
}
1883