Completed
Push — bcrypt ( 3e60ca...240576 )
by André
35:29
created

testLoadUserByCredentialsThrowsNotFoundExceptionForUnknownLogin()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 28
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 28
rs 8.8571
cc 1
eloc 15
nc 1
nop 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
 * @version //autogentag//
10
 */
11
namespace eZ\Publish\API\Repository\Tests;
12
13
use eZ\Publish\API\Repository\Values\Content\VersionInfo;
14
use eZ\Publish\API\Repository\Values\User\User;
15
use eZ\Publish\API\Repository\Exceptions\NotFoundException;
16
use Exception;
17
18
/**
19
 * Test case for operations in the UserService using in memory storage.
20
 *
21
 * @see eZ\Publish\API\Repository\UserService
22
 * @group integration
23
 * @group user
24
 */
25
class UserServiceTest extends BaseTest
26
{
27
    /**
28
     * Test for the loadUserGroup() method.
29
     *
30
     * @see \eZ\Publish\API\Repository\UserService::loadUserGroup()
31
     */
32
    public function testLoadUserGroup()
33
    {
34
        $repository = $this->getRepository();
35
36
        $mainGroupId = $this->generateId('group', 4);
37
        /* BEGIN: Use Case */
38
        // $mainGroupId is the ID of the main "Users" group
39
40
        $userService = $repository->getUserService();
41
42
        $userGroup = $userService->loadUserGroup($mainGroupId);
43
        /* END: Use Case */
44
45
        $this->assertInstanceOf('\\eZ\\Publish\\API\\Repository\\Values\\User\\UserGroup', $userGroup);
46
    }
47
48
    /**
49
     * Test for the loadUserGroup() method.
50
     *
51
     * @see \eZ\Publish\API\Repository\UserService::loadUserGroup()
52
     * @expectedException \eZ\Publish\API\Repository\Exceptions\NotFoundException
53
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserGroup
54
     */
55
    public function testLoadUserGroupThrowsNotFoundException()
56
    {
57
        $repository = $this->getRepository();
58
59
        $nonExistingGroupId = $this->generateId('group', self::DB_INT_MAX);
60
        /* BEGIN: Use Case */
61
        $userService = $repository->getUserService();
62
63
        // This call will fail with a NotFoundException
64
        $userService->loadUserGroup($nonExistingGroupId);
65
        /* END: Use Case */
66
    }
67
68
    /**
69
     * Test for the loadSubUserGroups() method.
70
     *
71
     * @see \eZ\Publish\API\Repository\UserService::loadSubUserGroups()
72
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserGroup
73
     */
74
    public function testLoadSubUserGroups()
75
    {
76
        $repository = $this->getRepository();
77
78
        $mainGroupId = $this->generateId('group', 4);
79
        /* BEGIN: Use Case */
80
        // $mainGroupId is the ID of the main "Users" group
81
82
        $userService = $repository->getUserService();
83
84
        $userGroup = $userService->loadUserGroup($mainGroupId);
85
86
        $subUserGroups = $userService->loadSubUserGroups($userGroup);
87
        foreach ($subUserGroups as $subUserGroup) {
88
            // Do something with the $subUserGroup
89
            $this->assertInstanceOf('\\eZ\\Publish\\API\\Repository\\Values\\User\\UserGroup', $subUserGroup);
90
        }
91
        /* END: Use Case */
92
    }
93
94
    /**
95
     * Test for the newUserGroupCreateStruct() method.
96
     *
97
     * @return \eZ\Publish\API\Repository\Values\User\UserGroupCreateStruct
98
     *
99
     * @see \eZ\Publish\API\Repository\UserService::newUserGroupCreateStruct()
100
     * @depends eZ\Publish\API\Repository\Tests\ContentTypeServiceTest::testLoadContentTypeByIdentifier
101
     */
102
    public function testNewUserGroupCreateStruct()
103
    {
104
        $repository = $this->getRepository();
105
106
        /* BEGIN: Use Case */
107
        $userService = $repository->getUserService();
108
109
        $groupCreate = $userService->newUserGroupCreateStruct('eng-US');
110
        /* END: Use Case */
111
112
        $this->assertInstanceOf(
113
            '\\eZ\\Publish\\API\\Repository\\Values\\User\\UserGroupCreateStruct',
114
            $groupCreate
115
        );
116
117
        return $groupCreate;
118
    }
119
120
    /**
121
     * Test for the newUserGroupCreateStruct() method.
122
     *
123
     * @param \eZ\Publish\API\Repository\Values\User\UserGroupCreateStruct $groupCreate
124
     *
125
     * @see \eZ\Publish\API\Repository\UserService::newUserGroupCreateStruct()
126
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testNewUserGroupCreateStruct
127
     */
128
    public function testNewUserGroupCreateStructSetsMainLanguageCode($groupCreate)
129
    {
130
        $this->assertEquals('eng-US', $groupCreate->mainLanguageCode);
131
    }
132
133
    /**
134
     * Test for the newUserGroupCreateStruct() method.
135
     *
136
     * @param \eZ\Publish\API\Repository\Values\User\UserGroupCreateStruct $groupCreate
137
     *
138
     * @see \eZ\Publish\API\Repository\UserService::newUserGroupCreateStruct()
139
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testNewUserGroupCreateStruct
140
     */
141
    public function testNewUserGroupCreateStructSetsContentType($groupCreate)
142
    {
143
        $this->assertInstanceOf(
144
            '\\eZ\\Publish\\API\\Repository\\Values\\ContentType\\ContentType',
145
            $groupCreate->contentType
146
        );
147
    }
148
149
    /**
150
     * Test for the newUserGroupCreateStruct() method.
151
     *
152
     * @see \eZ\Publish\API\Repository\UserService::newUserGroupCreateStruct($mainLanguageCode, $contentType)
153
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testNewUserGroupCreateStruct
154
     * @depends eZ\Publish\API\Repository\Tests\ContentTypeServiceTest::testLoadContentTypeByIdentifier
155
     */
156 View Code Duplication
    public function testNewUserGroupCreateStructWithSecondParameter()
157
    {
158
        if ($this->isVersion4()) {
159
            $this->markTestSkipped('This test is only relevant for eZ Publish versions > 4');
160
        }
161
162
        $repository = $this->getRepository();
163
164
        /* BEGIN: Use Case */
165
        $contentTypeService = $repository->getContentTypeService();
166
        $userService = $repository->getUserService();
167
168
        // Load the default ContentType for user groups
169
        $groupType = $contentTypeService->loadContentTypeByIdentifier('user_group');
170
171
        // Instantiate a new group create struct
172
        $groupCreate = $userService->newUserGroupCreateStruct(
173
            'eng-US',
174
            $groupType
175
        );
176
        /* END: Use Case */
177
178
        $this->assertSame($groupType, $groupCreate->contentType);
179
    }
180
181
    /**
182
     * Test for the createUserGroup() method.
183
     *
184
     * @return \eZ\Publish\API\Repository\Values\User\UserGroup
185
     *
186
     * @see \eZ\Publish\API\Repository\UserService::createUserGroup()
187
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testNewUserGroupCreateStruct
188
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserGroup
189
     * @depends eZ\Publish\API\Repository\Tests\ContentServiceTest::testCreateContent
190
     */
191
    public function testCreateUserGroup()
192
    {
193
        /* BEGIN: Use Case */
194
        $userGroup = $this->createUserGroupVersion1();
195
        /* END: Use Case */
196
197
        $this->assertInstanceOf(
198
            '\\eZ\\Publish\\API\\Repository\\Values\\User\\UserGroup',
199
            $userGroup
200
        );
201
202
        $versionInfo = $userGroup->getVersionInfo();
203
204
        $this->assertEquals(VersionInfo::STATUS_PUBLISHED, $versionInfo->status);
205
        $this->assertEquals(1, $versionInfo->versionNo);
206
207
        return $userGroup;
208
    }
209
210
    /**
211
     * Test for the createUserGroup() method.
212
     *
213
     * @param \eZ\Publish\API\Repository\Values\User\UserGroup $userGroup
214
     *
215
     * @see \eZ\Publish\API\Repository\UserService::createUserGroup()
216
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUserGroup
217
     */
218
    public function testCreateUserGroupSetsExpectedProperties($userGroup)
219
    {
220
        $this->assertEquals(
221
            array(
222
                'parentId' => $this->generateId('group', 4),
223
                'subGroupCount' => 0,
224
            ),
225
            array(
226
                'parentId' => $userGroup->parentId,
227
                '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...
228
            )
229
        );
230
    }
231
232
    /**
233
     * Test for the createUserGroup() method.
234
     *
235
     * @see \eZ\Publish\API\Repository\UserService::createUserGroup()
236
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUserGroup
237
     */
238 View Code Duplication
    public function testCreateUserGroupIncrementsParentSubGroupCount()
239
    {
240
        $repository = $this->getRepository();
241
        $userService = $repository->getUserService();
242
        $mainGroupId = $this->generateId('group', 4);
243
244
        $parentUserGroup = $userService->loadUserGroup($mainGroupId);
245
        $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...
246
247
        /* BEGIN: Use Case */
248
        $this->createUserGroupVersion1();
249
250
        $this->refreshSearch($repository);
251
252
        // This should be one greater than before
253
        $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...
254
        /* END: Use Case */
255
256
        $this->assertEquals($parentGroupCount + 1, $subGroupCount);
257
    }
258
259
    /**
260
     * Test for the createUserGroup() method.
261
     *
262
     * @see \eZ\Publish\API\Repository\UserService::createUserGroup()
263
     * @expectedException \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException
264
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUserGroup
265
     */
266 View Code Duplication
    public function testCreateUserGroupThrowsInvalidArgumentException()
267
    {
268
        $repository = $this->getRepository();
269
270
        $mainGroupId = $this->generateId('group', 4);
271
        /* BEGIN: Use Case */
272
        // $mainGroupId is the ID of the main "Users" group
273
274
        $userService = $repository->getUserService();
275
276
        // Load main group
277
        $parentUserGroup = $userService->loadUserGroup($mainGroupId);
278
279
        // Instantiate a new create struct
280
        $userGroupCreate = $userService->newUserGroupCreateStruct('eng-US');
281
        $userGroupCreate->setField('name', 'Example Group');
282
        $userGroupCreate->remoteId = '5f7f0bdb3381d6a461d8c29ff53d908f';
283
284
        // This call will fail with an "InvalidArgumentException", because the
285
        // specified remoteId is already used for the "Members" user group.
286
        $userService->createUserGroup(
287
            $userGroupCreate,
288
            $parentUserGroup
289
        );
290
        /* END: Use Case */
291
    }
292
293
    /**
294
     * Test for the createUserGroup() method.
295
     *
296
     * @see \eZ\Publish\API\Repository\UserService::createUserGroup()
297
     * @expectedException \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException
298
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUserGroup
299
     */
300
    public function testCreateUserGroupThrowsInvalidArgumentExceptionFieldTypeNotAccept()
301
    {
302
        $repository = $this->getRepository();
303
304
        $mainGroupId = $this->generateId('group', 4);
305
        /* BEGIN: Use Case */
306
        // $mainGroupId is the ID of the main "Users" group
307
308
        $userService = $repository->getUserService();
309
310
        // Load main group
311
        $parentUserGroup = $userService->loadUserGroup($mainGroupId);
312
313
        // Instantiate a new create struct
314
        $userGroupCreate = $userService->newUserGroupCreateStruct('eng-US');
315
        $userGroupCreate->setField('name', new \stdClass());
316
317
        // This call will fail with an "InvalidArgumentException", because the
318
        // specified remoteId is already used for the "Members" user group.
319
        $userService->createUserGroup(
320
            $userGroupCreate,
321
            $parentUserGroup
322
        );
323
        /* END: Use Case */
324
    }
325
326
    /**
327
     * Test for the createUserGroup() method.
328
     *
329
     * @see \eZ\Publish\API\Repository\UserService::createUserGroup()
330
     * @expectedException \eZ\Publish\API\Repository\Exceptions\ContentValidationException
331
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUserGroup
332
     */
333
    public function testCreateUserGroupThrowsContentValidationException()
334
    {
335
        $repository = $this->getRepository();
336
337
        $mainGroupId = $this->generateId('group', 4);
338
        /* BEGIN: Use Case */
339
        // $mainGroupId is the ID of the main "Users" group
340
341
        $userService = $repository->getUserService();
342
343
        // Load main group
344
        $parentUserGroup = $userService->loadUserGroup($mainGroupId);
345
346
        // Instantiate a new create struct
347
        $userGroupCreate = $userService->newUserGroupCreateStruct('eng-US');
348
349
        // This call will fail with a "ContentValidationException", because the
350
        // only mandatory field "name" is not set.
351
        $userService->createUserGroup($userGroupCreate, $parentUserGroup);
352
        /* END: Use Case */
353
    }
354
355
    /**
356
     * Test for the createUserGroup() method.
357
     *
358
     * @return \eZ\Publish\API\Repository\Values\User\UserGroup
359
     *
360
     * @see \eZ\Publish\API\Repository\UserService::createUserGroup()
361
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testNewUserGroupCreateStruct
362
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserGroup
363
     * @depends eZ\Publish\API\Repository\Tests\ContentServiceTest::testCreateContent
364
     */
365
    public function testCreateUserGroupInTransactionWithRollback()
366
    {
367
        $repository = $this->getRepository();
368
369
        $mainGroupId = $this->generateId('group', 4);
370
        /* BEGIN: Use Case */
371
        // $mainGroupId is the ID of the main "Users" group
372
373
        $userService = $repository->getUserService();
374
375
        $repository->beginTransaction();
376
377
        try {
378
            // Load main group
379
            $parentUserGroup = $userService->loadUserGroup($mainGroupId);
380
381
            // Instantiate a new create struct
382
            $userGroupCreate = $userService->newUserGroupCreateStruct('eng-US');
383
            $userGroupCreate->setField('name', 'Example Group');
384
385
            // Create the new user group
386
            $createdUserGroupId = $userService->createUserGroup(
387
                $userGroupCreate,
388
                $parentUserGroup
389
            )->id;
390
        } catch (Exception $e) {
391
            // Cleanup hanging transaction on error
392
            $repository->rollback();
393
            throw $e;
394
        }
395
396
        $repository->rollback();
397
398
        try {
399
            // Throws exception since creation of user group was rolled back
400
            $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...
401
        } catch (NotFoundException $e) {
402
            return;
403
        }
404
        /* END: Use Case */
405
406
        $this->fail('User group object still exists after rollback.');
407
    }
408
409
    /**
410
     * Test for the deleteUserGroup() method.
411
     *
412
     * @see \eZ\Publish\API\Repository\UserService::deleteUserGroup()
413
     * @expectedException \eZ\Publish\API\Repository\Exceptions\NotFoundException
414
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUserGroup
415
     */
416
    public function testDeleteUserGroup()
417
    {
418
        $repository = $this->getRepository();
419
        $userService = $repository->getUserService();
420
421
        /* BEGIN: Use Case */
422
        $userGroup = $this->createUserGroupVersion1();
423
424
        // Delete the currently created user group again
425
        $userService->deleteUserGroup($userGroup);
426
        /* END: Use Case */
427
428
        // We use the NotFoundException here for verification
429
        $userService->loadUserGroup($userGroup->id);
430
    }
431
432
    /**
433
     * Test for the moveUserGroup() method.
434
     *
435
     * @see \eZ\Publish\API\Repository\UserService::moveUserGroup()
436
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUserGroup
437
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadSubUserGroups
438
     */
439
    public function testMoveUserGroup()
440
    {
441
        $repository = $this->getRepository();
442
        $userService = $repository->getUserService();
443
444
        $membersGroupId = $this->generateId('group', 13);
445
        /* BEGIN: Use Case */
446
        // $membersGroupId is the ID of the "Members" user group in an eZ
447
        // Publish demo installation
448
449
        $userGroup = $this->createUserGroupVersion1();
450
451
        // Load the new parent group
452
        $membersUserGroup = $userService->loadUserGroup($membersGroupId);
453
454
        // Move user group from "Users" to "Members"
455
        $userService->moveUserGroup($userGroup, $membersUserGroup);
456
457
        // Reload the user group to get an updated $parentId
458
        $userGroup = $userService->loadUserGroup($userGroup->id);
459
460
        $this->refreshSearch($repository);
461
462
        // The returned array will no contain $userGroup
463
        $subUserGroups = $userService->loadSubUserGroups(
464
            $membersUserGroup
465
        );
466
        /* END: Use Case */
467
468
        $subUserGroupIds = array_map(
469
            function ($content) {
470
                return $content->id;
471
            },
472
            $subUserGroups
473
        );
474
475
        $this->assertEquals($membersGroupId, $userGroup->parentId);
476
        $this->assertEquals(array($userGroup->id), $subUserGroupIds);
477
    }
478
479
    /**
480
     * Test for the moveUserGroup() method.
481
     *
482
     * @see \eZ\Publish\API\Repository\UserService::moveUserGroup()
483
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testMoveUserGroup
484
     */
485 View Code Duplication
    public function testMoveUserGroupIncrementsSubGroupCountOnNewParent()
486
    {
487
        $repository = $this->getRepository();
488
        $userService = $repository->getUserService();
489
490
        $membersGroupId = $this->generateId('group', 13);
491
        /* BEGIN: Use Case */
492
        // $membersGroupId is the ID of the "Members" user group in an eZ
493
        // Publish demo installation
494
495
        $userGroup = $this->createUserGroupVersion1();
496
497
        // Load the new parent group
498
        $membersUserGroup = $userService->loadUserGroup($membersGroupId);
499
500
        // Move user group from "Users" to "Members"
501
        $userService->moveUserGroup($userGroup, $membersUserGroup);
502
503
        $this->refreshSearch($repository);
504
505
        // Reload the user group to get an updated $subGroupCount
506
        $membersUserGroupUpdated = $userService->loadUserGroup($membersGroupId);
507
        /* END: Use Case */
508
509
        $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...
510
    }
511
512
    /**
513
     * Test for the moveUserGroup() method.
514
     *
515
     * @see \eZ\Publish\API\Repository\UserService::moveUserGroup()
516
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testMoveUserGroup
517
     */
518 View Code Duplication
    public function testMoveUserGroupDecrementsSubGroupCountOnOldParent()
519
    {
520
        $repository = $this->getRepository();
521
        $userService = $repository->getUserService();
522
523
        $membersGroupId = $this->generateId('group', 13);
524
        /* BEGIN: Use Case */
525
        // $membersGroupId is the ID of the "Members" user group in an eZ
526
        // Publish demo installation
527
528
        $userGroup = $this->createUserGroupVersion1();
529
530
        // Load the new parent group
531
        $membersUserGroup = $userService->loadUserGroup($membersGroupId);
532
533
        // Move user group from "Users" to "Members"
534
        $userService->moveUserGroup($userGroup, $membersUserGroup);
535
        /* END: Use Case */
536
537
        $mainUserGroup = $userService->loadUserGroup($this->generateId('group', 4));
538
539
        $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...
540
    }
541
542
    /**
543
     * Test for the newUserGroupUpdateStruct() method.
544
     *
545
     * @see \eZ\Publish\API\Repository\UserService::newUserGroupUpdateStruct()
546
     */
547
    public function testNewUserGroupUpdateStruct()
548
    {
549
        $repository = $this->getRepository();
550
551
        /* BEGIN: Use Case */
552
        $userService = $repository->getUserService();
553
554
        $groupUpdate = $userService->newUserGroupUpdateStruct();
555
        /* END: Use Case */
556
557
        $this->assertInstanceOf(
558
            '\\eZ\\Publish\\API\\Repository\\Values\\User\\UserGroupUpdateStruct',
559
            $groupUpdate
560
        );
561
    }
562
563
    /**
564
     * Test for the updateUserGroup() method.
565
     *
566
     * @see \eZ\Publish\API\Repository\UserService::updateUserGroup()
567
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUserGroup
568
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testNewUserGroupUpdateStruct
569
     */
570
    public function testUpdateUserGroup()
571
    {
572
        $repository = $this->getRepository();
573
        $userService = $repository->getUserService();
574
575
        /* BEGIN: Use Case */
576
        $userGroup = $this->createUserGroupVersion1();
577
578
        // Create a group update struct and change nothing
579
        $groupUpdate = $userService->newUserGroupUpdateStruct();
580
581
        // This update will do nothing
582
        $userGroup = $userService->updateUserGroup(
583
            $userGroup,
584
            $groupUpdate
585
        );
586
        /* END: Use Case */
587
588
        $this->assertInstanceOf(
589
            '\\eZ\\Publish\\API\\Repository\\Values\\User\\UserGroup',
590
            $userGroup
591
        );
592
593
        $this->assertEquals(1, $userGroup->getVersionInfo()->versionNo);
594
    }
595
596
    /**
597
     * Test for the updateUserGroup() method.
598
     *
599
     * @see \eZ\Publish\API\Repository\UserService::updateUserGroup()
600
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testUpdateUserGroup
601
     */
602 View Code Duplication
    public function testUpdateUserGroupWithSubContentUpdateStruct()
603
    {
604
        $repository = $this->getRepository();
605
        $userService = $repository->getUserService();
606
607
        /* BEGIN: Use Case */
608
        $userGroup = $this->createUserGroupVersion1();
609
610
        // Load the content service
611
        $contentService = $repository->getContentService();
612
613
        // Create a content update struct and update the group name
614
        $contentUpdate = $contentService->newContentUpdateStruct();
615
        $contentUpdate->setField('name', 'Sindelfingen', 'eng-US');
616
617
        // Create a group update struct and set content update struct
618
        $groupUpdate = $userService->newUserGroupUpdateStruct();
619
        $groupUpdate->contentUpdateStruct = $contentUpdate;
620
621
        // This will update the name and the increment the group version number
622
        $userGroup = $userService->updateUserGroup(
623
            $userGroup,
624
            $groupUpdate
625
        );
626
        /* END: Use Case */
627
628
        $this->assertEquals('Sindelfingen', $userGroup->getFieldValue('name', 'eng-US'));
629
630
        $versionInfo = $userGroup->getVersionInfo();
631
632
        $this->assertEquals(VersionInfo::STATUS_PUBLISHED, $versionInfo->status);
633
        $this->assertEquals(2, $versionInfo->versionNo);
634
    }
635
636
    /**
637
     * Test for the updateUserGroup() method.
638
     *
639
     * @see \eZ\Publish\API\Repository\UserService::updateUserGroup()
640
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testUpdateUserGroup
641
     */
642
    public function testUpdateUserGroupWithSubContentMetadataUpdateStruct()
643
    {
644
        $repository = $this->getRepository();
645
        $userService = $repository->getUserService();
646
647
        /* BEGIN: Use Case */
648
        $userGroup = $this->createUserGroupVersion1();
649
650
        // Load the content service
651
        $contentService = $repository->getContentService();
652
653
        // Create a metadata update struct and change the remoteId
654
        $metadataUpdate = $contentService->newContentMetadataUpdateStruct();
655
        $metadataUpdate->remoteId = '3c61299780663bafa3af2101e52125da';
656
657
        // Create a group update struct and set content update struct
658
        $groupUpdate = $userService->newUserGroupUpdateStruct();
659
        $groupUpdate->contentMetadataUpdateStruct = $metadataUpdate;
660
661
        // This will update the name and the increment the group version number
662
        $userGroup = $userService->updateUserGroup(
663
            $userGroup,
664
            $groupUpdate
665
        );
666
        /* END: Use Case */
667
668
        $this->assertEquals(
669
            '3c61299780663bafa3af2101e52125da',
670
            $userGroup->contentInfo->remoteId
671
        );
672
673
        $versionInfo = $userGroup->getVersionInfo();
674
675
        $this->assertEquals(VersionInfo::STATUS_PUBLISHED, $versionInfo->status);
676
        $this->assertEquals(1, $versionInfo->versionNo);
677
    }
678
679
    /**
680
     * Test for the updateUserGroup() method.
681
     *
682
     * @see \eZ\Publish\API\Repository\UserService::updateUserGroup()
683
     * @expectedException \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException
684
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testUpdateUserGroup
685
     */
686 View Code Duplication
    public function testUpdateUserGroupThrowsInvalidArgumentExceptionOnFieldTypeNotAccept()
687
    {
688
        $repository = $this->getRepository();
689
        $userService = $repository->getUserService();
690
691
        /* BEGIN: Use Case */
692
        $userGroup = $this->createUserGroupVersion1();
693
694
        // Load the content service
695
        $contentService = $repository->getContentService();
696
697
        // Create a content update struct and update the group name
698
        $contentUpdate = $contentService->newContentUpdateStruct();
699
        // An object of stdClass is not accepted as a value by the field "name"
700
        $contentUpdate->setField('name', new \stdClass(), 'eng-US');
701
702
        // Create a group update struct and set content update struct
703
        $groupUpdate = $userService->newUserGroupUpdateStruct();
704
        $groupUpdate->contentUpdateStruct = $contentUpdate;
705
706
        // This call will fail with an InvalidArgumentException, because the
707
        // field "name" does not accept the given value
708
        $userService->updateUserGroup($userGroup, $groupUpdate);
709
        /* END: Use Case */
710
    }
711
712
    /**
713
     * Test for the newUserCreateStruct() method.
714
     *
715
     * @see \eZ\Publish\API\Repository\UserService::newUserCreateStruct()
716
     */
717
    public function testNewUserCreateStruct()
718
    {
719
        $repository = $this->getRepository();
720
721
        /* BEGIN: Use Case */
722
        $userService = $repository->getUserService();
723
724
        $userCreate = $userService->newUserCreateStruct(
725
            'user',
726
            '[email protected]',
727
            'secret',
728
            'eng-US'
729
        );
730
        /* END: Use Case */
731
732
        $this->assertInstanceOf(
733
            '\\eZ\\Publish\\API\\Repository\\Values\\User\\UserCreateStruct',
734
            $userCreate
735
        );
736
737
        return $userCreate;
738
    }
739
740
    /**
741
     * Test for the newUserCreateStruct() method.
742
     *
743
     * @param \eZ\Publish\API\Repository\Values\User\UserCreateStruct $userCreate
744
     *
745
     * @see \eZ\Publish\API\Repository\UserService::newUserCreateStruct()
746
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testNewUserCreateStruct
747
     */
748 View Code Duplication
    public function testNewUserCreateStructSetsExpectedProperties($userCreate)
749
    {
750
        $this->assertEquals(
751
            array(
752
                'login' => 'user',
753
                'email' => '[email protected]',
754
                'password' => 'secret',
755
                'mainLanguageCode' => 'eng-US',
756
            ),
757
            array(
758
                'login' => $userCreate->login,
759
                'email' => $userCreate->email,
760
                'password' => $userCreate->password,
761
                'mainLanguageCode' => $userCreate->mainLanguageCode,
762
            )
763
        );
764
    }
765
766
    /**
767
     * Test for the newUserCreateStruct() method.
768
     *
769
     * @see \eZ\Publish\API\Repository\UserService::newUserCreateStruct($login, $email, $password, $mainLanguageCode, $contentType)
770
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testNewUserCreateStruct
771
     * @depends eZ\Publish\API\Repository\Tests\ContentTypeServiceTest::testLoadContentTypeByIdentifier
772
     */
773 View Code Duplication
    public function testNewUserCreateStructWithFifthParameter()
774
    {
775
        if ($this->isVersion4()) {
776
            $this->markTestSkipped('This test is only relevant for eZ Publish versions > 4');
777
        }
778
779
        $repository = $this->getRepository();
780
781
        /* BEGIN: Use Case */
782
        $contentTypeService = $repository->getContentTypeService();
783
        $userService = $repository->getUserService();
784
785
        $userType = $contentTypeService->loadContentTypeByIdentifier('user');
786
787
        $userCreate = $userService->newUserCreateStruct(
788
            'user',
789
            '[email protected]',
790
            'secret',
791
            'eng-US',
792
            $userType
793
        );
794
        /* END: Use Case */
795
796
        $this->assertSame($userType, $userCreate->contentType);
797
    }
798
799
    /**
800
     * Test for the createUser() method.
801
     *
802
     * @return \eZ\Publish\API\Repository\Values\User\User
803
     *
804
     * @see \eZ\Publish\API\Repository\UserService::createUser()
805
     * @d\epends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserGroup
806
     * @d\epends eZ\Publish\API\Repository\Tests\UserServiceTest::testNewUserCreateStruct
807
     * @d\epends eZ\Publish\API\Repository\Tests\ContentServiceTest::testCreateContent
808
     */
809
    public function testCreateUser()
810
    {
811
        /* BEGIN: Use Case */
812
        $user = $this->createUserVersion1();
813
        /* END: Use Case */
814
815
        $this->assertInstanceOf(
816
            '\\eZ\\Publish\\API\\Repository\\Values\\User\\User',
817
            $user
818
        );
819
820
        return $user;
821
    }
822
823
    /**
824
     * Test for the createUser() method.
825
     *
826
     * @param \eZ\Publish\API\Repository\Values\User\User $user
827
     *
828
     * @see \eZ\Publish\API\Repository\UserService::createUser()
829
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser
830
     */
831
    public function testCreateUserSetsExpectedProperties(User $user)
832
    {
833
        $this->assertEquals(
834
            array(
835
                'login' => 'user',
836
                'email' => '[email protected]',
837
                'mainLanguageCode' => 'eng-US',
838
            ),
839
            array(
840
                'login' => $user->login,
841
                'email' => $user->email,
842
                'mainLanguageCode' => $user->contentInfo->mainLanguageCode,
843
            )
844
        );
845
    }
846
847
    /**
848
     * Test for the createUser() method.
849
     *
850
     * @see \eZ\Publish\API\Repository\UserService::createUser()
851
     * @expectedException \eZ\Publish\API\Repository\Exceptions\ContentValidationException
852
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser
853
     */
854 View Code Duplication
    public function testCreateUserThrowsContentValidationExceptionForMissingField()
855
    {
856
        $repository = $this->getRepository();
857
858
        $editorsGroupId = $this->generateId('group', 13);
859
        /* BEGIN: Use Case */
860
        // $editorsGroupId is the ID of the "Editors" user group in an eZ
861
        // Publish demo installation
862
863
        $userService = $repository->getUserService();
864
865
        // Instantiate a create struct with mandatory properties
866
        $userCreate = $userService->newUserCreateStruct(
867
            'user',
868
            '[email protected]',
869
            'secret',
870
            'eng-US'
871
        );
872
873
        // Do not set the mandatory fields "first_name" and "last_name"
874
        //$userCreate->setField( 'first_name', 'Example' );
875
        //$userCreate->setField( 'last_name', 'User' );
876
877
        // Load parent group for the user
878
        $group = $userService->loadUserGroup($editorsGroupId);
879
880
        // This call will fail with a "ContentValidationException", because the
881
        // mandatory fields "first_name" and "last_name" are not set.
882
        $userService->createUser($userCreate, array($group));
883
        /* END: Use Case */
884
    }
885
886
    /**
887
     * Test for the createUser() method.
888
     *
889
     * @see \eZ\Publish\API\Repository\UserService::createUser()
890
     * @expectedException \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException
891
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser
892
     */
893 View Code Duplication
    public function testCreateUserThrowsInvalidArgumentExceptionOnFieldTypeNotAccept()
894
    {
895
        $repository = $this->getRepository();
896
897
        $editorsGroupId = $this->generateId('group', 13);
898
        /* BEGIN: Use Case */
899
        // $editorsGroupId is the ID of the "Editors" user group in an eZ
900
        // Publish demo installation
901
902
        $userService = $repository->getUserService();
903
904
        // Instantiate a create struct with mandatory properties
905
        $userCreate = $userService->newUserCreateStruct(
906
            'user',
907
            '[email protected]',
908
            'secret',
909
            'eng-US'
910
        );
911
912
        // An object of stdClass is not a valid value for the field first_name
913
        $userCreate->setField('first_name', new \stdClass());
914
        $userCreate->setField('last_name', 'User');
915
916
        // Load parent group for the user
917
        $group = $userService->loadUserGroup($editorsGroupId);
918
919
        // This call will fail with an "InvalidArgumentException", because the
920
        // value for the firled "first_name" is not accepted by the field type.
921
        $userService->createUser($userCreate, array($group));
922
        /* END: Use Case */
923
    }
924
925
    /**
926
     * Test for the createUser() method.
927
     *
928
     * @see \eZ\Publish\API\Repository\UserService::createUser()
929
     * @expectedException \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException
930
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser
931
     */
932 View Code Duplication
    public function testCreateUserThrowsInvalidArgumentException()
933
    {
934
        $repository = $this->getRepository();
935
936
        $editorsGroupId = $this->generateId('group', 13);
937
        /* BEGIN: Use Case */
938
        // $editorsGroupId is the ID of the "Editors" user group in an eZ
939
        // Publish demo installation
940
941
        $userService = $repository->getUserService();
942
943
        // Instantiate a create struct with mandatory properties
944
        $userCreate = $userService->newUserCreateStruct(
945
            // admin is an existing login
946
            'admin',
947
            '[email protected]',
948
            'secret',
949
            'eng-US'
950
        );
951
952
        $userCreate->setField('first_name', 'Example');
953
        $userCreate->setField('last_name', 'User');
954
955
        // Load parent group for the user
956
        $group = $userService->loadUserGroup($editorsGroupId);
957
958
        // This call will fail with a "InvalidArgumentException", because the
959
        // user with "admin" login already exists.
960
        $userService->createUser($userCreate, array($group));
961
        /* END: Use Case */
962
    }
963
964
    /**
965
     * Test for the createUser() method.
966
     *
967
     * @return \eZ\Publish\API\Repository\Values\User\User
968
     *
969
     * @see \eZ\Publish\API\Repository\UserService::createUser()
970
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserGroup
971
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testNewUserCreateStruct
972
     * @depends eZ\Publish\API\Repository\Tests\ContentServiceTest::testCreateContent
973
     */
974
    public function testCreateUserInTransactionWithRollback()
975
    {
976
        $repository = $this->getRepository();
977
        $userService = $repository->getUserService();
978
979
        /* BEGIN: Use Case */
980
        $repository->beginTransaction();
981
982
        try {
983
            $user = $this->createUserVersion1();
984
        } catch (Exception $e) {
985
            // Cleanup hanging transaction on error
986
            $repository->rollback();
987
            throw $e;
988
        }
989
990
        $repository->rollback();
991
992
        try {
993
            // Throws exception since creation of user was rolled back
994
            $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...
995
        } catch (NotFoundException $e) {
996
            return;
997
        }
998
        /* END: Use Case */
999
1000
        $this->fail('User object still exists after rollback.');
1001
    }
1002
1003
    /**
1004
     * Test for the loadUser() method.
1005
     *
1006
     * @see \eZ\Publish\API\Repository\UserService::loadUser()
1007
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser
1008
     */
1009
    public function testLoadUser()
1010
    {
1011
        $repository = $this->getRepository();
1012
1013
        $userService = $repository->getUserService();
1014
1015
        /* BEGIN: Use Case */
1016
        $user = $this->createUserVersion1();
1017
1018
        // Load the newly created user
1019
        $userReloaded = $userService->loadUser($user->id);
1020
        /* END: Use Case */
1021
1022
        $this->assertEquals($user, $userReloaded);
1023
    }
1024
1025
    /**
1026
     * Test for the loadUser() method.
1027
     *
1028
     * @see \eZ\Publish\API\Repository\UserService::loadUser()
1029
     * @expectedException \eZ\Publish\API\Repository\Exceptions\NotFoundException
1030
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUser
1031
     */
1032
    public function testLoadUserThrowsNotFoundException()
1033
    {
1034
        $repository = $this->getRepository();
1035
1036
        $nonExistingUserId = $this->generateId('user', self::DB_INT_MAX);
1037
        /* BEGIN: Use Case */
1038
        $userService = $repository->getUserService();
1039
1040
        // This call will fail with a "NotFoundException", because no user with
1041
        // an id equal to self::DB_INT_MAX should exist.
1042
        $userService->loadUser($nonExistingUserId);
1043
        /* END: Use Case */
1044
    }
1045
1046
    /**
1047
     * Test for the loadAnonymousUser() method.
1048
     *
1049
     * @see \eZ\Publish\API\Repository\UserService::loadAnonymousUser()
1050
     */
1051
    public function testLoadAnonymousUser()
1052
    {
1053
        $repository = $this->getRepository();
1054
1055
        $anonymousUserId = $this->generateId('user', 10);
1056
        /* BEGIN: Use Case */
1057
        // $anonymousUserId is the ID of the "Anonymous" user in a eZ
1058
        // Publish demo installation.
1059
        $userService = $repository->getUserService();
1060
1061
        // Load default anonymous user available in each eZ Publish installation
1062
        $anonymousUser = $userService->loadUser($anonymousUserId);
1063
        /* END: Use Case */
1064
1065
        $this->assertInstanceOf(
1066
            '\\eZ\\Publish\\API\\Repository\\Values\\User\\User',
1067
            $anonymousUser
1068
        );
1069
1070
        $this->assertEquals('anonymous', $anonymousUser->login);
1071
    }
1072
1073
    /**
1074
     * Test for the loadUserByCredentials() method.
1075
     *
1076
     * @see \eZ\Publish\API\Repository\UserService::loadUserByCredentials()
1077
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser
1078
     */
1079
    public function testLoadUserByCredentials()
1080
    {
1081
        $repository = $this->getRepository();
1082
1083
        $userService = $repository->getUserService();
1084
1085
        /* BEGIN: Use Case */
1086
        $user = $this->createUserVersion1();
1087
1088
        // Load the newly created user
1089
        $userReloaded = $userService->loadUserByCredentials('user', 'secret');
1090
        /* END: Use Case */
1091
1092
        $this->assertEquals($user, $userReloaded);
1093
    }
1094
1095
    /**
1096
     * Test for the loadUserByCredentials() method.
1097
     *
1098
     * @see \eZ\Publish\API\Repository\UserService::loadUserByCredentials()
1099
     * @expectedException \eZ\Publish\API\Repository\Exceptions\NotFoundException
1100
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserByCredentials
1101
     */
1102
    public function testLoadUserByCredentialsThrowsNotFoundExceptionForUnknownPassword()
1103
    {
1104
        $repository = $this->getRepository();
1105
1106
        $userService = $repository->getUserService();
1107
1108
        /* BEGIN: Use Case */
1109
        $this->createUserVersion1();
1110
1111
        // This call will fail with a "NotFoundException", because the given
1112
        // login/password combination does not exist.
1113
        $userService->loadUserByCredentials('user', 'SeCrEt');
1114
        /* END: Use Case */
1115
    }
1116
1117
    /**
1118
     * Test for the loadUserByCredentials() method.
1119
     *
1120
     * @see \eZ\Publish\API\Repository\UserService::loadUserByCredentials()
1121
     * @expectedException \eZ\Publish\API\Repository\Exceptions\NotFoundException
1122
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserByCredentials
1123
     */
1124
    public function testLoadUserByCredentialsThrowsNotFoundExceptionForUnknownPasswordEmtpy()
1125
    {
1126
        $repository = $this->getRepository();
1127
1128
        $userService = $repository->getUserService();
1129
1130
        /* BEGIN: Use Case */
1131
        $this->createUserVersion1();
1132
1133
        // This call will fail with a "NotFoundException", because the given
1134
        // login/password combination does not exist.
1135
        $userService->loadUserByCredentials('user', '');
1136
        /* END: Use Case */
1137
    }
1138
1139
    /**
1140
     * Test for the loadUserByCredentials() method.
1141
     *
1142
     * @see \eZ\Publish\API\Repository\UserService::loadUserByCredentials()
1143
     * @expectedException \eZ\Publish\API\Repository\Exceptions\NotFoundException
1144
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserByCredentials
1145
     */
1146
    public function testLoadUserByCredentialsThrowsNotFoundExceptionForUnknownLogin()
1147
    {
1148
        $repository = $this->getRepository();
1149
1150
        $userService = $repository->getUserService();
1151
1152
        /* BEGIN: Use Case */
1153
        $this->createUserVersion1();
1154
1155
        // This call will fail with a "NotFoundException", because the given
1156
        // login/password combination does not exist.
1157
        $user = $userService->loadUserByCredentials('üser', 'secret');
1158
        /* END: Use Case */
1159
1160
        $setupFactory = $this->getSetupFactory();
1161
        $setupFactoryReflection = new \ReflectionObject($setupFactory);
1162
        $repositoryMethod = $setupFactoryReflection->getMethod('getDatabaseHandler');
1163
        $repositoryMethod->setAccessible(true);
1164
        /** @var \eZ\Publish\Core\Persistence\Doctrine\ConnectionHandler $db */
1165
        $db =  $repositoryMethod->invoke($setupFactory);
1166
1167
        $this->fail(
1168
            "Found user when there should be none, loaded 'üser' and got: " . $user->login . ' ' . $user->getUserId() .
1169
            "\n LC_*:" . LC_ALL . ' ' . LC_COLLATE . ' ' . LC_CTYPE . ' ' . LC_MONETARY . ' ' . LC_NUMERIC . ' ' . LC_TIME .
1170
            "\n ini:" . ini_get('default_charset') . ' ' . ini_get('mbstring.internal_encoding') .
1171
            "\n db:" . $db->getName() . var_dump($db->getConnection()->query("SELECT SCHEMA_NAME 'testdb', default_character_set_name 'charset', DEFAULT_COLLATION_NAME 'collation' FROM information_schema.SCHEMATA;")->fetchAll())
0 ignored issues
show
Security Debugging Code introduced by
var_dump($db->getConnect...HEMATA;')->fetchAll()); looks like debug code. Are you sure you do not want to remove it? This might expose sensitive data.
Loading history...
1172
        );
1173
    }
1174
1175
    /**
1176
     * Test for the loadUserByCredentials() method.
1177
     *
1178
     * @see \eZ\Publish\API\Repository\UserService::loadUserByCredentials()
1179
     * @expectedException \eZ\Publish\Core\Base\Exceptions\InvalidArgumentValue
1180
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserByCredentials
1181
     */
1182
    public function testLoadUserByCredentialsThrowsInvalidArgumentValueForEmptyLogin()
1183
    {
1184
        $repository = $this->getRepository();
1185
1186
        $userService = $repository->getUserService();
1187
1188
        /* BEGIN: Use Case */
1189
        $this->createUserVersion1();
1190
1191
        // This call will fail with a "InvalidArgumentValue", because the given
1192
        // login is empty.
1193
        $userService->loadUserByCredentials('', 'secret');
1194
        /* END: Use Case */
1195
    }
1196
1197
    /**
1198
     * Test for the loadUserByLogin() method.
1199
     *
1200
     * @see \eZ\Publish\API\Repository\UserService::loadUserByLogin()
1201
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser
1202
     */
1203 View Code Duplication
    public function testLoadUserByLogin()
1204
    {
1205
        $repository = $this->getRepository();
1206
1207
        $userService = $repository->getUserService();
1208
1209
        /* BEGIN: Use Case */
1210
        $user = $this->createUserVersion1();
1211
1212
        // Load the newly created user
1213
        $userReloaded = $userService->loadUserByLogin('user');
1214
        /* END: Use Case */
1215
1216
        $this->assertPropertiesCorrect(
1217
            array(
1218
                'login' => $user->login,
1219
                'email' => $user->email,
1220
                'passwordHash' => $user->passwordHash,
1221
                'hashAlgorithm' => $user->hashAlgorithm,
1222
                'enabled' => $user->enabled,
1223
                'maxLogin' => $user->maxLogin,
1224
                'id' => $user->id,
1225
                'contentInfo' => $user->contentInfo,
1226
                'versionInfo' => $user->versionInfo,
1227
                'fields' => $user->fields,
1228
            ),
1229
            $userReloaded
1230
        );
1231
    }
1232
1233
    /**
1234
     * Test for the loadUserByLogin() method.
1235
     *
1236
     * @see \eZ\Publish\API\Repository\UserService::loadUserByLogin()
1237
     * @expectedException \eZ\Publish\API\Repository\Exceptions\NotFoundException
1238
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserByLogin
1239
     */
1240
    public function testLoadUserByLoginThrowsNotFoundExceptionForUnknownLogin()
1241
    {
1242
        $repository = $this->getRepository();
1243
1244
        $userService = $repository->getUserService();
1245
1246
        /* BEGIN: Use Case */
1247
        $this->createUserVersion1();
1248
1249
        // This call will fail with a "NotFoundException", because the given
1250
        // login/password combination does not exist.
1251
        $userService->loadUserByLogin('user42');
1252
        /* END: Use Case */
1253
    }
1254
1255
    /**
1256
     * Test for the loadUserByLogin() method.
1257
     *
1258
     * @see \eZ\Publish\API\Repository\UserService::loadUserByLogin()
1259
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserByLogin
1260
     */
1261 View Code Duplication
    public function testLoadUserByLoginWorksForLoginWithWrongCase()
1262
    {
1263
        $repository = $this->getRepository();
1264
1265
        $userService = $repository->getUserService();
1266
1267
        /* BEGIN: Use Case */
1268
        $user = $this->createUserVersion1();
1269
1270
        // Lookup by user login should ignore casing
1271
        $userReloaded = $userService->loadUserByLogin('USER');
1272
        /* END: Use Case */
1273
1274
        $this->assertPropertiesCorrect(
1275
            array(
1276
                'login' => $user->login,
1277
                'email' => $user->email,
1278
                'passwordHash' => $user->passwordHash,
1279
                'hashAlgorithm' => $user->hashAlgorithm,
1280
                'enabled' => $user->enabled,
1281
                'maxLogin' => $user->maxLogin,
1282
                'id' => $user->id,
1283
                'contentInfo' => $user->contentInfo,
1284
                'versionInfo' => $user->versionInfo,
1285
                'fields' => $user->fields,
1286
            ),
1287
            $userReloaded
1288
        );
1289
    }
1290
1291
    /**
1292
     * Test for the loadUsersByEmail() method.
1293
     *
1294
     * @see \eZ\Publish\API\Repository\UserService::loadUsersByEmail()
1295
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser
1296
     */
1297 View Code Duplication
    public function testLoadUserByEmail()
1298
    {
1299
        $repository = $this->getRepository();
1300
1301
        $userService = $repository->getUserService();
1302
1303
        /* BEGIN: Use Case */
1304
        $user = $this->createUserVersion1();
1305
1306
        // Load the newly created user
1307
        $usersReloaded = $userService->loadUsersByEmail('[email protected]');
1308
        /* END: Use Case */
1309
1310
        $this->assertEquals(array($user), $usersReloaded);
1311
    }
1312
1313
    /**
1314
     * Test for the loadUsersByEmail() method.
1315
     *
1316
     * @see \eZ\Publish\API\Repository\UserService::loadUsersByEmail()
1317
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserByEmail
1318
     */
1319 View Code Duplication
    public function testLoadUserByEmailReturnsEmptyInUnknownEmail()
1320
    {
1321
        $repository = $this->getRepository();
1322
1323
        $userService = $repository->getUserService();
1324
1325
        /* BEGIN: Use Case */
1326
        $this->createUserVersion1();
1327
1328
        // This call will return empty array, because the given
1329
        // login/password combination does not exist.
1330
        $emptyUserList = $userService->loadUsersByEmail('[email protected]');
1331
        /* END: Use Case */
1332
1333
        $this->assertEquals(array(), $emptyUserList);
1334
    }
1335
1336
    /**
1337
     * Test for the deleteUser() method.
1338
     *
1339
     * @see \eZ\Publish\API\Repository\UserService::deleteUser()
1340
     * @expectedException \eZ\Publish\API\Repository\Exceptions\NotFoundException
1341
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser
1342
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUser
1343
     */
1344 View Code Duplication
    public function testDeleteUser()
1345
    {
1346
        $repository = $this->getRepository();
1347
1348
        $userService = $repository->getUserService();
1349
1350
        /* BEGIN: Use Case */
1351
        $user = $this->createUserVersion1();
1352
1353
        // Delete the currently created user
1354
        $userService->deleteUser($user);
1355
        /* END: Use Case */
1356
1357
        // We use the NotFoundException here to verify that the user not exists
1358
        $userService->loadUser($user->id);
1359
    }
1360
1361
    /**
1362
     * Test for the newUserUpdateStruct() method.
1363
     *
1364
     * @see \eZ\Publish\API\Repository\UserService::newUserUpdateStruct()
1365
     */
1366
    public function testNewUserUpdateStruct()
1367
    {
1368
        $repository = $this->getRepository();
1369
1370
        /* BEGIN: Use Case */
1371
        $userService = $repository->getUserService();
1372
1373
        // Create a new update struct instance
1374
        $userUpdate = $userService->newUserUpdateStruct();
1375
        /* END: Use Case */
1376
1377
        $this->assertInstanceOf(
1378
            '\\eZ\\Publish\\API\\Repository\\Values\\User\\UserUpdateStruct',
1379
            $userUpdate
1380
        );
1381
    }
1382
1383
    /**
1384
     * Test for the updateUser() method.
1385
     *
1386
     * @return \eZ\Publish\API\Repository\Values\User\User
1387
     *
1388
     * @see \eZ\Publish\API\Repository\UserService::updateUser()
1389
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser
1390
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testNewUserUpdateStruct
1391
     * @depends eZ\Publish\API\Repository\Tests\ContentServiceTest::testUpdateContent
1392
     * @depends eZ\Publish\API\Repository\Tests\ContentServiceTest::testUpdateContentMetadata
1393
     */
1394
    public function testUpdateUser()
1395
    {
1396
        $repository = $this->getRepository();
1397
1398
        $userService = $repository->getUserService();
1399
1400
        /* BEGIN: Use Case */
1401
        $user = $this->createUserVersion1();
1402
1403
        // Create a new update struct instance
1404
        $userUpdate = $userService->newUserUpdateStruct();
1405
1406
        // Set new values for password and maxLogin
1407
        $userUpdate->password = 'my-new-password';
1408
        $userUpdate->maxLogin = 42;
1409
        $userUpdate->enabled = false;
1410
1411
        // Updated the user record.
1412
        $userVersion2 = $userService->updateUser($user, $userUpdate);
1413
        /* END: Use Case */
1414
1415
        $this->assertInstanceOf(
1416
            '\\eZ\\Publish\\API\\Repository\\Values\\User\\User',
1417
            $user
1418
        );
1419
1420
        return $userVersion2;
1421
    }
1422
1423
    /**
1424
     * Test for the updateUser() method.
1425
     *
1426
     * @param \eZ\Publish\API\Repository\Values\User\User $user
1427
     *
1428
     * @see \eZ\Publish\API\Repository\UserService::updateUser()
1429
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testUpdateUser
1430
     */
1431 View Code Duplication
    public function testUpdateUserUpdatesExpectedProperties(User $user)
1432
    {
1433
        $this->assertEquals(
1434
            array(
1435
                'login' => 'user',
1436
                'email' => '[email protected]',
1437
                'maxLogin' => 42,
1438
                'enabled' => false,
1439
            ),
1440
            array(
1441
                'login' => $user->login,
1442
                'email' => $user->email,
1443
                'maxLogin' => $user->maxLogin,
1444
                'enabled' => $user->enabled,
1445
            )
1446
        );
1447
    }
1448
1449
    /**
1450
     * Test for the updateUser() method.
1451
     *
1452
     * @param \eZ\Publish\API\Repository\Values\User\User $user
1453
     *
1454
     * @see \eZ\Publish\API\Repository\UserService::updateUser()
1455
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testUpdateUser
1456
     */
1457
    public function testUpdateUserReturnsPublishedVersion($user)
1458
    {
1459
        $this->assertEquals(
1460
            VersionInfo::STATUS_PUBLISHED,
1461
            $user->getVersionInfo()->status
1462
        );
1463
    }
1464
1465
    /**
1466
     * Test for the updateUser() method.
1467
     *
1468
     * @see \eZ\Publish\API\Repository\UserService::updateUser()
1469
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testUpdateUser
1470
     */
1471
    public function testUpdateUserWithContentMetadataUpdateStruct()
1472
    {
1473
        $repository = $this->getRepository();
1474
1475
        $userService = $repository->getUserService();
1476
1477
        /* BEGIN: Use Case */
1478
        $user = $this->createUserVersion1();
1479
1480
        // Get the ContentService implementation
1481
        $contentService = $repository->getContentService();
1482
1483
        // Create a metadata update struct and change the remote id.
1484
        $metadataUpdate = $contentService->newContentMetadataUpdateStruct();
1485
        $metadataUpdate->remoteId = '85e10037d1ac0a00aa75443ced483e08';
1486
1487
        // Create a new update struct instance
1488
        $userUpdate = $userService->newUserUpdateStruct();
1489
1490
        // Set the metadata update struct.
1491
        $userUpdate->contentMetadataUpdateStruct = $metadataUpdate;
1492
1493
        // Updated the user record.
1494
        $userVersion2 = $userService->updateUser($user, $userUpdate);
1495
1496
        // The contentInfo->remoteId will be changed now.
1497
        $remoteId = $userVersion2->contentInfo->remoteId;
1498
        /* END: Use Case */
1499
1500
        $this->assertEquals('85e10037d1ac0a00aa75443ced483e08', $remoteId);
1501
    }
1502
1503
    /**
1504
     * Test for the updateUser() method.
1505
     *
1506
     * @see \eZ\Publish\API\Repository\UserService::updateUser()
1507
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testUpdateUser
1508
     */
1509
    public function testUpdateUserWithContentUpdateStruct()
1510
    {
1511
        $repository = $this->getRepository();
1512
1513
        $userService = $repository->getUserService();
1514
1515
        /* BEGIN: Use Case */
1516
        $user = $this->createUserVersion1();
1517
1518
        // Get the ContentService implementation
1519
        $contentService = $repository->getContentService();
1520
1521
        // Create a content update struct and change the remote id.
1522
        $contentUpdate = $contentService->newContentUpdateStruct();
1523
        $contentUpdate->setField('first_name', 'Hello', 'eng-US');
1524
        $contentUpdate->setField('last_name', 'World', 'eng-US');
1525
1526
        // Create a new update struct instance
1527
        $userUpdate = $userService->newUserUpdateStruct();
1528
1529
        // Set the content update struct.
1530
        $userUpdate->contentUpdateStruct = $contentUpdate;
1531
1532
        // Updated the user record.
1533
        $userVersion2 = $userService->updateUser($user, $userUpdate);
1534
1535
        $name = sprintf(
1536
            '%s %s',
1537
            $userVersion2->getFieldValue('first_name'),
1538
            $userVersion2->getFieldValue('last_name')
1539
        );
1540
        /* END: Use Case */
1541
1542
        $this->assertEquals('Hello World', $name);
1543
    }
1544
1545
    /**
1546
     * Test for the updateUser() method.
1547
     *
1548
     * @see \eZ\Publish\API\Repository\UserService::updateUser()
1549
     * @expectedException \eZ\Publish\API\Repository\Exceptions\ContentValidationException
1550
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testUpdateUser
1551
     */
1552 View Code Duplication
    public function testUpdateUserThrowsContentValidationException()
1553
    {
1554
        $repository = $this->getRepository();
1555
1556
        $userService = $repository->getUserService();
1557
1558
        /* BEGIN: Use Case */
1559
        $user = $this->createUserVersion1();
1560
1561
        // Get the ContentService implementation
1562
        $contentService = $repository->getContentService();
1563
1564
        // Create a content update struct and change the remote id.
1565
        $contentUpdate = $contentService->newContentUpdateStruct();
1566
        $contentUpdate->setField('first_name', null, 'eng-US');
1567
1568
        // Create a new update struct instance
1569
        $userUpdate = $userService->newUserUpdateStruct();
1570
1571
        // Set the content update struct.
1572
        $userUpdate->contentUpdateStruct = $contentUpdate;
1573
1574
        // This call will fail with a "ContentValidationException" because the
1575
        // mandatory field "first_name" is set to an empty value.
1576
        $userService->updateUser($user, $userUpdate);
1577
1578
        /* END: Use Case */
1579
    }
1580
1581
    /**
1582
     * Test for the updateUser() method.
1583
     *
1584
     * @see \eZ\Publish\API\Repository\UserService::updateUser()
1585
     * @expectedException \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException
1586
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testUpdateUser
1587
     */
1588 View Code Duplication
    public function testUpdateUserThrowsInvalidArgumentExceptionOnFieldTypeNotAccept()
1589
    {
1590
        $repository = $this->getRepository();
1591
1592
        $userService = $repository->getUserService();
1593
1594
        /* BEGIN: Use Case */
1595
        $user = $this->createUserVersion1();
1596
1597
        // Get the ContentService implementation
1598
        $contentService = $repository->getContentService();
1599
1600
        $contentUpdate = $contentService->newContentUpdateStruct();
1601
        // An object of stdClass is not valid for the field first_name
1602
        $contentUpdate->setField('first_name', new \stdClass(), 'eng-US');
1603
1604
        // Create a new update struct instance
1605
        $userUpdate = $userService->newUserUpdateStruct();
1606
1607
        // Set the content update struct.
1608
        $userUpdate->contentUpdateStruct = $contentUpdate;
1609
1610
        // This call will fail with a "InvalidArgumentException" because the
1611
        // the field "first_name" does not accept the given value.
1612
        $userService->updateUser($user, $userUpdate);
1613
1614
        /* END: Use Case */
1615
    }
1616
1617
    /**
1618
     * Test for the loadUserGroupsOfUser() method.
1619
     *
1620
     * @see \eZ\Publish\API\Repository\UserService::loadUserGroupsOfUser()
1621
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser
1622
     */
1623
    public function testLoadUserGroupsOfUser()
1624
    {
1625
        $repository = $this->getRepository();
1626
1627
        $userService = $repository->getUserService();
1628
1629
        /* BEGIN: Use Case */
1630
        $user = $this->createUserVersion1();
1631
1632
        // This array will contain the "Editors" user group name
1633
        $userGroupNames = array();
1634
        foreach ($userService->loadUserGroupsOfUser($user) as $userGroup) {
1635
            $userGroupNames[] = $userGroup->getFieldValue('name');
1636
        }
1637
        /* END: Use Case */
1638
1639
        $this->assertEquals(array('Editors'), $userGroupNames);
1640
    }
1641
1642
    /**
1643
     * Test for the loadUsersOfUserGroup() method.
1644
     *
1645
     * @see \eZ\Publish\API\Repository\UserService::loadUsersOfUserGroup()
1646
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser
1647
     */
1648
    public function testLoadUsersOfUserGroup()
1649
    {
1650
        $repository = $this->getRepository();
1651
        $userService = $repository->getUserService();
1652
1653
        $group = $userService->loadUserGroup($this->generateId('group', 13));
1654
1655
        /* BEGIN: Use Case */
1656
        $this->createUserVersion1();
1657
1658
        $this->refreshSearch($repository);
1659
1660
        // This array will contain the email of the newly created "Editor" user
1661
        $email = array();
1662
        foreach ($userService->loadUsersOfUserGroup($group) as $user) {
1663
            $email[] = $user->email;
1664
        }
1665
        /* END: Use Case */
1666
        $this->assertEquals(array('[email protected]'), $email);
1667
    }
1668
1669
    /**
1670
     * Test for the assignUserToUserGroup() method.
1671
     *
1672
     * @see \eZ\Publish\API\Repository\UserService::assignUserToUserGroup()
1673
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserGroupsOfUser
1674
     */
1675
    public function testAssignUserToUserGroup()
1676
    {
1677
        $repository = $this->getRepository();
1678
        $userService = $repository->getUserService();
1679
1680
        $administratorGroupId = $this->generateId('group', 12);
1681
        /* BEGIN: Use Case */
1682
        // $administratorGroupId is the ID of the "Administrator" group in an
1683
        // eZ Publish demo installation
1684
1685
        $user = $this->createUserVersion1();
1686
1687
        // Assign group to newly created user
1688
        $userService->assignUserToUserGroup(
1689
            $user,
1690
            $userService->loadUserGroup($administratorGroupId)
1691
        );
1692
1693
        // This array will contain "Editors" and "Administrator users"
1694
        $userGroupNames = array();
1695
        foreach ($userService->loadUserGroupsOfUser($user) as $userGroup) {
1696
            $userGroupNames[] = $userGroup->getFieldValue('name');
1697
        }
1698
        /* END: Use Case */
1699
1700
        sort($userGroupNames, SORT_STRING);
1701
1702
        $this->assertEquals(
1703
            array(
1704
                'Administrator users',
1705
                'Editors',
1706
            ),
1707
            $userGroupNames
1708
        );
1709
    }
1710
1711
    /**
1712
     * Test for the assignUserToUserGroup() method.
1713
     *
1714
     * @see \eZ\Publish\API\Repository\UserService::assignUserToUserGroup()
1715
     * @expectedException \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException
1716
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testAssignUserToUserGroup
1717
     */
1718 View Code Duplication
    public function testAssignUserToUserGroupThrowsInvalidArgumentException()
1719
    {
1720
        $repository = $this->getRepository();
1721
        $userService = $repository->getUserService();
1722
1723
        $editorsGroupId = $this->generateId('group', 13);
1724
        /* BEGIN: Use Case */
1725
        $user = $this->createUserVersion1();
1726
        // $editorsGroupId is the ID of the "Editors" group in an
1727
        // eZ Publish demo installation
1728
1729
        // This call will fail with an "InvalidArgumentException", because the
1730
        // user is already assigned to the "Editors" group
1731
        $userService->assignUserToUserGroup(
1732
            $user,
1733
            $userService->loadUserGroup($editorsGroupId)
1734
        );
1735
        /* END: Use Case */
1736
    }
1737
1738
    /**
1739
     * Test for the unAssignUssrFromUserGroup() method.
1740
     *
1741
     * @see \eZ\Publish\API\Repository\UserService::unAssignUssrFromUserGroup()
1742
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserGroupsOfUser
1743
     */
1744
    public function testUnAssignUserFromUserGroup()
1745
    {
1746
        $repository = $this->getRepository();
1747
        $userService = $repository->getUserService();
1748
1749
        $editorsGroupId = $this->generateId('group', 13);
1750
        $anonymousGroupId = $this->generateId('group', 42);
1751
1752
        /* BEGIN: Use Case */
1753
        // $anonymousGroupId is the ID of the "Anonymous Users" group in an eZ
1754
        // Publish demo installation
1755
1756
        $user = $this->createUserVersion1();
1757
1758
        // Assign group to newly created user
1759
        $userService->assignUserToUserGroup(
1760
            $user,
1761
            $userService->loadUserGroup($anonymousGroupId)
1762
        );
1763
1764
        // Unassign user from "Editors" group
1765
        $userService->unAssignUserFromUserGroup(
1766
            $user,
1767
            $userService->loadUserGroup($editorsGroupId)
1768
        );
1769
1770
        // This array will contain "Anonymous Users"
1771
        $userGroupNames = array();
1772
        foreach ($userService->loadUserGroupsOfUser($user) as $userGroup) {
1773
            $userGroupNames[] = $userGroup->getFieldValue('name');
1774
        }
1775
        /* END: Use Case */
1776
1777
        $this->assertEquals(array('Anonymous Users'), $userGroupNames);
1778
    }
1779
1780
    /**
1781
     * Test for the unAssignUserFromUserGroup() method.
1782
     *
1783
     * @see \eZ\Publish\API\Repository\UserService::unAssignUserFromUserGroup()
1784
     * @expectedException \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException
1785
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testUnAssignUserFromUserGroup
1786
     */
1787
    public function testUnAssignUserFromUserGroupThrowsInvalidArgumentException()
1788
    {
1789
        $repository = $this->getRepository();
1790
        $userService = $repository->getUserService();
1791
1792
        $administratorGroupId = $this->generateId('group', 12);
1793
        /* BEGIN: Use Case */
1794
        $user = $this->createUserVersion1();
1795
        // $administratorGroupId is the ID of the "Administrator" group in an
1796
        // eZ Publish demo installation
1797
1798
        // This call will fail with an "InvalidArgumentException", because the
1799
        // user is not assigned to the "Administrator" group
1800
        $userService->unAssignUserFromUserGroup(
1801
            $user,
1802
            $userService->loadUserGroup($administratorGroupId)
1803
        );
1804
        /* END: Use Case */
1805
    }
1806
1807
    /**
1808
     * Test for the unAssignUserFromUserGroup() method.
1809
     *
1810
     * @see \eZ\Publish\API\Repository\UserService::unAssignUserFromUserGroup()
1811
     * @expectedException \eZ\Publish\API\Repository\Exceptions\BadStateException
1812
     * @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testUnAssignUserFromUserGroup
1813
     */
1814
    public function testUnAssignUserFromUserGroupThrowsBadStateArgumentException()
1815
    {
1816
        $repository = $this->getRepository();
1817
        $userService = $repository->getUserService();
1818
1819
        $editorsGroupId = $this->generateId('group', 13);
1820
        /* BEGIN: Use Case */
1821
        $user = $this->createUserVersion1();
1822
        // $administratorGroupId is the ID of the "Administrator" group in an
1823
        // eZ Publish demo installation
1824
1825
        // This call will fail with an "InvalidArgumentException", because the
1826
        // user is not assigned to the "Administrator" group
1827
        $userService->unAssignUserFromUserGroup(
1828
            $user,
1829
            $userService->loadUserGroup($editorsGroupId)
1830
        );
1831
        /* END: Use Case */
1832
    }
1833
1834
    /**
1835
     * Create a user group fixture in a variable named <b>$userGroup</b>,.
1836
     *
1837
     * @return \eZ\Publish\API\Repository\Values\User\UserGroup
1838
     */
1839
    private function createUserGroupVersion1()
1840
    {
1841
        $repository = $this->getRepository();
1842
1843
        $mainGroupId = $this->generateId('group', 4);
1844
        /* BEGIN: Inline */
1845
        // $mainGroupId is the ID of the main "Users" group
1846
1847
        $userService = $repository->getUserService();
1848
1849
        // Load main group
1850
        $parentUserGroup = $userService->loadUserGroup($mainGroupId);
1851
1852
        // Instantiate a new create struct
1853
        $userGroupCreate = $userService->newUserGroupCreateStruct('eng-US');
1854
        $userGroupCreate->setField('name', 'Example Group');
1855
1856
        // Create the new user group
1857
        $userGroup = $userService->createUserGroup(
1858
            $userGroupCreate,
1859
            $parentUserGroup
1860
        );
1861
        /* END: Inline */
1862
1863
        return $userGroup;
1864
    }
1865
1866
    private function createHash($login, $password, $type)
1867
    {
1868
        switch ($type) {
1869
            case 2:
1870
                /* PASSWORD_HASH_MD5_USER */
1871
                return md5("{$login}\n{$password}");
1872
1873
            case 3:
1874
                /* PASSWORD_HASH_MD5_SITE */
1875
                $site = null;
1876
1877
                return md5("{$login}\n{$password}\n{$site}");
1878
1879
            case 5:
1880
                /* PASSWORD_HASH_PLAINTEXT */
1881
                return $password;
1882
        }
1883
        /* PASSWORD_HASH_MD5_PASSWORD (1) */
1884
        return md5($password);
1885
    }
1886
}
1887