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\Exceptions\NotFoundException; |
12
|
|
|
use eZ\Publish\API\Repository\Values\Content\ContentInfo; |
13
|
|
|
use eZ\Publish\API\Repository\Values\Content\VersionInfo as APIVersionInfo; |
14
|
|
|
use eZ\Publish\API\Repository\Values\User\UserGroupUpdateStruct; |
15
|
|
|
use eZ\Publish\API\Repository\Values\User\UserUpdateStruct; |
16
|
|
|
use eZ\Publish\API\Repository\Values\User\User; |
17
|
|
|
use eZ\Publish\Core\Repository\Values\Content\Content; |
18
|
|
|
use eZ\Publish\Core\Repository\Values\Content\VersionInfo; |
19
|
|
|
use eZ\Publish\Core\Repository\Values\User\UserGroup; |
20
|
|
|
use Exception; |
21
|
|
|
|
22
|
|
|
/** |
23
|
|
|
* Test case for operations in the UserService using in memory storage. |
24
|
|
|
* |
25
|
|
|
* @see eZ\Publish\API\Repository\UserService |
26
|
|
|
* @group integration |
27
|
|
|
* @group user |
28
|
|
|
*/ |
29
|
|
|
class UserServiceTest extends BaseTest |
30
|
|
|
{ |
31
|
|
|
/** |
32
|
|
|
* Test for the loadUserGroup() method. |
33
|
|
|
* |
34
|
|
|
* @see \eZ\Publish\API\Repository\UserService::loadUserGroup() |
35
|
|
|
*/ |
36
|
|
|
public function testLoadUserGroup() |
37
|
|
|
{ |
38
|
|
|
$repository = $this->getRepository(); |
39
|
|
|
|
40
|
|
|
$mainGroupId = $this->generateId('group', 4); |
41
|
|
|
/* BEGIN: Use Case */ |
42
|
|
|
// $mainGroupId is the ID of the main "Users" group |
43
|
|
|
|
44
|
|
|
$userService = $repository->getUserService(); |
45
|
|
|
|
46
|
|
|
$userGroup = $userService->loadUserGroup($mainGroupId); |
47
|
|
|
/* END: Use Case */ |
48
|
|
|
|
49
|
|
|
$this->assertInstanceOf('\\eZ\\Publish\\API\\Repository\\Values\\User\\UserGroup', $userGroup); |
50
|
|
|
} |
51
|
|
|
|
52
|
|
|
/** |
53
|
|
|
* Test for the loadUserGroup() method. |
54
|
|
|
* |
55
|
|
|
* @see \eZ\Publish\API\Repository\UserService::loadUserGroup() |
56
|
|
|
* @expectedException \eZ\Publish\API\Repository\Exceptions\NotFoundException |
57
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserGroup |
58
|
|
|
*/ |
59
|
|
|
public function testLoadUserGroupThrowsNotFoundException() |
60
|
|
|
{ |
61
|
|
|
$repository = $this->getRepository(); |
62
|
|
|
|
63
|
|
|
$nonExistingGroupId = $this->generateId('group', self::DB_INT_MAX); |
64
|
|
|
/* BEGIN: Use Case */ |
65
|
|
|
$userService = $repository->getUserService(); |
66
|
|
|
|
67
|
|
|
// This call will fail with a NotFoundException |
68
|
|
|
$userService->loadUserGroup($nonExistingGroupId); |
69
|
|
|
/* END: Use Case */ |
70
|
|
|
} |
71
|
|
|
|
72
|
|
|
/** |
73
|
|
|
* Test for the loadSubUserGroups() method. |
74
|
|
|
* |
75
|
|
|
* @see \eZ\Publish\API\Repository\UserService::loadSubUserGroups() |
76
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserGroup |
77
|
|
|
*/ |
78
|
|
|
public function testLoadSubUserGroups() |
79
|
|
|
{ |
80
|
|
|
$repository = $this->getRepository(); |
81
|
|
|
|
82
|
|
|
$mainGroupId = $this->generateId('group', 4); |
83
|
|
|
/* BEGIN: Use Case */ |
84
|
|
|
// $mainGroupId is the ID of the main "Users" group |
85
|
|
|
|
86
|
|
|
$userService = $repository->getUserService(); |
87
|
|
|
|
88
|
|
|
$userGroup = $userService->loadUserGroup($mainGroupId); |
89
|
|
|
|
90
|
|
|
$subUserGroups = $userService->loadSubUserGroups($userGroup); |
91
|
|
|
foreach ($subUserGroups as $subUserGroup) { |
92
|
|
|
// Do something with the $subUserGroup |
93
|
|
|
$this->assertInstanceOf('\\eZ\\Publish\\API\\Repository\\Values\\User\\UserGroup', $subUserGroup); |
94
|
|
|
} |
95
|
|
|
/* END: Use Case */ |
96
|
|
|
} |
97
|
|
|
|
98
|
|
|
/** |
99
|
|
|
* Test loading sub groups throwing NotFoundException. |
100
|
|
|
* |
101
|
|
|
* @covers \eZ\Publish\API\Repository\UserService::loadSubUserGroups |
102
|
|
|
* @expectedException \eZ\Publish\API\Repository\Exceptions\NotFoundException |
103
|
|
|
*/ |
104
|
|
View Code Duplication |
public function testLoadSubUserGroupsThrowsNotFoundException() |
105
|
|
|
{ |
106
|
|
|
$repository = $this->getRepository(); |
107
|
|
|
$userService = $repository->getUserService(); |
108
|
|
|
|
109
|
|
|
$parentGroup = new UserGroup( |
110
|
|
|
[ |
111
|
|
|
'content' => new Content( |
112
|
|
|
[ |
113
|
|
|
'versionInfo' => new VersionInfo( |
114
|
|
|
[ |
115
|
|
|
'contentInfo' => new ContentInfo( |
116
|
|
|
['id' => 123456] |
117
|
|
|
), |
118
|
|
|
] |
119
|
|
|
), |
120
|
|
|
'internalFields' => [], |
121
|
|
|
] |
122
|
|
|
), |
123
|
|
|
] |
124
|
|
|
); |
125
|
|
|
$userService->loadSubUserGroups($parentGroup); |
126
|
|
|
} |
127
|
|
|
|
128
|
|
|
/** |
129
|
|
|
* Test for the newUserGroupCreateStruct() method. |
130
|
|
|
* |
131
|
|
|
* @return \eZ\Publish\API\Repository\Values\User\UserGroupCreateStruct |
132
|
|
|
* |
133
|
|
|
* @see \eZ\Publish\API\Repository\UserService::newUserGroupCreateStruct() |
134
|
|
|
* @depends eZ\Publish\API\Repository\Tests\ContentTypeServiceTest::testLoadContentTypeByIdentifier |
135
|
|
|
*/ |
136
|
|
|
public function testNewUserGroupCreateStruct() |
137
|
|
|
{ |
138
|
|
|
$repository = $this->getRepository(); |
139
|
|
|
|
140
|
|
|
/* BEGIN: Use Case */ |
141
|
|
|
$userService = $repository->getUserService(); |
142
|
|
|
|
143
|
|
|
$groupCreate = $userService->newUserGroupCreateStruct('eng-US'); |
144
|
|
|
/* END: Use Case */ |
145
|
|
|
|
146
|
|
|
$this->assertInstanceOf( |
147
|
|
|
'\\eZ\\Publish\\API\\Repository\\Values\\User\\UserGroupCreateStruct', |
148
|
|
|
$groupCreate |
149
|
|
|
); |
150
|
|
|
|
151
|
|
|
return $groupCreate; |
152
|
|
|
} |
153
|
|
|
|
154
|
|
|
/** |
155
|
|
|
* Test for the newUserGroupCreateStruct() method. |
156
|
|
|
* |
157
|
|
|
* @param \eZ\Publish\API\Repository\Values\User\UserGroupCreateStruct $groupCreate |
158
|
|
|
* |
159
|
|
|
* @see \eZ\Publish\API\Repository\UserService::newUserGroupCreateStruct() |
160
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testNewUserGroupCreateStruct |
161
|
|
|
*/ |
162
|
|
|
public function testNewUserGroupCreateStructSetsMainLanguageCode($groupCreate) |
163
|
|
|
{ |
164
|
|
|
$this->assertEquals('eng-US', $groupCreate->mainLanguageCode); |
165
|
|
|
} |
166
|
|
|
|
167
|
|
|
/** |
168
|
|
|
* Test for the newUserGroupCreateStruct() method. |
169
|
|
|
* |
170
|
|
|
* @param \eZ\Publish\API\Repository\Values\User\UserGroupCreateStruct $groupCreate |
171
|
|
|
* |
172
|
|
|
* @see \eZ\Publish\API\Repository\UserService::newUserGroupCreateStruct() |
173
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testNewUserGroupCreateStruct |
174
|
|
|
*/ |
175
|
|
|
public function testNewUserGroupCreateStructSetsContentType($groupCreate) |
176
|
|
|
{ |
177
|
|
|
$this->assertInstanceOf( |
178
|
|
|
'\\eZ\\Publish\\API\\Repository\\Values\\ContentType\\ContentType', |
179
|
|
|
$groupCreate->contentType |
180
|
|
|
); |
181
|
|
|
} |
182
|
|
|
|
183
|
|
|
/** |
184
|
|
|
* Test for the newUserGroupCreateStruct() method. |
185
|
|
|
* |
186
|
|
|
* @see \eZ\Publish\API\Repository\UserService::newUserGroupCreateStruct($mainLanguageCode, $contentType) |
187
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testNewUserGroupCreateStruct |
188
|
|
|
* @depends eZ\Publish\API\Repository\Tests\ContentTypeServiceTest::testLoadContentTypeByIdentifier |
189
|
|
|
*/ |
190
|
|
View Code Duplication |
public function testNewUserGroupCreateStructWithSecondParameter() |
191
|
|
|
{ |
192
|
|
|
if ($this->isVersion4()) { |
193
|
|
|
$this->markTestSkipped('This test is only relevant for eZ Publish versions > 4'); |
194
|
|
|
} |
195
|
|
|
|
196
|
|
|
$repository = $this->getRepository(); |
197
|
|
|
|
198
|
|
|
/* BEGIN: Use Case */ |
199
|
|
|
$contentTypeService = $repository->getContentTypeService(); |
200
|
|
|
$userService = $repository->getUserService(); |
201
|
|
|
|
202
|
|
|
// Load the default ContentType for user groups |
203
|
|
|
$groupType = $contentTypeService->loadContentTypeByIdentifier('user_group'); |
204
|
|
|
|
205
|
|
|
// Instantiate a new group create struct |
206
|
|
|
$groupCreate = $userService->newUserGroupCreateStruct( |
207
|
|
|
'eng-US', |
208
|
|
|
$groupType |
209
|
|
|
); |
210
|
|
|
/* END: Use Case */ |
211
|
|
|
|
212
|
|
|
$this->assertSame($groupType, $groupCreate->contentType); |
213
|
|
|
} |
214
|
|
|
|
215
|
|
|
/** |
216
|
|
|
* Test for the createUserGroup() method. |
217
|
|
|
* |
218
|
|
|
* @return \eZ\Publish\API\Repository\Values\User\UserGroup |
219
|
|
|
* |
220
|
|
|
* @see \eZ\Publish\API\Repository\UserService::createUserGroup() |
221
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testNewUserGroupCreateStruct |
222
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserGroup |
223
|
|
|
* @depends eZ\Publish\API\Repository\Tests\ContentServiceTest::testCreateContent |
224
|
|
|
*/ |
225
|
|
|
public function testCreateUserGroup() |
226
|
|
|
{ |
227
|
|
|
/* BEGIN: Use Case */ |
228
|
|
|
$userGroup = $this->createUserGroupVersion1(); |
229
|
|
|
/* END: Use Case */ |
230
|
|
|
|
231
|
|
|
$this->assertInstanceOf( |
232
|
|
|
'\\eZ\\Publish\\API\\Repository\\Values\\User\\UserGroup', |
233
|
|
|
$userGroup |
234
|
|
|
); |
235
|
|
|
|
236
|
|
|
$versionInfo = $userGroup->getVersionInfo(); |
237
|
|
|
|
238
|
|
|
$this->assertEquals(APIVersionInfo::STATUS_PUBLISHED, $versionInfo->status); |
239
|
|
|
$this->assertEquals(1, $versionInfo->versionNo); |
240
|
|
|
|
241
|
|
|
return $userGroup; |
242
|
|
|
} |
243
|
|
|
|
244
|
|
|
/** |
245
|
|
|
* Test for the createUserGroup() method. |
246
|
|
|
* |
247
|
|
|
* @param \eZ\Publish\API\Repository\Values\User\UserGroup $userGroup |
248
|
|
|
* |
249
|
|
|
* @see \eZ\Publish\API\Repository\UserService::createUserGroup() |
250
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUserGroup |
251
|
|
|
*/ |
252
|
|
|
public function testCreateUserGroupSetsExpectedProperties($userGroup) |
253
|
|
|
{ |
254
|
|
|
$this->assertEquals( |
255
|
|
|
array( |
256
|
|
|
'parentId' => $this->generateId('group', 4), |
257
|
|
|
'subGroupCount' => 0, |
258
|
|
|
), |
259
|
|
|
array( |
260
|
|
|
'parentId' => $userGroup->parentId, |
261
|
|
|
'subGroupCount' => $userGroup->subGroupCount, |
|
|
|
|
262
|
|
|
) |
263
|
|
|
); |
264
|
|
|
} |
265
|
|
|
|
266
|
|
|
/** |
267
|
|
|
* Test for the createUserGroup() method. |
268
|
|
|
* |
269
|
|
|
* @see \eZ\Publish\API\Repository\UserService::createUserGroup() |
270
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUserGroup |
271
|
|
|
*/ |
272
|
|
View Code Duplication |
public function testCreateUserGroupIncrementsParentSubGroupCount() |
273
|
|
|
{ |
274
|
|
|
$repository = $this->getRepository(); |
275
|
|
|
$userService = $repository->getUserService(); |
276
|
|
|
$mainGroupId = $this->generateId('group', 4); |
277
|
|
|
|
278
|
|
|
$parentUserGroup = $userService->loadUserGroup($mainGroupId); |
279
|
|
|
$parentGroupCount = $parentUserGroup->subGroupCount; |
|
|
|
|
280
|
|
|
|
281
|
|
|
/* BEGIN: Use Case */ |
282
|
|
|
$this->createUserGroupVersion1(); |
283
|
|
|
|
284
|
|
|
$this->refreshSearch($repository); |
285
|
|
|
|
286
|
|
|
// This should be one greater than before |
287
|
|
|
$subGroupCount = $userService->loadUserGroup($mainGroupId)->subGroupCount; |
|
|
|
|
288
|
|
|
/* END: Use Case */ |
289
|
|
|
|
290
|
|
|
$this->assertEquals($parentGroupCount + 1, $subGroupCount); |
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
|
|
View Code Duplication |
public function testCreateUserGroupThrowsInvalidArgumentException() |
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', 'Example Group'); |
316
|
|
|
$userGroupCreate->remoteId = '5f7f0bdb3381d6a461d8c29ff53d908f'; |
317
|
|
|
|
318
|
|
|
// This call will fail with an "InvalidArgumentException", because the |
319
|
|
|
// specified remoteId is already used for the "Members" user group. |
320
|
|
|
$userService->createUserGroup( |
321
|
|
|
$userGroupCreate, |
322
|
|
|
$parentUserGroup |
323
|
|
|
); |
324
|
|
|
/* END: Use Case */ |
325
|
|
|
} |
326
|
|
|
|
327
|
|
|
/** |
328
|
|
|
* Test for the createUserGroup() method. |
329
|
|
|
* |
330
|
|
|
* @see \eZ\Publish\API\Repository\UserService::createUserGroup() |
331
|
|
|
* @expectedException \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException |
332
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUserGroup |
333
|
|
|
*/ |
334
|
|
|
public function testCreateUserGroupThrowsInvalidArgumentExceptionFieldTypeNotAccept() |
335
|
|
|
{ |
336
|
|
|
$repository = $this->getRepository(); |
337
|
|
|
|
338
|
|
|
$mainGroupId = $this->generateId('group', 4); |
339
|
|
|
/* BEGIN: Use Case */ |
340
|
|
|
// $mainGroupId is the ID of the main "Users" group |
341
|
|
|
|
342
|
|
|
$userService = $repository->getUserService(); |
343
|
|
|
|
344
|
|
|
// Load main group |
345
|
|
|
$parentUserGroup = $userService->loadUserGroup($mainGroupId); |
346
|
|
|
|
347
|
|
|
// Instantiate a new create struct |
348
|
|
|
$userGroupCreate = $userService->newUserGroupCreateStruct('eng-US'); |
349
|
|
|
$userGroupCreate->setField('name', new \stdClass()); |
350
|
|
|
|
351
|
|
|
// This call will fail with an "InvalidArgumentException", because the |
352
|
|
|
// specified remoteId is already used for the "Members" user group. |
353
|
|
|
$userService->createUserGroup( |
354
|
|
|
$userGroupCreate, |
355
|
|
|
$parentUserGroup |
356
|
|
|
); |
357
|
|
|
/* END: Use Case */ |
358
|
|
|
} |
359
|
|
|
|
360
|
|
|
/** |
361
|
|
|
* Test for the createUserGroup() method. |
362
|
|
|
* |
363
|
|
|
* @see \eZ\Publish\API\Repository\UserService::createUserGroup() |
364
|
|
|
* @expectedException \eZ\Publish\API\Repository\Exceptions\ContentFieldValidationException |
365
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUserGroup |
366
|
|
|
*/ |
367
|
|
|
public function testCreateUserGroupWhenMissingField() |
368
|
|
|
{ |
369
|
|
|
$repository = $this->getRepository(); |
370
|
|
|
|
371
|
|
|
$mainGroupId = $this->generateId('group', 4); |
372
|
|
|
/* BEGIN: Use Case */ |
373
|
|
|
// $mainGroupId is the ID of the main "Users" group |
374
|
|
|
|
375
|
|
|
$userService = $repository->getUserService(); |
376
|
|
|
|
377
|
|
|
// Load main group |
378
|
|
|
$parentUserGroup = $userService->loadUserGroup($mainGroupId); |
379
|
|
|
|
380
|
|
|
// Instantiate a new create struct |
381
|
|
|
$userGroupCreate = $userService->newUserGroupCreateStruct('eng-US'); |
382
|
|
|
|
383
|
|
|
// This call will fail with a "ContentFieldValidationException", because the |
384
|
|
|
// only mandatory field "name" is not set. |
385
|
|
|
$userService->createUserGroup($userGroupCreate, $parentUserGroup); |
386
|
|
|
/* END: Use Case */ |
387
|
|
|
} |
388
|
|
|
|
389
|
|
|
/** |
390
|
|
|
* Test for the createUserGroup() method. |
391
|
|
|
* |
392
|
|
|
* @return \eZ\Publish\API\Repository\Values\User\UserGroup |
393
|
|
|
* |
394
|
|
|
* @see \eZ\Publish\API\Repository\UserService::createUserGroup() |
395
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testNewUserGroupCreateStruct |
396
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserGroup |
397
|
|
|
* @depends eZ\Publish\API\Repository\Tests\ContentServiceTest::testCreateContent |
398
|
|
|
*/ |
399
|
|
|
public function testCreateUserGroupInTransactionWithRollback() |
400
|
|
|
{ |
401
|
|
|
$repository = $this->getRepository(); |
402
|
|
|
|
403
|
|
|
$mainGroupId = $this->generateId('group', 4); |
404
|
|
|
/* BEGIN: Use Case */ |
405
|
|
|
// $mainGroupId is the ID of the main "Users" group |
406
|
|
|
|
407
|
|
|
$userService = $repository->getUserService(); |
408
|
|
|
|
409
|
|
|
$repository->beginTransaction(); |
410
|
|
|
|
411
|
|
|
try { |
412
|
|
|
// Load main group |
413
|
|
|
$parentUserGroup = $userService->loadUserGroup($mainGroupId); |
414
|
|
|
|
415
|
|
|
// Instantiate a new create struct |
416
|
|
|
$userGroupCreate = $userService->newUserGroupCreateStruct('eng-US'); |
417
|
|
|
$userGroupCreate->setField('name', 'Example Group'); |
418
|
|
|
|
419
|
|
|
// Create the new user group |
420
|
|
|
$createdUserGroupId = $userService->createUserGroup( |
421
|
|
|
$userGroupCreate, |
422
|
|
|
$parentUserGroup |
423
|
|
|
)->id; |
424
|
|
|
} catch (Exception $e) { |
425
|
|
|
// Cleanup hanging transaction on error |
426
|
|
|
$repository->rollback(); |
427
|
|
|
throw $e; |
428
|
|
|
} |
429
|
|
|
|
430
|
|
|
$repository->rollback(); |
431
|
|
|
|
432
|
|
|
try { |
433
|
|
|
// Throws exception since creation of user group was rolled back |
434
|
|
|
$loadedGroup = $userService->loadUserGroup($createdUserGroupId); |
|
|
|
|
435
|
|
|
} catch (NotFoundException $e) { |
436
|
|
|
return; |
437
|
|
|
} |
438
|
|
|
/* END: Use Case */ |
439
|
|
|
|
440
|
|
|
$this->fail('User group object still exists after rollback.'); |
441
|
|
|
} |
442
|
|
|
|
443
|
|
|
/** |
444
|
|
|
* Test for the deleteUserGroup() method. |
445
|
|
|
* |
446
|
|
|
* @see \eZ\Publish\API\Repository\UserService::deleteUserGroup() |
447
|
|
|
* @expectedException \eZ\Publish\API\Repository\Exceptions\NotFoundException |
448
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUserGroup |
449
|
|
|
*/ |
450
|
|
|
public function testDeleteUserGroup() |
451
|
|
|
{ |
452
|
|
|
$repository = $this->getRepository(); |
453
|
|
|
$userService = $repository->getUserService(); |
454
|
|
|
|
455
|
|
|
/* BEGIN: Use Case */ |
456
|
|
|
$userGroup = $this->createUserGroupVersion1(); |
457
|
|
|
|
458
|
|
|
// Delete the currently created user group again |
459
|
|
|
$userService->deleteUserGroup($userGroup); |
460
|
|
|
/* END: Use Case */ |
461
|
|
|
|
462
|
|
|
// We use the NotFoundException here for verification |
463
|
|
|
$userService->loadUserGroup($userGroup->id); |
464
|
|
|
} |
465
|
|
|
|
466
|
|
|
/** |
467
|
|
|
* Test deleting user group throwing NotFoundException. |
468
|
|
|
* |
469
|
|
|
* @covers \eZ\Publish\API\Repository\UserService::deleteUserGroup |
470
|
|
|
* @expectedException \eZ\Publish\API\Repository\Exceptions\NotFoundException |
471
|
|
|
*/ |
472
|
|
View Code Duplication |
public function testDeleteUserGroupThrowsNotFoundException() |
473
|
|
|
{ |
474
|
|
|
$repository = $this->getRepository(); |
475
|
|
|
$userService = $repository->getUserService(); |
476
|
|
|
|
477
|
|
|
$userGroup = new UserGroup( |
478
|
|
|
[ |
479
|
|
|
'content' => new Content( |
480
|
|
|
[ |
481
|
|
|
'versionInfo' => new VersionInfo( |
482
|
|
|
['contentInfo' => new ContentInfo(['id' => 123456])] |
483
|
|
|
), |
484
|
|
|
'internalFields' => [], |
485
|
|
|
] |
486
|
|
|
), |
487
|
|
|
] |
488
|
|
|
); |
489
|
|
|
$userService->deleteUserGroup($userGroup); |
490
|
|
|
} |
491
|
|
|
|
492
|
|
|
/** |
493
|
|
|
* Test for the moveUserGroup() method. |
494
|
|
|
* |
495
|
|
|
* @see \eZ\Publish\API\Repository\UserService::moveUserGroup() |
496
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUserGroup |
497
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadSubUserGroups |
498
|
|
|
*/ |
499
|
|
|
public function testMoveUserGroup() |
500
|
|
|
{ |
501
|
|
|
$repository = $this->getRepository(); |
502
|
|
|
$userService = $repository->getUserService(); |
503
|
|
|
|
504
|
|
|
$membersGroupId = $this->generateId('group', 13); |
505
|
|
|
/* BEGIN: Use Case */ |
506
|
|
|
// $membersGroupId is the ID of the "Members" user group in an eZ |
507
|
|
|
// Publish demo installation |
508
|
|
|
|
509
|
|
|
$userGroup = $this->createUserGroupVersion1(); |
510
|
|
|
|
511
|
|
|
// Load the new parent group |
512
|
|
|
$membersUserGroup = $userService->loadUserGroup($membersGroupId); |
513
|
|
|
|
514
|
|
|
// Move user group from "Users" to "Members" |
515
|
|
|
$userService->moveUserGroup($userGroup, $membersUserGroup); |
516
|
|
|
|
517
|
|
|
// Reload the user group to get an updated $parentId |
518
|
|
|
$userGroup = $userService->loadUserGroup($userGroup->id); |
519
|
|
|
|
520
|
|
|
$this->refreshSearch($repository); |
521
|
|
|
|
522
|
|
|
// The returned array will no contain $userGroup |
523
|
|
|
$subUserGroups = $userService->loadSubUserGroups( |
524
|
|
|
$membersUserGroup |
525
|
|
|
); |
526
|
|
|
/* END: Use Case */ |
527
|
|
|
|
528
|
|
|
$subUserGroupIds = array_map( |
529
|
|
|
function ($content) { |
530
|
|
|
return $content->id; |
531
|
|
|
}, |
532
|
|
|
$subUserGroups |
533
|
|
|
); |
534
|
|
|
|
535
|
|
|
$this->assertEquals($membersGroupId, $userGroup->parentId); |
536
|
|
|
$this->assertEquals(array($userGroup->id), $subUserGroupIds); |
537
|
|
|
} |
538
|
|
|
|
539
|
|
|
/** |
540
|
|
|
* Test for the moveUserGroup() method. |
541
|
|
|
* |
542
|
|
|
* @see \eZ\Publish\API\Repository\UserService::moveUserGroup() |
543
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testMoveUserGroup |
544
|
|
|
*/ |
545
|
|
View Code Duplication |
public function testMoveUserGroupIncrementsSubGroupCountOnNewParent() |
546
|
|
|
{ |
547
|
|
|
$repository = $this->getRepository(); |
548
|
|
|
$userService = $repository->getUserService(); |
549
|
|
|
|
550
|
|
|
$membersGroupId = $this->generateId('group', 13); |
551
|
|
|
/* BEGIN: Use Case */ |
552
|
|
|
// $membersGroupId is the ID of the "Members" user group in an eZ |
553
|
|
|
// Publish demo installation |
554
|
|
|
|
555
|
|
|
$userGroup = $this->createUserGroupVersion1(); |
556
|
|
|
|
557
|
|
|
// Load the new parent group |
558
|
|
|
$membersUserGroup = $userService->loadUserGroup($membersGroupId); |
559
|
|
|
|
560
|
|
|
// Move user group from "Users" to "Members" |
561
|
|
|
$userService->moveUserGroup($userGroup, $membersUserGroup); |
562
|
|
|
|
563
|
|
|
$this->refreshSearch($repository); |
564
|
|
|
|
565
|
|
|
// Reload the user group to get an updated $subGroupCount |
566
|
|
|
$membersUserGroupUpdated = $userService->loadUserGroup($membersGroupId); |
567
|
|
|
/* END: Use Case */ |
568
|
|
|
|
569
|
|
|
$this->assertEquals(1, $membersUserGroupUpdated->subGroupCount); |
|
|
|
|
570
|
|
|
} |
571
|
|
|
|
572
|
|
|
/** |
573
|
|
|
* Test for the moveUserGroup() method. |
574
|
|
|
* |
575
|
|
|
* @see \eZ\Publish\API\Repository\UserService::moveUserGroup() |
576
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testMoveUserGroup |
577
|
|
|
*/ |
578
|
|
View Code Duplication |
public function testMoveUserGroupDecrementsSubGroupCountOnOldParent() |
579
|
|
|
{ |
580
|
|
|
$repository = $this->getRepository(); |
581
|
|
|
$userService = $repository->getUserService(); |
582
|
|
|
|
583
|
|
|
$membersGroupId = $this->generateId('group', 13); |
584
|
|
|
/* BEGIN: Use Case */ |
585
|
|
|
// $membersGroupId is the ID of the "Members" user group in an eZ |
586
|
|
|
// Publish demo installation |
587
|
|
|
|
588
|
|
|
$userGroup = $this->createUserGroupVersion1(); |
589
|
|
|
|
590
|
|
|
// Load the new parent group |
591
|
|
|
$membersUserGroup = $userService->loadUserGroup($membersGroupId); |
592
|
|
|
|
593
|
|
|
// Move user group from "Users" to "Members" |
594
|
|
|
$userService->moveUserGroup($userGroup, $membersUserGroup); |
595
|
|
|
/* END: Use Case */ |
596
|
|
|
|
597
|
|
|
$mainUserGroup = $userService->loadUserGroup($this->generateId('group', 4)); |
598
|
|
|
|
599
|
|
|
$this->assertEquals(5, $mainUserGroup->subGroupCount); |
|
|
|
|
600
|
|
|
} |
601
|
|
|
|
602
|
|
|
/** |
603
|
|
|
* Test moving a user group below another group throws NotFoundException. |
604
|
|
|
* |
605
|
|
|
* @covers \eZ\Publish\API\Repository\UserService::moveUserGroup |
606
|
|
|
* @expectedException \eZ\Publish\API\Repository\Exceptions\NotFoundException |
607
|
|
|
*/ |
608
|
|
|
public function testMoveUserGroupThrowsNotFoundException() |
609
|
|
|
{ |
610
|
|
|
$repository = $this->getRepository(); |
611
|
|
|
$userService = $repository->getUserService(); |
612
|
|
|
|
613
|
|
|
$userGroupToMove = new UserGroup( |
614
|
|
|
[ |
615
|
|
|
'content' => new Content( |
616
|
|
|
[ |
617
|
|
|
'versionInfo' => new VersionInfo( |
618
|
|
|
['contentInfo' => new ContentInfo(['id' => 123456])] |
619
|
|
|
), |
620
|
|
|
'internalFields' => [], |
621
|
|
|
] |
622
|
|
|
), |
623
|
|
|
] |
624
|
|
|
); |
625
|
|
|
$parentUserGroup = new UserGroup( |
626
|
|
|
[ |
627
|
|
|
'content' => new Content( |
628
|
|
|
[ |
629
|
|
|
'versionInfo' => new VersionInfo( |
630
|
|
|
['contentInfo' => new ContentInfo(['id' => 123455])] |
631
|
|
|
), |
632
|
|
|
'internalFields' => [], |
633
|
|
|
] |
634
|
|
|
), |
635
|
|
|
] |
636
|
|
|
); |
637
|
|
|
$userService->moveUserGroup($userGroupToMove, $parentUserGroup); |
638
|
|
|
} |
639
|
|
|
|
640
|
|
|
/** |
641
|
|
|
* Test for the newUserGroupUpdateStruct() method. |
642
|
|
|
* |
643
|
|
|
* @covers \eZ\Publish\API\Repository\UserService::newUserGroupUpdateStruct |
644
|
|
|
*/ |
645
|
|
|
public function testNewUserGroupUpdateStruct() |
646
|
|
|
{ |
647
|
|
|
$repository = $this->getRepository(); |
648
|
|
|
|
649
|
|
|
/* BEGIN: Use Case */ |
650
|
|
|
$userService = $repository->getUserService(); |
651
|
|
|
|
652
|
|
|
$groupUpdate = $userService->newUserGroupUpdateStruct(); |
653
|
|
|
/* END: Use Case */ |
654
|
|
|
|
655
|
|
|
$this->assertInstanceOf( |
656
|
|
|
UserGroupUpdateStruct::class, |
657
|
|
|
$groupUpdate |
658
|
|
|
); |
659
|
|
|
|
660
|
|
|
$this->assertNull($groupUpdate->contentUpdateStruct); |
661
|
|
|
$this->assertNull($groupUpdate->contentMetadataUpdateStruct); |
662
|
|
|
} |
663
|
|
|
|
664
|
|
|
/** |
665
|
|
|
* Test for the updateUserGroup() method. |
666
|
|
|
* |
667
|
|
|
* @see \eZ\Publish\API\Repository\UserService::updateUserGroup() |
668
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUserGroup |
669
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testNewUserGroupUpdateStruct |
670
|
|
|
*/ |
671
|
|
|
public function testUpdateUserGroup() |
672
|
|
|
{ |
673
|
|
|
$repository = $this->getRepository(); |
674
|
|
|
$userService = $repository->getUserService(); |
675
|
|
|
|
676
|
|
|
/* BEGIN: Use Case */ |
677
|
|
|
$userGroup = $this->createUserGroupVersion1(); |
678
|
|
|
|
679
|
|
|
// Create a group update struct and change nothing |
680
|
|
|
$groupUpdate = $userService->newUserGroupUpdateStruct(); |
681
|
|
|
|
682
|
|
|
// This update will do nothing |
683
|
|
|
$userGroup = $userService->updateUserGroup( |
684
|
|
|
$userGroup, |
685
|
|
|
$groupUpdate |
686
|
|
|
); |
687
|
|
|
/* END: Use Case */ |
688
|
|
|
|
689
|
|
|
$this->assertInstanceOf( |
690
|
|
|
'\\eZ\\Publish\\API\\Repository\\Values\\User\\UserGroup', |
691
|
|
|
$userGroup |
692
|
|
|
); |
693
|
|
|
|
694
|
|
|
$this->assertEquals(1, $userGroup->getVersionInfo()->versionNo); |
695
|
|
|
} |
696
|
|
|
|
697
|
|
|
/** |
698
|
|
|
* Test for the updateUserGroup() method. |
699
|
|
|
* |
700
|
|
|
* @see \eZ\Publish\API\Repository\UserService::updateUserGroup() |
701
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testUpdateUserGroup |
702
|
|
|
*/ |
703
|
|
View Code Duplication |
public function testUpdateUserGroupWithSubContentUpdateStruct() |
704
|
|
|
{ |
705
|
|
|
$repository = $this->getRepository(); |
706
|
|
|
$userService = $repository->getUserService(); |
707
|
|
|
|
708
|
|
|
/* BEGIN: Use Case */ |
709
|
|
|
$userGroup = $this->createUserGroupVersion1(); |
710
|
|
|
|
711
|
|
|
// Load the content service |
712
|
|
|
$contentService = $repository->getContentService(); |
713
|
|
|
|
714
|
|
|
// Create a content update struct and update the group name |
715
|
|
|
$contentUpdate = $contentService->newContentUpdateStruct(); |
716
|
|
|
$contentUpdate->setField('name', 'Sindelfingen', 'eng-US'); |
717
|
|
|
|
718
|
|
|
// Create a group update struct and set content update struct |
719
|
|
|
$groupUpdate = $userService->newUserGroupUpdateStruct(); |
720
|
|
|
$groupUpdate->contentUpdateStruct = $contentUpdate; |
721
|
|
|
|
722
|
|
|
// This will update the name and the increment the group version number |
723
|
|
|
$userGroup = $userService->updateUserGroup( |
724
|
|
|
$userGroup, |
725
|
|
|
$groupUpdate |
726
|
|
|
); |
727
|
|
|
/* END: Use Case */ |
728
|
|
|
|
729
|
|
|
$this->assertEquals('Sindelfingen', $userGroup->getFieldValue('name', 'eng-US')); |
730
|
|
|
|
731
|
|
|
$versionInfo = $userGroup->getVersionInfo(); |
732
|
|
|
|
733
|
|
|
$this->assertEquals(APIVersionInfo::STATUS_PUBLISHED, $versionInfo->status); |
734
|
|
|
$this->assertEquals(2, $versionInfo->versionNo); |
735
|
|
|
} |
736
|
|
|
|
737
|
|
|
/** |
738
|
|
|
* Test for the updateUserGroup() method. |
739
|
|
|
* |
740
|
|
|
* @see \eZ\Publish\API\Repository\UserService::updateUserGroup() |
741
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testUpdateUserGroup |
742
|
|
|
*/ |
743
|
|
|
public function testUpdateUserGroupWithSubContentMetadataUpdateStruct() |
744
|
|
|
{ |
745
|
|
|
$repository = $this->getRepository(); |
746
|
|
|
$userService = $repository->getUserService(); |
747
|
|
|
|
748
|
|
|
/* BEGIN: Use Case */ |
749
|
|
|
$userGroup = $this->createUserGroupVersion1(); |
750
|
|
|
|
751
|
|
|
// Load the content service |
752
|
|
|
$contentService = $repository->getContentService(); |
753
|
|
|
|
754
|
|
|
// Create a metadata update struct and change the remoteId |
755
|
|
|
$metadataUpdate = $contentService->newContentMetadataUpdateStruct(); |
756
|
|
|
$metadataUpdate->remoteId = '3c61299780663bafa3af2101e52125da'; |
757
|
|
|
|
758
|
|
|
// Create a group update struct and set content update struct |
759
|
|
|
$groupUpdate = $userService->newUserGroupUpdateStruct(); |
760
|
|
|
$groupUpdate->contentMetadataUpdateStruct = $metadataUpdate; |
761
|
|
|
|
762
|
|
|
// This will update the name and the increment the group version number |
763
|
|
|
$userGroup = $userService->updateUserGroup( |
764
|
|
|
$userGroup, |
765
|
|
|
$groupUpdate |
766
|
|
|
); |
767
|
|
|
/* END: Use Case */ |
768
|
|
|
|
769
|
|
|
$this->assertEquals( |
770
|
|
|
'3c61299780663bafa3af2101e52125da', |
771
|
|
|
$userGroup->contentInfo->remoteId |
772
|
|
|
); |
773
|
|
|
|
774
|
|
|
$versionInfo = $userGroup->getVersionInfo(); |
775
|
|
|
|
776
|
|
|
$this->assertEquals(APIVersionInfo::STATUS_PUBLISHED, $versionInfo->status); |
777
|
|
|
$this->assertEquals(1, $versionInfo->versionNo); |
778
|
|
|
} |
779
|
|
|
|
780
|
|
|
/** |
781
|
|
|
* Test for the updateUserGroup() method. |
782
|
|
|
* |
783
|
|
|
* @see \eZ\Publish\API\Repository\UserService::updateUserGroup() |
784
|
|
|
* @expectedException \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException |
785
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testUpdateUserGroup |
786
|
|
|
*/ |
787
|
|
View Code Duplication |
public function testUpdateUserGroupThrowsInvalidArgumentExceptionOnFieldTypeNotAccept() |
788
|
|
|
{ |
789
|
|
|
$repository = $this->getRepository(); |
790
|
|
|
$userService = $repository->getUserService(); |
791
|
|
|
|
792
|
|
|
/* BEGIN: Use Case */ |
793
|
|
|
$userGroup = $this->createUserGroupVersion1(); |
794
|
|
|
|
795
|
|
|
// Load the content service |
796
|
|
|
$contentService = $repository->getContentService(); |
797
|
|
|
|
798
|
|
|
// Create a content update struct and update the group name |
799
|
|
|
$contentUpdate = $contentService->newContentUpdateStruct(); |
800
|
|
|
// An object of stdClass is not accepted as a value by the field "name" |
801
|
|
|
$contentUpdate->setField('name', new \stdClass(), 'eng-US'); |
802
|
|
|
|
803
|
|
|
// Create a group update struct and set content update struct |
804
|
|
|
$groupUpdate = $userService->newUserGroupUpdateStruct(); |
805
|
|
|
$groupUpdate->contentUpdateStruct = $contentUpdate; |
806
|
|
|
|
807
|
|
|
// This call will fail with an InvalidArgumentException, because the |
808
|
|
|
// field "name" does not accept the given value |
809
|
|
|
$userService->updateUserGroup($userGroup, $groupUpdate); |
810
|
|
|
/* END: Use Case */ |
811
|
|
|
} |
812
|
|
|
|
813
|
|
|
/** |
814
|
|
|
* Test for the newUserCreateStruct() method. |
815
|
|
|
* |
816
|
|
|
* @see \eZ\Publish\API\Repository\UserService::newUserCreateStruct() |
817
|
|
|
*/ |
818
|
|
|
public function testNewUserCreateStruct() |
819
|
|
|
{ |
820
|
|
|
$repository = $this->getRepository(); |
821
|
|
|
|
822
|
|
|
/* BEGIN: Use Case */ |
823
|
|
|
$userService = $repository->getUserService(); |
824
|
|
|
|
825
|
|
|
$userCreate = $userService->newUserCreateStruct( |
826
|
|
|
'user', |
827
|
|
|
'[email protected]', |
828
|
|
|
'secret', |
829
|
|
|
'eng-US' |
830
|
|
|
); |
831
|
|
|
/* END: Use Case */ |
832
|
|
|
|
833
|
|
|
$this->assertInstanceOf( |
834
|
|
|
'\\eZ\\Publish\\API\\Repository\\Values\\User\\UserCreateStruct', |
835
|
|
|
$userCreate |
836
|
|
|
); |
837
|
|
|
|
838
|
|
|
return $userCreate; |
839
|
|
|
} |
840
|
|
|
|
841
|
|
|
/** |
842
|
|
|
* Test updating a user group throws ContentFieldValidationException. |
843
|
|
|
* |
844
|
|
|
* @covers \eZ\Publish\API\Repository\UserService::updateUserGroup |
845
|
|
|
* @expectedException \eZ\Publish\API\Repository\Exceptions\ContentFieldValidationException |
846
|
|
|
*/ |
847
|
|
View Code Duplication |
public function testUpdateUserGroupThrowsContentFieldValidationExceptionOnRequiredFieldEmpty() |
848
|
|
|
{ |
849
|
|
|
$repository = $this->getRepository(); |
850
|
|
|
$userService = $repository->getUserService(); |
851
|
|
|
$contentService = $repository->getContentService(); |
852
|
|
|
|
853
|
|
|
$userGroup = $userService->loadUserGroup(42); |
854
|
|
|
$userGroupUpdateStruct = $userService->newUserGroupUpdateStruct(); |
855
|
|
|
$userGroupUpdateStruct->contentUpdateStruct = $contentService->newContentUpdateStruct(); |
856
|
|
|
$userGroupUpdateStruct->contentUpdateStruct->setField('name', '', 'eng-US'); |
857
|
|
|
|
858
|
|
|
$userService->updateUserGroup($userGroup, $userGroupUpdateStruct); |
859
|
|
|
} |
860
|
|
|
|
861
|
|
|
/** |
862
|
|
|
* Test for the newUserCreateStruct() method. |
863
|
|
|
* |
864
|
|
|
* @param \eZ\Publish\API\Repository\Values\User\UserCreateStruct $userCreate |
865
|
|
|
* |
866
|
|
|
* @see \eZ\Publish\API\Repository\UserService::newUserCreateStruct() |
867
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testNewUserCreateStruct |
868
|
|
|
*/ |
869
|
|
View Code Duplication |
public function testNewUserCreateStructSetsExpectedProperties($userCreate) |
870
|
|
|
{ |
871
|
|
|
$this->assertEquals( |
872
|
|
|
array( |
873
|
|
|
'login' => 'user', |
874
|
|
|
'email' => '[email protected]', |
875
|
|
|
'password' => 'secret', |
876
|
|
|
'mainLanguageCode' => 'eng-US', |
877
|
|
|
), |
878
|
|
|
array( |
879
|
|
|
'login' => $userCreate->login, |
880
|
|
|
'email' => $userCreate->email, |
881
|
|
|
'password' => $userCreate->password, |
882
|
|
|
'mainLanguageCode' => $userCreate->mainLanguageCode, |
883
|
|
|
) |
884
|
|
|
); |
885
|
|
|
} |
886
|
|
|
|
887
|
|
|
/** |
888
|
|
|
* Test for the newUserCreateStruct() method. |
889
|
|
|
* |
890
|
|
|
* @see \eZ\Publish\API\Repository\UserService::newUserCreateStruct($login, $email, $password, $mainLanguageCode, $contentType) |
891
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testNewUserCreateStruct |
892
|
|
|
* @depends eZ\Publish\API\Repository\Tests\ContentTypeServiceTest::testLoadContentTypeByIdentifier |
893
|
|
|
*/ |
894
|
|
View Code Duplication |
public function testNewUserCreateStructWithFifthParameter() |
895
|
|
|
{ |
896
|
|
|
if ($this->isVersion4()) { |
897
|
|
|
$this->markTestSkipped('This test is only relevant for eZ Publish versions > 4'); |
898
|
|
|
} |
899
|
|
|
|
900
|
|
|
$repository = $this->getRepository(); |
901
|
|
|
|
902
|
|
|
/* BEGIN: Use Case */ |
903
|
|
|
$contentTypeService = $repository->getContentTypeService(); |
904
|
|
|
$userService = $repository->getUserService(); |
905
|
|
|
|
906
|
|
|
$userType = $contentTypeService->loadContentTypeByIdentifier('user'); |
907
|
|
|
|
908
|
|
|
$userCreate = $userService->newUserCreateStruct( |
909
|
|
|
'user', |
910
|
|
|
'[email protected]', |
911
|
|
|
'secret', |
912
|
|
|
'eng-US', |
913
|
|
|
$userType |
914
|
|
|
); |
915
|
|
|
/* END: Use Case */ |
916
|
|
|
|
917
|
|
|
$this->assertSame($userType, $userCreate->contentType); |
918
|
|
|
} |
919
|
|
|
|
920
|
|
|
/** |
921
|
|
|
* Test for the createUser() method. |
922
|
|
|
* |
923
|
|
|
* @return \eZ\Publish\API\Repository\Values\User\User |
924
|
|
|
* |
925
|
|
|
* @see \eZ\Publish\API\Repository\UserService::createUser() |
926
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserGroup |
927
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testNewUserCreateStruct |
928
|
|
|
* @depends eZ\Publish\API\Repository\Tests\ContentServiceTest::testCreateContent |
929
|
|
|
*/ |
930
|
|
|
public function testCreateUser() |
931
|
|
|
{ |
932
|
|
|
/* BEGIN: Use Case */ |
933
|
|
|
$user = $this->createUserVersion1(); |
934
|
|
|
/* END: Use Case */ |
935
|
|
|
|
936
|
|
|
$this->assertInstanceOf( |
937
|
|
|
'\\eZ\\Publish\\API\\Repository\\Values\\User\\User', |
938
|
|
|
$user |
939
|
|
|
); |
940
|
|
|
|
941
|
|
|
return $user; |
942
|
|
|
} |
943
|
|
|
|
944
|
|
|
/** |
945
|
|
|
* Test for the createUser() method. |
946
|
|
|
* |
947
|
|
|
* @param \eZ\Publish\API\Repository\Values\User\User $user |
948
|
|
|
* |
949
|
|
|
* @see \eZ\Publish\API\Repository\UserService::createUser() |
950
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser |
951
|
|
|
*/ |
952
|
|
View Code Duplication |
public function testCreateUserSetsExpectedProperties(User $user) |
953
|
|
|
{ |
954
|
|
|
$this->assertEquals( |
955
|
|
|
array( |
956
|
|
|
'login' => 'user', |
957
|
|
|
'email' => '[email protected]', |
958
|
|
|
'passwordHash' => $this->createHash( |
959
|
|
|
'user', |
960
|
|
|
'secret', |
961
|
|
|
$user->hashAlgorithm |
962
|
|
|
), |
963
|
|
|
'mainLanguageCode' => 'eng-US', |
964
|
|
|
), |
965
|
|
|
array( |
966
|
|
|
'login' => $user->login, |
967
|
|
|
'email' => $user->email, |
968
|
|
|
'passwordHash' => $user->passwordHash, |
969
|
|
|
'mainLanguageCode' => $user->contentInfo->mainLanguageCode, |
970
|
|
|
) |
971
|
|
|
); |
972
|
|
|
} |
973
|
|
|
|
974
|
|
|
/** |
975
|
|
|
* Test for the createUser() method. |
976
|
|
|
* |
977
|
|
|
* @see \eZ\Publish\API\Repository\UserService::createUser() |
978
|
|
|
* @expectedException \eZ\Publish\API\Repository\Exceptions\ContentFieldValidationException |
979
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser |
980
|
|
|
*/ |
981
|
|
View Code Duplication |
public function testCreateUserWhenMissingField() |
982
|
|
|
{ |
983
|
|
|
$repository = $this->getRepository(); |
984
|
|
|
|
985
|
|
|
$editorsGroupId = $this->generateId('group', 13); |
986
|
|
|
/* BEGIN: Use Case */ |
987
|
|
|
// $editorsGroupId is the ID of the "Editors" user group in an eZ |
988
|
|
|
// Publish demo installation |
989
|
|
|
|
990
|
|
|
$userService = $repository->getUserService(); |
991
|
|
|
|
992
|
|
|
// Instantiate a create struct with mandatory properties |
993
|
|
|
$userCreate = $userService->newUserCreateStruct( |
994
|
|
|
'user', |
995
|
|
|
'[email protected]', |
996
|
|
|
'secret', |
997
|
|
|
'eng-US' |
998
|
|
|
); |
999
|
|
|
|
1000
|
|
|
// Do not set the mandatory fields "first_name" and "last_name" |
1001
|
|
|
//$userCreate->setField( 'first_name', 'Example' ); |
1002
|
|
|
//$userCreate->setField( 'last_name', 'User' ); |
1003
|
|
|
|
1004
|
|
|
// Load parent group for the user |
1005
|
|
|
$group = $userService->loadUserGroup($editorsGroupId); |
1006
|
|
|
|
1007
|
|
|
// This call will fail with a "ContentFieldValidationException", because the |
1008
|
|
|
// mandatory fields "first_name" and "last_name" are not set. |
1009
|
|
|
$userService->createUser($userCreate, array($group)); |
1010
|
|
|
/* END: Use Case */ |
1011
|
|
|
} |
1012
|
|
|
|
1013
|
|
|
/** |
1014
|
|
|
* Test for the createUser() method. |
1015
|
|
|
* |
1016
|
|
|
* @see \eZ\Publish\API\Repository\UserService::createUser() |
1017
|
|
|
* @expectedException \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException |
1018
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser |
1019
|
|
|
*/ |
1020
|
|
View Code Duplication |
public function testCreateUserThrowsInvalidArgumentExceptionOnFieldTypeNotAccept() |
1021
|
|
|
{ |
1022
|
|
|
$repository = $this->getRepository(); |
1023
|
|
|
|
1024
|
|
|
$editorsGroupId = $this->generateId('group', 13); |
1025
|
|
|
/* BEGIN: Use Case */ |
1026
|
|
|
// $editorsGroupId is the ID of the "Editors" user group in an eZ |
1027
|
|
|
// Publish demo installation |
1028
|
|
|
|
1029
|
|
|
$userService = $repository->getUserService(); |
1030
|
|
|
|
1031
|
|
|
// Instantiate a create struct with mandatory properties |
1032
|
|
|
$userCreate = $userService->newUserCreateStruct( |
1033
|
|
|
'user', |
1034
|
|
|
'[email protected]', |
1035
|
|
|
'secret', |
1036
|
|
|
'eng-US' |
1037
|
|
|
); |
1038
|
|
|
|
1039
|
|
|
// An object of stdClass is not a valid value for the field first_name |
1040
|
|
|
$userCreate->setField('first_name', new \stdClass()); |
1041
|
|
|
$userCreate->setField('last_name', 'User'); |
1042
|
|
|
|
1043
|
|
|
// Load parent group for the user |
1044
|
|
|
$group = $userService->loadUserGroup($editorsGroupId); |
1045
|
|
|
|
1046
|
|
|
// This call will fail with an "InvalidArgumentException", because the |
1047
|
|
|
// value for the firled "first_name" is not accepted by the field type. |
1048
|
|
|
$userService->createUser($userCreate, array($group)); |
1049
|
|
|
/* END: Use Case */ |
1050
|
|
|
} |
1051
|
|
|
|
1052
|
|
|
/** |
1053
|
|
|
* Test for the createUser() method. |
1054
|
|
|
* |
1055
|
|
|
* @covers \eZ\Publish\API\Repository\UserService::createUser |
1056
|
|
|
* @expectedException \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException |
1057
|
|
|
* @expectedExceptionMessage Argument 'userCreateStruct' is invalid: User with provided login already exists |
1058
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser |
1059
|
|
|
*/ |
1060
|
|
View Code Duplication |
public function testCreateUserThrowsInvalidArgumentException() |
1061
|
|
|
{ |
1062
|
|
|
$repository = $this->getRepository(); |
1063
|
|
|
|
1064
|
|
|
$editorsGroupId = $this->generateId('group', 13); |
1065
|
|
|
/* BEGIN: Use Case */ |
1066
|
|
|
// $editorsGroupId is the ID of the "Editors" user group in an eZ |
1067
|
|
|
// Publish demo installation |
1068
|
|
|
|
1069
|
|
|
$userService = $repository->getUserService(); |
1070
|
|
|
|
1071
|
|
|
// Instantiate a create struct with mandatory properties |
1072
|
|
|
$userCreate = $userService->newUserCreateStruct( |
1073
|
|
|
// admin is an existing login |
1074
|
|
|
'admin', |
1075
|
|
|
'[email protected]', |
1076
|
|
|
'secret', |
1077
|
|
|
'eng-US' |
1078
|
|
|
); |
1079
|
|
|
|
1080
|
|
|
$userCreate->setField('first_name', 'Example'); |
1081
|
|
|
$userCreate->setField('last_name', 'User'); |
1082
|
|
|
|
1083
|
|
|
// Load parent group for the user |
1084
|
|
|
$group = $userService->loadUserGroup($editorsGroupId); |
1085
|
|
|
|
1086
|
|
|
// This call will fail with a "InvalidArgumentException", because the |
1087
|
|
|
// user with "admin" login already exists. |
1088
|
|
|
$userService->createUser($userCreate, array($group)); |
1089
|
|
|
/* END: Use Case */ |
1090
|
|
|
} |
1091
|
|
|
|
1092
|
|
|
/** |
1093
|
|
|
* Test for the createUser() method. |
1094
|
|
|
* |
1095
|
|
|
* @return \eZ\Publish\API\Repository\Values\User\User |
1096
|
|
|
* |
1097
|
|
|
* @see \eZ\Publish\API\Repository\UserService::createUser() |
1098
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserGroup |
1099
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testNewUserCreateStruct |
1100
|
|
|
* @depends eZ\Publish\API\Repository\Tests\ContentServiceTest::testCreateContent |
1101
|
|
|
*/ |
1102
|
|
|
public function testCreateUserInTransactionWithRollback() |
1103
|
|
|
{ |
1104
|
|
|
$repository = $this->getRepository(); |
1105
|
|
|
$userService = $repository->getUserService(); |
1106
|
|
|
|
1107
|
|
|
/* BEGIN: Use Case */ |
1108
|
|
|
$repository->beginTransaction(); |
1109
|
|
|
|
1110
|
|
|
try { |
1111
|
|
|
$user = $this->createUserVersion1(); |
1112
|
|
|
} catch (Exception $e) { |
1113
|
|
|
// Cleanup hanging transaction on error |
1114
|
|
|
$repository->rollback(); |
1115
|
|
|
throw $e; |
1116
|
|
|
} |
1117
|
|
|
|
1118
|
|
|
$repository->rollback(); |
1119
|
|
|
|
1120
|
|
|
try { |
1121
|
|
|
// Throws exception since creation of user was rolled back |
1122
|
|
|
$loadedUser = $userService->loadUser($user->id); |
|
|
|
|
1123
|
|
|
} catch (NotFoundException $e) { |
1124
|
|
|
return; |
1125
|
|
|
} |
1126
|
|
|
/* END: Use Case */ |
1127
|
|
|
|
1128
|
|
|
$this->fail('User object still exists after rollback.'); |
1129
|
|
|
} |
1130
|
|
|
|
1131
|
|
|
/** |
1132
|
|
|
* Test creating a user throwing NotFoundException. |
1133
|
|
|
* |
1134
|
|
|
* @expectedException \eZ\Publish\API\Repository\Exceptions\NotFoundException |
1135
|
|
|
* @covers \eZ\Publish\API\Repository\UserService::createUser |
1136
|
|
|
*/ |
1137
|
|
|
public function testCreateUserThrowsNotFoundException() |
1138
|
|
|
{ |
1139
|
|
|
$repository = $this->getRepository(); |
1140
|
|
|
$userService = $repository->getUserService(); |
1141
|
|
|
|
1142
|
|
|
$userCreateStruct = $userService->newUserCreateStruct('new_user', '[email protected]', 'password', 'eng-GB'); |
1143
|
|
|
$userCreateStruct->setField('first_name', 'New'); |
1144
|
|
|
$userCreateStruct->setField('last_name', 'User'); |
1145
|
|
|
|
1146
|
|
|
$parentGroup = new UserGroup( |
1147
|
|
|
[ |
1148
|
|
|
'content' => new Content( |
1149
|
|
|
[ |
1150
|
|
|
'versionInfo' => new VersionInfo( |
1151
|
|
|
[ |
1152
|
|
|
'contentInfo' => new ContentInfo(['id' => 123456]), |
1153
|
|
|
] |
1154
|
|
|
), |
1155
|
|
|
'internalFields' => [], |
1156
|
|
|
] |
1157
|
|
|
), |
1158
|
|
|
] |
1159
|
|
|
); |
1160
|
|
|
$userService->createUser($userCreateStruct, [$parentGroup]); |
1161
|
|
|
} |
1162
|
|
|
|
1163
|
|
|
/** |
1164
|
|
|
* Test for the loadUser() method. |
1165
|
|
|
* |
1166
|
|
|
* @see \eZ\Publish\API\Repository\UserService::loadUser() |
1167
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser |
1168
|
|
|
*/ |
1169
|
|
|
public function testLoadUser() |
1170
|
|
|
{ |
1171
|
|
|
$repository = $this->getRepository(); |
1172
|
|
|
|
1173
|
|
|
$userService = $repository->getUserService(); |
1174
|
|
|
|
1175
|
|
|
/* BEGIN: Use Case */ |
1176
|
|
|
$user = $this->createUserVersion1(); |
1177
|
|
|
|
1178
|
|
|
// Load the newly created user |
1179
|
|
|
$userReloaded = $userService->loadUser($user->id); |
1180
|
|
|
/* END: Use Case */ |
1181
|
|
|
|
1182
|
|
|
$this->assertEquals($user, $userReloaded); |
1183
|
|
|
} |
1184
|
|
|
|
1185
|
|
|
/** |
1186
|
|
|
* Test for the loadUser() method. |
1187
|
|
|
* |
1188
|
|
|
* @see \eZ\Publish\API\Repository\UserService::loadUser() |
1189
|
|
|
* @expectedException \eZ\Publish\API\Repository\Exceptions\NotFoundException |
1190
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUser |
1191
|
|
|
*/ |
1192
|
|
|
public function testLoadUserThrowsNotFoundException() |
1193
|
|
|
{ |
1194
|
|
|
$repository = $this->getRepository(); |
1195
|
|
|
|
1196
|
|
|
$nonExistingUserId = $this->generateId('user', self::DB_INT_MAX); |
1197
|
|
|
/* BEGIN: Use Case */ |
1198
|
|
|
$userService = $repository->getUserService(); |
1199
|
|
|
|
1200
|
|
|
// This call will fail with a "NotFoundException", because no user with |
1201
|
|
|
// an id equal to self::DB_INT_MAX should exist. |
1202
|
|
|
$userService->loadUser($nonExistingUserId); |
1203
|
|
|
/* END: Use Case */ |
1204
|
|
|
} |
1205
|
|
|
|
1206
|
|
|
/** |
1207
|
|
|
* Test for the loadAnonymousUser() method. |
1208
|
|
|
* |
1209
|
|
|
* @see \eZ\Publish\API\Repository\UserService::loadAnonymousUser() |
1210
|
|
|
*/ |
1211
|
|
|
public function testLoadAnonymousUser() |
1212
|
|
|
{ |
1213
|
|
|
$repository = $this->getRepository(); |
1214
|
|
|
|
1215
|
|
|
$anonymousUserId = $this->generateId('user', 10); |
1216
|
|
|
/* BEGIN: Use Case */ |
1217
|
|
|
// $anonymousUserId is the ID of the "Anonymous" user in a eZ |
1218
|
|
|
// Publish demo installation. |
1219
|
|
|
$userService = $repository->getUserService(); |
1220
|
|
|
|
1221
|
|
|
// Load default anonymous user available in each eZ Publish installation |
1222
|
|
|
$anonymousUser = $userService->loadUser($anonymousUserId); |
1223
|
|
|
/* END: Use Case */ |
1224
|
|
|
|
1225
|
|
|
$this->assertInstanceOf( |
1226
|
|
|
'\\eZ\\Publish\\API\\Repository\\Values\\User\\User', |
1227
|
|
|
$anonymousUser |
1228
|
|
|
); |
1229
|
|
|
|
1230
|
|
|
$this->assertEquals('anonymous', $anonymousUser->login); |
1231
|
|
|
} |
1232
|
|
|
|
1233
|
|
|
/** |
1234
|
|
|
* Test for the loadUserByCredentials() method. |
1235
|
|
|
* |
1236
|
|
|
* @see \eZ\Publish\API\Repository\UserService::loadUserByCredentials() |
1237
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser |
1238
|
|
|
*/ |
1239
|
|
|
public function testLoadUserByCredentials() |
1240
|
|
|
{ |
1241
|
|
|
$repository = $this->getRepository(); |
1242
|
|
|
|
1243
|
|
|
$userService = $repository->getUserService(); |
1244
|
|
|
|
1245
|
|
|
/* BEGIN: Use Case */ |
1246
|
|
|
$user = $this->createUserVersion1(); |
1247
|
|
|
|
1248
|
|
|
// Load the newly created user |
1249
|
|
|
$userReloaded = $userService->loadUserByCredentials('user', 'secret'); |
1250
|
|
|
/* END: Use Case */ |
1251
|
|
|
|
1252
|
|
|
$this->assertEquals($user, $userReloaded); |
1253
|
|
|
} |
1254
|
|
|
|
1255
|
|
|
/** |
1256
|
|
|
* Test for the loadUserByCredentials() method. |
1257
|
|
|
* |
1258
|
|
|
* @see \eZ\Publish\API\Repository\UserService::loadUserByCredentials() |
1259
|
|
|
* @expectedException \eZ\Publish\API\Repository\Exceptions\NotFoundException |
1260
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserByCredentials |
1261
|
|
|
*/ |
1262
|
|
|
public function testLoadUserByCredentialsThrowsNotFoundExceptionForUnknownPassword() |
1263
|
|
|
{ |
1264
|
|
|
$repository = $this->getRepository(); |
1265
|
|
|
|
1266
|
|
|
$userService = $repository->getUserService(); |
1267
|
|
|
|
1268
|
|
|
/* BEGIN: Use Case */ |
1269
|
|
|
$this->createUserVersion1(); |
1270
|
|
|
|
1271
|
|
|
// This call will fail with a "NotFoundException", because the given |
1272
|
|
|
// login/password combination does not exist. |
1273
|
|
|
$userService->loadUserByCredentials('user', 'SeCrEt'); |
1274
|
|
|
/* END: Use Case */ |
1275
|
|
|
} |
1276
|
|
|
|
1277
|
|
|
/** |
1278
|
|
|
* Test for the loadUserByCredentials() method. |
1279
|
|
|
* |
1280
|
|
|
* @see \eZ\Publish\API\Repository\UserService::loadUserByCredentials() |
1281
|
|
|
* @expectedException \eZ\Publish\API\Repository\Exceptions\NotFoundException |
1282
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserByCredentials |
1283
|
|
|
*/ |
1284
|
|
|
public function testLoadUserByCredentialsThrowsNotFoundExceptionForUnknownPasswordEmtpy() |
1285
|
|
|
{ |
1286
|
|
|
$repository = $this->getRepository(); |
1287
|
|
|
|
1288
|
|
|
$userService = $repository->getUserService(); |
1289
|
|
|
|
1290
|
|
|
/* BEGIN: Use Case */ |
1291
|
|
|
$this->createUserVersion1(); |
1292
|
|
|
|
1293
|
|
|
// This call will fail with a "NotFoundException", because the given |
1294
|
|
|
// login/password combination does not exist. |
1295
|
|
|
$userService->loadUserByCredentials('user', ''); |
1296
|
|
|
/* END: Use Case */ |
1297
|
|
|
} |
1298
|
|
|
|
1299
|
|
|
/** |
1300
|
|
|
* Test for the loadUserByCredentials() method. |
1301
|
|
|
* |
1302
|
|
|
* @see \eZ\Publish\API\Repository\UserService::loadUserByCredentials() |
1303
|
|
|
* @expectedException \eZ\Publish\API\Repository\Exceptions\NotFoundException |
1304
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserByCredentials |
1305
|
|
|
*/ |
1306
|
|
|
public function testLoadUserByCredentialsThrowsNotFoundExceptionForUnknownLogin() |
1307
|
|
|
{ |
1308
|
|
|
$repository = $this->getRepository(); |
1309
|
|
|
|
1310
|
|
|
$userService = $repository->getUserService(); |
1311
|
|
|
|
1312
|
|
|
/* BEGIN: Use Case */ |
1313
|
|
|
$this->createUserVersion1(); |
1314
|
|
|
|
1315
|
|
|
// This call will fail with a "NotFoundException", because the given |
1316
|
|
|
// login/password combination does not exist. |
1317
|
|
|
$userService->loadUserByCredentials('üser', 'secret'); |
1318
|
|
|
/* END: Use Case */ |
1319
|
|
|
} |
1320
|
|
|
|
1321
|
|
|
/** |
1322
|
|
|
* Test for the loadUserByCredentials() method. |
1323
|
|
|
* |
1324
|
|
|
* @see \eZ\Publish\API\Repository\UserService::loadUserByCredentials() |
1325
|
|
|
* @expectedException \eZ\Publish\Core\Base\Exceptions\InvalidArgumentValue |
1326
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserByCredentials |
1327
|
|
|
*/ |
1328
|
|
|
public function testLoadUserByCredentialsThrowsInvalidArgumentValueForEmptyLogin() |
1329
|
|
|
{ |
1330
|
|
|
$repository = $this->getRepository(); |
1331
|
|
|
|
1332
|
|
|
$userService = $repository->getUserService(); |
1333
|
|
|
|
1334
|
|
|
/* BEGIN: Use Case */ |
1335
|
|
|
$this->createUserVersion1(); |
1336
|
|
|
|
1337
|
|
|
// This call will fail with a "InvalidArgumentValue", because the given |
1338
|
|
|
// login is empty. |
1339
|
|
|
$userService->loadUserByCredentials('', 'secret'); |
1340
|
|
|
/* END: Use Case */ |
1341
|
|
|
} |
1342
|
|
|
|
1343
|
|
|
/** |
1344
|
|
|
* Test for the loadUserByLogin() method. |
1345
|
|
|
* |
1346
|
|
|
* @see \eZ\Publish\API\Repository\UserService::loadUserByLogin() |
1347
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser |
1348
|
|
|
*/ |
1349
|
|
View Code Duplication |
public function testLoadUserByLogin() |
1350
|
|
|
{ |
1351
|
|
|
$repository = $this->getRepository(); |
1352
|
|
|
|
1353
|
|
|
$userService = $repository->getUserService(); |
1354
|
|
|
|
1355
|
|
|
/* BEGIN: Use Case */ |
1356
|
|
|
$user = $this->createUserVersion1(); |
1357
|
|
|
|
1358
|
|
|
// Load the newly created user |
1359
|
|
|
$userReloaded = $userService->loadUserByLogin('user'); |
1360
|
|
|
/* END: Use Case */ |
1361
|
|
|
|
1362
|
|
|
$this->assertPropertiesCorrect( |
1363
|
|
|
array( |
1364
|
|
|
'login' => $user->login, |
1365
|
|
|
'email' => $user->email, |
1366
|
|
|
'passwordHash' => $user->passwordHash, |
1367
|
|
|
'hashAlgorithm' => $user->hashAlgorithm, |
1368
|
|
|
'enabled' => $user->enabled, |
1369
|
|
|
'maxLogin' => $user->maxLogin, |
1370
|
|
|
'id' => $user->id, |
1371
|
|
|
'contentInfo' => $user->contentInfo, |
1372
|
|
|
'versionInfo' => $user->versionInfo, |
1373
|
|
|
'fields' => $user->fields, |
1374
|
|
|
), |
1375
|
|
|
$userReloaded |
1376
|
|
|
); |
1377
|
|
|
} |
1378
|
|
|
|
1379
|
|
|
/** |
1380
|
|
|
* Test for the loadUserByLogin() method. |
1381
|
|
|
* |
1382
|
|
|
* @see \eZ\Publish\API\Repository\UserService::loadUserByLogin() |
1383
|
|
|
* @expectedException \eZ\Publish\API\Repository\Exceptions\NotFoundException |
1384
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserByLogin |
1385
|
|
|
*/ |
1386
|
|
|
public function testLoadUserByLoginThrowsNotFoundExceptionForUnknownLogin() |
1387
|
|
|
{ |
1388
|
|
|
$repository = $this->getRepository(); |
1389
|
|
|
|
1390
|
|
|
$userService = $repository->getUserService(); |
1391
|
|
|
|
1392
|
|
|
/* BEGIN: Use Case */ |
1393
|
|
|
$this->createUserVersion1(); |
1394
|
|
|
|
1395
|
|
|
// This call will fail with a "NotFoundException", because the given |
1396
|
|
|
// login/password combination does not exist. |
1397
|
|
|
$userService->loadUserByLogin('user42'); |
1398
|
|
|
/* END: Use Case */ |
1399
|
|
|
} |
1400
|
|
|
|
1401
|
|
|
/** |
1402
|
|
|
* Test for the loadUserByLogin() method. |
1403
|
|
|
* |
1404
|
|
|
* @see \eZ\Publish\API\Repository\UserService::loadUserByLogin() |
1405
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserByLogin |
1406
|
|
|
*/ |
1407
|
|
View Code Duplication |
public function testLoadUserByLoginWorksForLoginWithWrongCase() |
1408
|
|
|
{ |
1409
|
|
|
$repository = $this->getRepository(); |
1410
|
|
|
|
1411
|
|
|
$userService = $repository->getUserService(); |
1412
|
|
|
|
1413
|
|
|
/* BEGIN: Use Case */ |
1414
|
|
|
$user = $this->createUserVersion1(); |
1415
|
|
|
|
1416
|
|
|
// Lookup by user login should ignore casing |
1417
|
|
|
$userReloaded = $userService->loadUserByLogin('USER'); |
1418
|
|
|
/* END: Use Case */ |
1419
|
|
|
|
1420
|
|
|
$this->assertPropertiesCorrect( |
1421
|
|
|
array( |
1422
|
|
|
'login' => $user->login, |
1423
|
|
|
'email' => $user->email, |
1424
|
|
|
'passwordHash' => $user->passwordHash, |
1425
|
|
|
'hashAlgorithm' => $user->hashAlgorithm, |
1426
|
|
|
'enabled' => $user->enabled, |
1427
|
|
|
'maxLogin' => $user->maxLogin, |
1428
|
|
|
'id' => $user->id, |
1429
|
|
|
'contentInfo' => $user->contentInfo, |
1430
|
|
|
'versionInfo' => $user->versionInfo, |
1431
|
|
|
'fields' => $user->fields, |
1432
|
|
|
), |
1433
|
|
|
$userReloaded |
1434
|
|
|
); |
1435
|
|
|
} |
1436
|
|
|
|
1437
|
|
|
/** |
1438
|
|
|
* Test for the loadUsersByEmail() method. |
1439
|
|
|
* |
1440
|
|
|
* @see \eZ\Publish\API\Repository\UserService::loadUsersByEmail() |
1441
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser |
1442
|
|
|
*/ |
1443
|
|
View Code Duplication |
public function testLoadUserByEmail() |
1444
|
|
|
{ |
1445
|
|
|
$repository = $this->getRepository(); |
1446
|
|
|
|
1447
|
|
|
$userService = $repository->getUserService(); |
1448
|
|
|
|
1449
|
|
|
/* BEGIN: Use Case */ |
1450
|
|
|
$user = $this->createUserVersion1(); |
1451
|
|
|
|
1452
|
|
|
// Load the newly created user |
1453
|
|
|
$usersReloaded = $userService->loadUsersByEmail('[email protected]'); |
1454
|
|
|
/* END: Use Case */ |
1455
|
|
|
|
1456
|
|
|
$this->assertEquals(array($user), $usersReloaded); |
1457
|
|
|
} |
1458
|
|
|
|
1459
|
|
|
/** |
1460
|
|
|
* Test for the loadUsersByEmail() method. |
1461
|
|
|
* |
1462
|
|
|
* @see \eZ\Publish\API\Repository\UserService::loadUsersByEmail() |
1463
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserByEmail |
1464
|
|
|
*/ |
1465
|
|
View Code Duplication |
public function testLoadUserByEmailReturnsEmptyInUnknownEmail() |
1466
|
|
|
{ |
1467
|
|
|
$repository = $this->getRepository(); |
1468
|
|
|
|
1469
|
|
|
$userService = $repository->getUserService(); |
1470
|
|
|
|
1471
|
|
|
/* BEGIN: Use Case */ |
1472
|
|
|
$this->createUserVersion1(); |
1473
|
|
|
|
1474
|
|
|
// This call will return empty array, because the given |
1475
|
|
|
// login/password combination does not exist. |
1476
|
|
|
$emptyUserList = $userService->loadUsersByEmail('[email protected]'); |
1477
|
|
|
/* END: Use Case */ |
1478
|
|
|
|
1479
|
|
|
$this->assertEquals(array(), $emptyUserList); |
1480
|
|
|
} |
1481
|
|
|
|
1482
|
|
|
/** |
1483
|
|
|
* Test for the deleteUser() method. |
1484
|
|
|
* |
1485
|
|
|
* @see \eZ\Publish\API\Repository\UserService::deleteUser() |
1486
|
|
|
* @expectedException \eZ\Publish\API\Repository\Exceptions\NotFoundException |
1487
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser |
1488
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUser |
1489
|
|
|
*/ |
1490
|
|
View Code Duplication |
public function testDeleteUser() |
1491
|
|
|
{ |
1492
|
|
|
$repository = $this->getRepository(); |
1493
|
|
|
|
1494
|
|
|
$userService = $repository->getUserService(); |
1495
|
|
|
|
1496
|
|
|
/* BEGIN: Use Case */ |
1497
|
|
|
$user = $this->createUserVersion1(); |
1498
|
|
|
|
1499
|
|
|
// Delete the currently created user |
1500
|
|
|
$userService->deleteUser($user); |
1501
|
|
|
/* END: Use Case */ |
1502
|
|
|
|
1503
|
|
|
// We use the NotFoundException here to verify that the user not exists |
1504
|
|
|
$userService->loadUser($user->id); |
1505
|
|
|
} |
1506
|
|
|
|
1507
|
|
|
/** |
1508
|
|
|
* Test for the newUserUpdateStruct() method. |
1509
|
|
|
* |
1510
|
|
|
* @see \eZ\Publish\API\Repository\UserService::newUserUpdateStruct() |
1511
|
|
|
*/ |
1512
|
|
|
public function testNewUserUpdateStruct() |
1513
|
|
|
{ |
1514
|
|
|
$repository = $this->getRepository(); |
1515
|
|
|
|
1516
|
|
|
/* BEGIN: Use Case */ |
1517
|
|
|
$userService = $repository->getUserService(); |
1518
|
|
|
|
1519
|
|
|
// Create a new update struct instance |
1520
|
|
|
$userUpdate = $userService->newUserUpdateStruct(); |
1521
|
|
|
/* END: Use Case */ |
1522
|
|
|
|
1523
|
|
|
$this->assertInstanceOf( |
1524
|
|
|
UserUpdateStruct::class, |
1525
|
|
|
$userUpdate |
1526
|
|
|
); |
1527
|
|
|
|
1528
|
|
|
$this->assertNull($userUpdate->contentUpdateStruct); |
1529
|
|
|
$this->assertNull($userUpdate->contentMetadataUpdateStruct); |
1530
|
|
|
|
1531
|
|
|
$this->assertPropertiesCorrect( |
1532
|
|
|
[ |
1533
|
|
|
'email' => null, |
1534
|
|
|
'password' => null, |
1535
|
|
|
'enabled' => null, |
1536
|
|
|
'maxLogin' => null, |
1537
|
|
|
], |
1538
|
|
|
$userUpdate |
1539
|
|
|
); |
1540
|
|
|
} |
1541
|
|
|
|
1542
|
|
|
/** |
1543
|
|
|
* Test for the updateUser() method. |
1544
|
|
|
* |
1545
|
|
|
* @return \eZ\Publish\API\Repository\Values\User\User |
1546
|
|
|
* |
1547
|
|
|
* @see \eZ\Publish\API\Repository\UserService::updateUser() |
1548
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser |
1549
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testNewUserUpdateStruct |
1550
|
|
|
* @depends eZ\Publish\API\Repository\Tests\ContentServiceTest::testUpdateContent |
1551
|
|
|
* @depends eZ\Publish\API\Repository\Tests\ContentServiceTest::testUpdateContentMetadata |
1552
|
|
|
*/ |
1553
|
|
|
public function testUpdateUser() |
1554
|
|
|
{ |
1555
|
|
|
$repository = $this->getRepository(); |
1556
|
|
|
|
1557
|
|
|
$userService = $repository->getUserService(); |
1558
|
|
|
|
1559
|
|
|
/* BEGIN: Use Case */ |
1560
|
|
|
$user = $this->createUserVersion1(); |
1561
|
|
|
|
1562
|
|
|
// Create a new update struct instance |
1563
|
|
|
$userUpdate = $userService->newUserUpdateStruct(); |
1564
|
|
|
|
1565
|
|
|
// Set new values for password and maxLogin |
1566
|
|
|
$userUpdate->password = 'my-new-password'; |
1567
|
|
|
$userUpdate->maxLogin = 42; |
1568
|
|
|
$userUpdate->enabled = false; |
1569
|
|
|
|
1570
|
|
|
// Updated the user record. |
1571
|
|
|
$userVersion2 = $userService->updateUser($user, $userUpdate); |
1572
|
|
|
/* END: Use Case */ |
1573
|
|
|
|
1574
|
|
|
$this->assertInstanceOf( |
1575
|
|
|
'\\eZ\\Publish\\API\\Repository\\Values\\User\\User', |
1576
|
|
|
$user |
1577
|
|
|
); |
1578
|
|
|
|
1579
|
|
|
return $userVersion2; |
1580
|
|
|
} |
1581
|
|
|
|
1582
|
|
|
/** |
1583
|
|
|
* Test for the updateUser() method. |
1584
|
|
|
* |
1585
|
|
|
* @param \eZ\Publish\API\Repository\Values\User\User $user |
1586
|
|
|
* |
1587
|
|
|
* @see \eZ\Publish\API\Repository\UserService::updateUser() |
1588
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testUpdateUser |
1589
|
|
|
*/ |
1590
|
|
|
public function testUpdateUserUpdatesExpectedProperties(User $user) |
1591
|
|
|
{ |
1592
|
|
|
$this->assertEquals( |
1593
|
|
|
array( |
1594
|
|
|
'login' => 'user', |
1595
|
|
|
'email' => '[email protected]', |
1596
|
|
|
'passwordHash' => $this->createHash( |
1597
|
|
|
'user', |
1598
|
|
|
'my-new-password', |
1599
|
|
|
$user->hashAlgorithm |
1600
|
|
|
), |
1601
|
|
|
'maxLogin' => 42, |
1602
|
|
|
'enabled' => false, |
1603
|
|
|
), |
1604
|
|
|
array( |
1605
|
|
|
'login' => $user->login, |
1606
|
|
|
'email' => $user->email, |
1607
|
|
|
'passwordHash' => $user->passwordHash, |
1608
|
|
|
'maxLogin' => $user->maxLogin, |
1609
|
|
|
'enabled' => $user->enabled, |
1610
|
|
|
) |
1611
|
|
|
); |
1612
|
|
|
} |
1613
|
|
|
|
1614
|
|
|
/** |
1615
|
|
|
* Test for the updateUser() method. |
1616
|
|
|
* |
1617
|
|
|
* @param \eZ\Publish\API\Repository\Values\User\User $user |
1618
|
|
|
* |
1619
|
|
|
* @see \eZ\Publish\API\Repository\UserService::updateUser() |
1620
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testUpdateUser |
1621
|
|
|
*/ |
1622
|
|
|
public function testUpdateUserReturnsPublishedVersion($user) |
1623
|
|
|
{ |
1624
|
|
|
$this->assertEquals( |
1625
|
|
|
APIVersionInfo::STATUS_PUBLISHED, |
1626
|
|
|
$user->getVersionInfo()->status |
1627
|
|
|
); |
1628
|
|
|
} |
1629
|
|
|
|
1630
|
|
|
/** |
1631
|
|
|
* Test for the updateUser() method. |
1632
|
|
|
* |
1633
|
|
|
* @see \eZ\Publish\API\Repository\UserService::updateUser() |
1634
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testUpdateUser |
1635
|
|
|
*/ |
1636
|
|
|
public function testUpdateUserWithContentMetadataUpdateStruct() |
1637
|
|
|
{ |
1638
|
|
|
$repository = $this->getRepository(); |
1639
|
|
|
|
1640
|
|
|
$userService = $repository->getUserService(); |
1641
|
|
|
|
1642
|
|
|
/* BEGIN: Use Case */ |
1643
|
|
|
$user = $this->createUserVersion1(); |
1644
|
|
|
|
1645
|
|
|
// Get the ContentService implementation |
1646
|
|
|
$contentService = $repository->getContentService(); |
1647
|
|
|
|
1648
|
|
|
// Create a metadata update struct and change the remote id. |
1649
|
|
|
$metadataUpdate = $contentService->newContentMetadataUpdateStruct(); |
1650
|
|
|
$metadataUpdate->remoteId = '85e10037d1ac0a00aa75443ced483e08'; |
1651
|
|
|
|
1652
|
|
|
// Create a new update struct instance |
1653
|
|
|
$userUpdate = $userService->newUserUpdateStruct(); |
1654
|
|
|
|
1655
|
|
|
// Set the metadata update struct. |
1656
|
|
|
$userUpdate->contentMetadataUpdateStruct = $metadataUpdate; |
1657
|
|
|
|
1658
|
|
|
// Updated the user record. |
1659
|
|
|
$userVersion2 = $userService->updateUser($user, $userUpdate); |
1660
|
|
|
|
1661
|
|
|
// The contentInfo->remoteId will be changed now. |
1662
|
|
|
$remoteId = $userVersion2->contentInfo->remoteId; |
1663
|
|
|
/* END: Use Case */ |
1664
|
|
|
|
1665
|
|
|
$this->assertEquals('85e10037d1ac0a00aa75443ced483e08', $remoteId); |
1666
|
|
|
} |
1667
|
|
|
|
1668
|
|
|
/** |
1669
|
|
|
* Test for the updateUser() method. |
1670
|
|
|
* |
1671
|
|
|
* @see \eZ\Publish\API\Repository\UserService::updateUser() |
1672
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testUpdateUser |
1673
|
|
|
*/ |
1674
|
|
|
public function testUpdateUserWithContentUpdateStruct() |
1675
|
|
|
{ |
1676
|
|
|
$repository = $this->getRepository(); |
1677
|
|
|
|
1678
|
|
|
$userService = $repository->getUserService(); |
1679
|
|
|
|
1680
|
|
|
/* BEGIN: Use Case */ |
1681
|
|
|
$user = $this->createUserVersion1(); |
1682
|
|
|
|
1683
|
|
|
// Get the ContentService implementation |
1684
|
|
|
$contentService = $repository->getContentService(); |
1685
|
|
|
|
1686
|
|
|
// Create a content update struct and change the remote id. |
1687
|
|
|
$contentUpdate = $contentService->newContentUpdateStruct(); |
1688
|
|
|
$contentUpdate->setField('first_name', 'Hello', 'eng-US'); |
1689
|
|
|
$contentUpdate->setField('last_name', 'World', 'eng-US'); |
1690
|
|
|
|
1691
|
|
|
// Create a new update struct instance |
1692
|
|
|
$userUpdate = $userService->newUserUpdateStruct(); |
1693
|
|
|
|
1694
|
|
|
// Set the content update struct. |
1695
|
|
|
$userUpdate->contentUpdateStruct = $contentUpdate; |
1696
|
|
|
|
1697
|
|
|
// Updated the user record. |
1698
|
|
|
$userVersion2 = $userService->updateUser($user, $userUpdate); |
1699
|
|
|
|
1700
|
|
|
$name = sprintf( |
1701
|
|
|
'%s %s', |
1702
|
|
|
$userVersion2->getFieldValue('first_name'), |
1703
|
|
|
$userVersion2->getFieldValue('last_name') |
1704
|
|
|
); |
1705
|
|
|
/* END: Use Case */ |
1706
|
|
|
|
1707
|
|
|
$this->assertEquals('Hello World', $name); |
1708
|
|
|
} |
1709
|
|
|
|
1710
|
|
|
/** |
1711
|
|
|
* Test for the updateUser() method. |
1712
|
|
|
* |
1713
|
|
|
* @see \eZ\Publish\API\Repository\UserService::updateUser() |
1714
|
|
|
* @expectedException \eZ\Publish\API\Repository\Exceptions\ContentFieldValidationException |
1715
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testUpdateUser |
1716
|
|
|
*/ |
1717
|
|
View Code Duplication |
public function testUpdateUserWhenMissingField() |
1718
|
|
|
{ |
1719
|
|
|
$repository = $this->getRepository(); |
1720
|
|
|
|
1721
|
|
|
$userService = $repository->getUserService(); |
1722
|
|
|
|
1723
|
|
|
/* BEGIN: Use Case */ |
1724
|
|
|
$user = $this->createUserVersion1(); |
1725
|
|
|
|
1726
|
|
|
// Get the ContentService implementation |
1727
|
|
|
$contentService = $repository->getContentService(); |
1728
|
|
|
|
1729
|
|
|
// Create a content update struct and change the remote id. |
1730
|
|
|
$contentUpdate = $contentService->newContentUpdateStruct(); |
1731
|
|
|
$contentUpdate->setField('first_name', null, 'eng-US'); |
1732
|
|
|
|
1733
|
|
|
// Create a new update struct instance |
1734
|
|
|
$userUpdate = $userService->newUserUpdateStruct(); |
1735
|
|
|
|
1736
|
|
|
// Set the content update struct. |
1737
|
|
|
$userUpdate->contentUpdateStruct = $contentUpdate; |
1738
|
|
|
|
1739
|
|
|
// This call will fail with a "ContentFieldValidationException" because the |
1740
|
|
|
// mandatory field "first_name" is set to an empty value. |
1741
|
|
|
$userService->updateUser($user, $userUpdate); |
1742
|
|
|
|
1743
|
|
|
/* END: Use Case */ |
1744
|
|
|
} |
1745
|
|
|
|
1746
|
|
|
/** |
1747
|
|
|
* Test for the updateUser() method. |
1748
|
|
|
* |
1749
|
|
|
* @see \eZ\Publish\API\Repository\UserService::updateUser() |
1750
|
|
|
* @expectedException \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException |
1751
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testUpdateUser |
1752
|
|
|
*/ |
1753
|
|
View Code Duplication |
public function testUpdateUserThrowsInvalidArgumentExceptionOnFieldTypeNotAccept() |
1754
|
|
|
{ |
1755
|
|
|
$repository = $this->getRepository(); |
1756
|
|
|
|
1757
|
|
|
$userService = $repository->getUserService(); |
1758
|
|
|
|
1759
|
|
|
/* BEGIN: Use Case */ |
1760
|
|
|
$user = $this->createUserVersion1(); |
1761
|
|
|
|
1762
|
|
|
// Get the ContentService implementation |
1763
|
|
|
$contentService = $repository->getContentService(); |
1764
|
|
|
|
1765
|
|
|
$contentUpdate = $contentService->newContentUpdateStruct(); |
1766
|
|
|
// An object of stdClass is not valid for the field first_name |
1767
|
|
|
$contentUpdate->setField('first_name', new \stdClass(), 'eng-US'); |
1768
|
|
|
|
1769
|
|
|
// Create a new update struct instance |
1770
|
|
|
$userUpdate = $userService->newUserUpdateStruct(); |
1771
|
|
|
|
1772
|
|
|
// Set the content update struct. |
1773
|
|
|
$userUpdate->contentUpdateStruct = $contentUpdate; |
1774
|
|
|
|
1775
|
|
|
// This call will fail with a "InvalidArgumentException" because the |
1776
|
|
|
// the field "first_name" does not accept the given value. |
1777
|
|
|
$userService->updateUser($user, $userUpdate); |
1778
|
|
|
|
1779
|
|
|
/* END: Use Case */ |
1780
|
|
|
} |
1781
|
|
|
|
1782
|
|
|
/** |
1783
|
|
|
* Test for the loadUserGroupsOfUser() method. |
1784
|
|
|
* |
1785
|
|
|
* @covers \eZ\Publish\API\Repository\UserService::loadUserGroupsOfUser |
1786
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser |
1787
|
|
|
*/ |
1788
|
|
|
public function testLoadUserGroupsOfUser() |
1789
|
|
|
{ |
1790
|
|
|
$repository = $this->getRepository(); |
1791
|
|
|
|
1792
|
|
|
$userService = $repository->getUserService(); |
1793
|
|
|
|
1794
|
|
|
/* BEGIN: Use Case */ |
1795
|
|
|
$user = $this->createUserVersion1(); |
1796
|
|
|
|
1797
|
|
|
// This array will contain the "Editors" user group name |
1798
|
|
|
$userGroupNames = []; |
1799
|
|
|
foreach ($userService->loadUserGroupsOfUser($user) as $userGroup) { |
1800
|
|
|
$this->assertInstanceOf(UserGroup::class, $userGroup); |
1801
|
|
|
$userGroupNames[] = $userGroup->getFieldValue('name'); |
1802
|
|
|
} |
1803
|
|
|
/* END: Use Case */ |
1804
|
|
|
|
1805
|
|
|
$this->assertEquals(['Editors'], $userGroupNames); |
1806
|
|
|
} |
1807
|
|
|
|
1808
|
|
|
/** |
1809
|
|
|
* Test for the loadUsersOfUserGroup() method. |
1810
|
|
|
* |
1811
|
|
|
* @covers \eZ\Publish\API\Repository\UserService::loadUsersOfUserGroup |
1812
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testCreateUser |
1813
|
|
|
*/ |
1814
|
|
|
public function testLoadUsersOfUserGroup() |
1815
|
|
|
{ |
1816
|
|
|
$repository = $this->getRepository(); |
1817
|
|
|
$userService = $repository->getUserService(); |
1818
|
|
|
|
1819
|
|
|
$group = $userService->loadUserGroup($this->generateId('group', 13)); |
1820
|
|
|
|
1821
|
|
|
/* BEGIN: Use Case */ |
1822
|
|
|
$this->createUserVersion1(); |
1823
|
|
|
|
1824
|
|
|
$this->refreshSearch($repository); |
1825
|
|
|
|
1826
|
|
|
// This array will contain the email of the newly created "Editor" user |
1827
|
|
|
$email = array(); |
1828
|
|
|
foreach ($userService->loadUsersOfUserGroup($group) as $user) { |
1829
|
|
|
$this->assertInstanceOf(User::class, $user); |
1830
|
|
|
$email[] = $user->email; |
1831
|
|
|
} |
1832
|
|
|
/* END: Use Case */ |
1833
|
|
|
$this->assertEquals(array('[email protected]'), $email); |
1834
|
|
|
} |
1835
|
|
|
|
1836
|
|
|
/** |
1837
|
|
|
* Test for the assignUserToUserGroup() method. |
1838
|
|
|
* |
1839
|
|
|
* @see \eZ\Publish\API\Repository\UserService::assignUserToUserGroup() |
1840
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserGroupsOfUser |
1841
|
|
|
*/ |
1842
|
|
|
public function testAssignUserToUserGroup() |
1843
|
|
|
{ |
1844
|
|
|
$repository = $this->getRepository(); |
1845
|
|
|
$userService = $repository->getUserService(); |
1846
|
|
|
|
1847
|
|
|
$administratorGroupId = $this->generateId('group', 12); |
1848
|
|
|
/* BEGIN: Use Case */ |
1849
|
|
|
// $administratorGroupId is the ID of the "Administrator" group in an |
1850
|
|
|
// eZ Publish demo installation |
1851
|
|
|
|
1852
|
|
|
$user = $this->createUserVersion1(); |
1853
|
|
|
|
1854
|
|
|
// Assign group to newly created user |
1855
|
|
|
$userService->assignUserToUserGroup( |
1856
|
|
|
$user, |
1857
|
|
|
$userService->loadUserGroup($administratorGroupId) |
1858
|
|
|
); |
1859
|
|
|
|
1860
|
|
|
// This array will contain "Editors" and "Administrator users" |
1861
|
|
|
$userGroupNames = array(); |
1862
|
|
|
foreach ($userService->loadUserGroupsOfUser($user) as $userGroup) { |
1863
|
|
|
$userGroupNames[] = $userGroup->getFieldValue('name'); |
1864
|
|
|
} |
1865
|
|
|
/* END: Use Case */ |
1866
|
|
|
|
1867
|
|
|
sort($userGroupNames, SORT_STRING); |
1868
|
|
|
|
1869
|
|
|
$this->assertEquals( |
1870
|
|
|
array( |
1871
|
|
|
'Administrator users', |
1872
|
|
|
'Editors', |
1873
|
|
|
), |
1874
|
|
|
$userGroupNames |
1875
|
|
|
); |
1876
|
|
|
} |
1877
|
|
|
|
1878
|
|
|
/** |
1879
|
|
|
* Test for the assignUserToUserGroup() method. |
1880
|
|
|
* |
1881
|
|
|
* @covers \eZ\Publish\API\Repository\UserService::assignUserToUserGroup |
1882
|
|
|
* @expectedException \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException |
1883
|
|
|
* @expectedExceptionMessage Argument 'user' is invalid: user is already in the given user group |
1884
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testAssignUserToUserGroup |
1885
|
|
|
*/ |
1886
|
|
View Code Duplication |
public function testAssignUserToUserGroupThrowsInvalidArgumentException() |
1887
|
|
|
{ |
1888
|
|
|
$repository = $this->getRepository(); |
1889
|
|
|
$userService = $repository->getUserService(); |
1890
|
|
|
|
1891
|
|
|
$editorsGroupId = $this->generateId('group', 13); |
1892
|
|
|
/* BEGIN: Use Case */ |
1893
|
|
|
$user = $this->createUserVersion1(); |
1894
|
|
|
// $editorsGroupId is the ID of the "Editors" group in an |
1895
|
|
|
// eZ Publish demo installation |
1896
|
|
|
|
1897
|
|
|
// This call will fail with an "InvalidArgumentException", because the |
1898
|
|
|
// user is already assigned to the "Editors" group |
1899
|
|
|
$userService->assignUserToUserGroup( |
1900
|
|
|
$user, |
1901
|
|
|
$userService->loadUserGroup($editorsGroupId) |
1902
|
|
|
); |
1903
|
|
|
/* END: Use Case */ |
1904
|
|
|
} |
1905
|
|
|
|
1906
|
|
|
/** |
1907
|
|
|
* Test for the unAssignUssrFromUserGroup() method. |
1908
|
|
|
* |
1909
|
|
|
* @see \eZ\Publish\API\Repository\UserService::unAssignUssrFromUserGroup() |
1910
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testLoadUserGroupsOfUser |
1911
|
|
|
*/ |
1912
|
|
|
public function testUnAssignUserFromUserGroup() |
1913
|
|
|
{ |
1914
|
|
|
$repository = $this->getRepository(); |
1915
|
|
|
$userService = $repository->getUserService(); |
1916
|
|
|
|
1917
|
|
|
$editorsGroupId = $this->generateId('group', 13); |
1918
|
|
|
$anonymousGroupId = $this->generateId('group', 42); |
1919
|
|
|
|
1920
|
|
|
/* BEGIN: Use Case */ |
1921
|
|
|
// $anonymousGroupId is the ID of the "Anonymous Users" group in an eZ |
1922
|
|
|
// Publish demo installation |
1923
|
|
|
|
1924
|
|
|
$user = $this->createUserVersion1(); |
1925
|
|
|
|
1926
|
|
|
// Assign group to newly created user |
1927
|
|
|
$userService->assignUserToUserGroup( |
1928
|
|
|
$user, |
1929
|
|
|
$userService->loadUserGroup($anonymousGroupId) |
1930
|
|
|
); |
1931
|
|
|
|
1932
|
|
|
// Unassign user from "Editors" group |
1933
|
|
|
$userService->unAssignUserFromUserGroup( |
1934
|
|
|
$user, |
1935
|
|
|
$userService->loadUserGroup($editorsGroupId) |
1936
|
|
|
); |
1937
|
|
|
|
1938
|
|
|
// This array will contain "Anonymous Users" |
1939
|
|
|
$userGroupNames = array(); |
1940
|
|
|
foreach ($userService->loadUserGroupsOfUser($user) as $userGroup) { |
1941
|
|
|
$userGroupNames[] = $userGroup->getFieldValue('name'); |
1942
|
|
|
} |
1943
|
|
|
/* END: Use Case */ |
1944
|
|
|
|
1945
|
|
|
$this->assertEquals(array('Anonymous Users'), $userGroupNames); |
1946
|
|
|
} |
1947
|
|
|
|
1948
|
|
|
/** |
1949
|
|
|
* Test for the unAssignUserFromUserGroup() method. |
1950
|
|
|
* |
1951
|
|
|
* @see \eZ\Publish\API\Repository\UserService::unAssignUserFromUserGroup() |
1952
|
|
|
* @expectedException \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException |
1953
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testUnAssignUserFromUserGroup |
1954
|
|
|
*/ |
1955
|
|
|
public function testUnAssignUserFromUserGroupThrowsInvalidArgumentException() |
1956
|
|
|
{ |
1957
|
|
|
$repository = $this->getRepository(); |
1958
|
|
|
$userService = $repository->getUserService(); |
1959
|
|
|
|
1960
|
|
|
$administratorGroupId = $this->generateId('group', 12); |
1961
|
|
|
/* BEGIN: Use Case */ |
1962
|
|
|
$user = $this->createUserVersion1(); |
1963
|
|
|
// $administratorGroupId is the ID of the "Administrator" group in an |
1964
|
|
|
// eZ Publish demo installation |
1965
|
|
|
|
1966
|
|
|
// This call will fail with an "InvalidArgumentException", because the |
1967
|
|
|
// user is not assigned to the "Administrator" group |
1968
|
|
|
$userService->unAssignUserFromUserGroup( |
1969
|
|
|
$user, |
1970
|
|
|
$userService->loadUserGroup($administratorGroupId) |
1971
|
|
|
); |
1972
|
|
|
/* END: Use Case */ |
1973
|
|
|
} |
1974
|
|
|
|
1975
|
|
|
/** |
1976
|
|
|
* Test for the unAssignUserFromUserGroup() method removing user from the last group. |
1977
|
|
|
* |
1978
|
|
|
* @covers \eZ\Publish\API\Repository\UserService::unAssignUserFromUserGroup |
1979
|
|
|
* @expectedException \eZ\Publish\API\Repository\Exceptions\BadStateException |
1980
|
|
|
* @expectedExceptionMessage Argument 'user' has a bad state: user only has one user group, cannot unassign from last group |
1981
|
|
|
* @depends eZ\Publish\API\Repository\Tests\UserServiceTest::testUnAssignUserFromUserGroup |
1982
|
|
|
*/ |
1983
|
|
|
public function testUnAssignUserFromUserGroupThrowsBadStateArgumentException() |
1984
|
|
|
{ |
1985
|
|
|
$repository = $this->getRepository(); |
1986
|
|
|
$userService = $repository->getUserService(); |
1987
|
|
|
|
1988
|
|
|
$editorsGroupId = $this->generateId('group', 13); |
1989
|
|
|
/* BEGIN: Use Case */ |
1990
|
|
|
$user = $this->createUserVersion1(); |
1991
|
|
|
|
1992
|
|
|
// This call will fail with an "BadStateException", because the |
1993
|
|
|
// user has to be assigned to at least one group |
1994
|
|
|
$userService->unAssignUserFromUserGroup( |
1995
|
|
|
$user, |
1996
|
|
|
$userService->loadUserGroup($editorsGroupId) |
1997
|
|
|
); |
1998
|
|
|
/* END: Use Case */ |
1999
|
|
|
} |
2000
|
|
|
|
2001
|
|
|
/** |
2002
|
|
|
* Test that multi-language logic for the loadUserGroup method respects prioritized language list. |
2003
|
|
|
* |
2004
|
|
|
* @covers \eZ\Publish\API\Repository\UserService::loadUserGroup |
2005
|
|
|
* @dataProvider getPrioritizedLanguageList |
2006
|
|
|
* @param string[] $prioritizedLanguages |
2007
|
|
|
* @param string|null $expectedLanguageCode language code of expected translation |
2008
|
|
|
*/ |
2009
|
|
|
public function testLoadUserGroupWithPrioritizedLanguagesList( |
2010
|
|
|
array $prioritizedLanguages, |
2011
|
|
|
$expectedLanguageCode |
2012
|
|
|
) { |
2013
|
|
|
$repository = $this->getRepository(); |
2014
|
|
|
$userService = $repository->getUserService(); |
2015
|
|
|
|
2016
|
|
|
$userGroup = $this->createMultiLanguageUserGroup(); |
2017
|
|
|
if ($expectedLanguageCode === null) { |
2018
|
|
|
$expectedLanguageCode = $userGroup->contentInfo->mainLanguageCode; |
2019
|
|
|
} |
2020
|
|
|
|
2021
|
|
|
$loadedUserGroup = $userService->loadUserGroup($userGroup->id, $prioritizedLanguages); |
2022
|
|
|
|
2023
|
|
|
self::assertEquals( |
2024
|
|
|
$loadedUserGroup->getName($expectedLanguageCode), |
2025
|
|
|
$loadedUserGroup->getName() |
2026
|
|
|
); |
2027
|
|
|
self::assertEquals( |
2028
|
|
|
$loadedUserGroup->getFieldValue('description', $expectedLanguageCode), |
2029
|
|
|
$loadedUserGroup->getFieldValue('description') |
2030
|
|
|
); |
2031
|
|
|
} |
2032
|
|
|
|
2033
|
|
|
/** |
2034
|
|
|
* Test that multi-language logic works correctly after updating user group main language. |
2035
|
|
|
* |
2036
|
|
|
* @covers \eZ\Publish\API\Repository\UserService::loadUserGroup |
2037
|
|
|
* @dataProvider getPrioritizedLanguageList |
2038
|
|
|
* @param string[] $prioritizedLanguages |
2039
|
|
|
* @param string|null $expectedLanguageCode language code of expected translation |
2040
|
|
|
*/ |
2041
|
|
|
public function testLoadUserGroupWithPrioritizedLanguagesListAfterMainLanguageUpdate( |
2042
|
|
|
array $prioritizedLanguages, |
2043
|
|
|
$expectedLanguageCode |
2044
|
|
|
) { |
2045
|
|
|
$repository = $this->getRepository(); |
2046
|
|
|
$userService = $repository->getUserService(); |
2047
|
|
|
$contentService = $repository->getContentService(); |
2048
|
|
|
|
2049
|
|
|
$userGroup = $this->createMultiLanguageUserGroup(); |
2050
|
|
|
|
2051
|
|
|
$userGroupUpdateStruct = $userService->newUserGroupUpdateStruct(); |
2052
|
|
|
$userGroupUpdateStruct->contentMetadataUpdateStruct = $contentService->newContentMetadataUpdateStruct(); |
2053
|
|
|
$userGroupUpdateStruct->contentMetadataUpdateStruct->mainLanguageCode = 'eng-GB'; |
2054
|
|
|
$userService->updateUserGroup($userGroup, $userGroupUpdateStruct); |
2055
|
|
|
|
2056
|
|
|
if ($expectedLanguageCode === null) { |
2057
|
|
|
$expectedLanguageCode = 'eng-GB'; |
2058
|
|
|
} |
2059
|
|
|
|
2060
|
|
|
$loadedUserGroup = $userService->loadUserGroup($userGroup->id, $prioritizedLanguages); |
2061
|
|
|
|
2062
|
|
|
self::assertEquals( |
2063
|
|
|
$loadedUserGroup->getName($expectedLanguageCode), |
2064
|
|
|
$loadedUserGroup->getName() |
2065
|
|
|
); |
2066
|
|
|
self::assertEquals( |
2067
|
|
|
$loadedUserGroup->getFieldValue('description', $expectedLanguageCode), |
2068
|
|
|
$loadedUserGroup->getFieldValue('description') |
2069
|
|
|
); |
2070
|
|
|
} |
2071
|
|
|
|
2072
|
|
|
/** |
2073
|
|
|
* Test that multi-language logic for the loadSubUserGroups method respects prioritized language list. |
2074
|
|
|
* |
2075
|
|
|
* @covers \eZ\Publish\API\Repository\UserService::loadSubUserGroups |
2076
|
|
|
* @dataProvider getPrioritizedLanguageList |
2077
|
|
|
* @param string[] $prioritizedLanguages |
2078
|
|
|
* @param string|null $expectedLanguageCode language code of expected translation |
2079
|
|
|
*/ |
2080
|
|
|
public function testLoadSubUserGroupsWithPrioritizedLanguagesList( |
2081
|
|
|
array $prioritizedLanguages, |
2082
|
|
|
$expectedLanguageCode |
2083
|
|
|
) { |
2084
|
|
|
$repository = $this->getRepository(); |
2085
|
|
|
$userService = $repository->getUserService(); |
2086
|
|
|
|
2087
|
|
|
// create main group for subgroups |
2088
|
|
|
$userGroup = $this->createMultiLanguageUserGroup(4); |
2089
|
|
|
if ($expectedLanguageCode === null) { |
2090
|
|
|
$expectedLanguageCode = $userGroup->contentInfo->mainLanguageCode; |
2091
|
|
|
} |
2092
|
|
|
|
2093
|
|
|
// create subgroups |
2094
|
|
|
$this->createMultiLanguageUserGroup($userGroup->id); |
2095
|
|
|
$this->createMultiLanguageUserGroup($userGroup->id); |
2096
|
|
|
|
2097
|
|
|
$userGroup = $userService->loadUserGroup($userGroup->id, $prioritizedLanguages); |
2098
|
|
|
|
2099
|
|
|
$subUserGroups = $userService->loadSubUserGroups($userGroup, 0, 2, $prioritizedLanguages); |
2100
|
|
|
foreach ($subUserGroups as $subUserGroup) { |
2101
|
|
|
self::assertEquals( |
2102
|
|
|
$subUserGroup->getName($expectedLanguageCode), |
2103
|
|
|
$subUserGroup->getName() |
2104
|
|
|
); |
2105
|
|
|
self::assertEquals( |
2106
|
|
|
$subUserGroup->getFieldValue('description', $expectedLanguageCode), |
2107
|
|
|
$subUserGroup->getFieldValue('description') |
2108
|
|
|
); |
2109
|
|
|
} |
2110
|
|
|
} |
2111
|
|
|
|
2112
|
|
|
/** |
2113
|
|
|
* Test that multi-language logic for the loadUser method respects prioritized language list. |
2114
|
|
|
* |
2115
|
|
|
* @covers \eZ\Publish\API\Repository\UserService::loadUser |
2116
|
|
|
* @dataProvider getPrioritizedLanguageList |
2117
|
|
|
* @param string[] $prioritizedLanguages |
2118
|
|
|
* @param string|null $expectedLanguageCode language code of expected translation |
2119
|
|
|
*/ |
2120
|
|
View Code Duplication |
public function testLoadUserWithPrioritizedLanguagesList( |
2121
|
|
|
array $prioritizedLanguages, |
2122
|
|
|
$expectedLanguageCode |
2123
|
|
|
) { |
2124
|
|
|
$repository = $this->getRepository(); |
2125
|
|
|
$userService = $repository->getUserService(); |
2126
|
|
|
|
2127
|
|
|
$user = $this->createMultiLanguageUser(); |
2128
|
|
|
if ($expectedLanguageCode === null) { |
2129
|
|
|
$expectedLanguageCode = $user->contentInfo->mainLanguageCode; |
2130
|
|
|
} |
2131
|
|
|
|
2132
|
|
|
$loadedUser = $userService->loadUser($user->id, $prioritizedLanguages); |
2133
|
|
|
|
2134
|
|
|
self::assertEquals( |
2135
|
|
|
$loadedUser->getName($expectedLanguageCode), |
2136
|
|
|
$loadedUser->getName() |
2137
|
|
|
); |
2138
|
|
|
|
2139
|
|
|
foreach (['fist_name', 'last_name', 'signature'] as $fieldIdentifier) { |
2140
|
|
|
self::assertEquals( |
2141
|
|
|
$loadedUser->getFieldValue($fieldIdentifier, $expectedLanguageCode), |
2142
|
|
|
$loadedUser->getFieldValue($fieldIdentifier) |
2143
|
|
|
); |
2144
|
|
|
} |
2145
|
|
|
} |
2146
|
|
|
|
2147
|
|
|
/** |
2148
|
|
|
* Test that multi-language logic for the loadUser method works correctly after updating |
2149
|
|
|
* user content main language. |
2150
|
|
|
* |
2151
|
|
|
* @covers \eZ\Publish\API\Repository\UserService::loadUserGroup |
2152
|
|
|
* @dataProvider getPrioritizedLanguageList |
2153
|
|
|
* @param string[] $prioritizedLanguages |
2154
|
|
|
* @param string|null $expectedLanguageCode language code of expected translation |
2155
|
|
|
*/ |
2156
|
|
|
public function testLoadUserWithPrioritizedLanguagesListAfterMainLanguageUpdate( |
2157
|
|
|
array $prioritizedLanguages, |
2158
|
|
|
$expectedLanguageCode |
2159
|
|
|
) { |
2160
|
|
|
$repository = $this->getRepository(); |
2161
|
|
|
$userService = $repository->getUserService(); |
2162
|
|
|
$contentService = $repository->getContentService(); |
2163
|
|
|
|
2164
|
|
|
$user = $this->createMultiLanguageUser(); |
2165
|
|
|
// sanity check |
2166
|
|
|
self::assertEquals($user->contentInfo->mainLanguageCode, 'eng-US'); |
2167
|
|
|
|
2168
|
|
|
$userUpdateStruct = $userService->newUserUpdateStruct(); |
2169
|
|
|
$userUpdateStruct->contentMetadataUpdateStruct = $contentService->newContentMetadataUpdateStruct(); |
2170
|
|
|
$userUpdateStruct->contentMetadataUpdateStruct->mainLanguageCode = 'eng-GB'; |
2171
|
|
|
$userService->updateUser($user, $userUpdateStruct); |
2172
|
|
|
if ($expectedLanguageCode === null) { |
2173
|
|
|
$expectedLanguageCode = 'eng-GB'; |
2174
|
|
|
} |
2175
|
|
|
|
2176
|
|
|
$loadedUser = $userService->loadUser($user->id, $prioritizedLanguages); |
2177
|
|
|
|
2178
|
|
|
self::assertEquals( |
2179
|
|
|
$loadedUser->getName($expectedLanguageCode), |
2180
|
|
|
$loadedUser->getName() |
2181
|
|
|
); |
2182
|
|
|
|
2183
|
|
|
foreach (['fist_name', 'last_name', 'signature'] as $fieldIdentifier) { |
2184
|
|
|
self::assertEquals( |
2185
|
|
|
$loadedUser->getFieldValue($fieldIdentifier, $expectedLanguageCode), |
2186
|
|
|
$loadedUser->getFieldValue($fieldIdentifier) |
2187
|
|
|
); |
2188
|
|
|
} |
2189
|
|
|
} |
2190
|
|
|
|
2191
|
|
|
/** |
2192
|
|
|
* Test that multi-language logic for the loadUserByLogin method respects prioritized language list. |
2193
|
|
|
* |
2194
|
|
|
* @covers \eZ\Publish\API\Repository\UserService::loadUserByLogin |
2195
|
|
|
* @dataProvider getPrioritizedLanguageList |
2196
|
|
|
* @param string[] $prioritizedLanguages |
2197
|
|
|
* @param string|null $expectedLanguageCode language code of expected translation |
2198
|
|
|
*/ |
2199
|
|
View Code Duplication |
public function testLoadUserByLoginWithPrioritizedLanguagesList( |
2200
|
|
|
array $prioritizedLanguages, |
2201
|
|
|
$expectedLanguageCode |
2202
|
|
|
) { |
2203
|
|
|
$repository = $this->getRepository(); |
2204
|
|
|
$userService = $repository->getUserService(); |
2205
|
|
|
$user = $this->createMultiLanguageUser(); |
2206
|
|
|
|
2207
|
|
|
// load, with prioritized languages, the newly created user |
2208
|
|
|
$loadedUser = $userService->loadUserByLogin($user->login, $prioritizedLanguages); |
2209
|
|
|
if ($expectedLanguageCode === null) { |
2210
|
|
|
$expectedLanguageCode = $loadedUser->contentInfo->mainLanguageCode; |
2211
|
|
|
} |
2212
|
|
|
|
2213
|
|
|
self::assertEquals( |
2214
|
|
|
$loadedUser->getName($expectedLanguageCode), |
2215
|
|
|
$loadedUser->getName() |
2216
|
|
|
); |
2217
|
|
|
|
2218
|
|
|
foreach (['first_name', 'last_name', 'signature'] as $fieldIdentifier) { |
2219
|
|
|
self::assertEquals( |
2220
|
|
|
$loadedUser->getFieldValue($fieldIdentifier, $expectedLanguageCode), |
2221
|
|
|
$loadedUser->getFieldValue($fieldIdentifier) |
2222
|
|
|
); |
2223
|
|
|
} |
2224
|
|
|
} |
2225
|
|
|
|
2226
|
|
|
/** |
2227
|
|
|
* Test that multi-language logic for the loadUserByCredentials method respects |
2228
|
|
|
* prioritized language list. |
2229
|
|
|
* |
2230
|
|
|
* @covers \eZ\Publish\API\Repository\UserService::loadUserByCredentials |
2231
|
|
|
* @dataProvider getPrioritizedLanguageList |
2232
|
|
|
* @param string[] $prioritizedLanguages |
2233
|
|
|
* @param string|null $expectedLanguageCode language code of expected translation |
2234
|
|
|
*/ |
2235
|
|
View Code Duplication |
public function testLoadUserByCredentialsWithPrioritizedLanguagesList( |
2236
|
|
|
array $prioritizedLanguages, |
2237
|
|
|
$expectedLanguageCode |
2238
|
|
|
) { |
2239
|
|
|
$repository = $this->getRepository(); |
2240
|
|
|
$userService = $repository->getUserService(); |
2241
|
|
|
$user = $this->createMultiLanguageUser(); |
2242
|
|
|
|
2243
|
|
|
// load, with prioritized languages, the newly created user |
2244
|
|
|
$loadedUser = $userService->loadUserByCredentials( |
2245
|
|
|
$user->login, |
2246
|
|
|
'secret', |
2247
|
|
|
$prioritizedLanguages |
2248
|
|
|
); |
2249
|
|
|
if ($expectedLanguageCode === null) { |
2250
|
|
|
$expectedLanguageCode = $loadedUser->contentInfo->mainLanguageCode; |
2251
|
|
|
} |
2252
|
|
|
|
2253
|
|
|
self::assertEquals( |
2254
|
|
|
$loadedUser->getName($expectedLanguageCode), |
2255
|
|
|
$loadedUser->getName() |
2256
|
|
|
); |
2257
|
|
|
|
2258
|
|
|
foreach (['first_name', 'last_name', 'signature'] as $fieldIdentifier) { |
2259
|
|
|
self::assertEquals( |
2260
|
|
|
$loadedUser->getFieldValue($fieldIdentifier, $expectedLanguageCode), |
2261
|
|
|
$loadedUser->getFieldValue($fieldIdentifier) |
2262
|
|
|
); |
2263
|
|
|
} |
2264
|
|
|
} |
2265
|
|
|
|
2266
|
|
|
/** |
2267
|
|
|
* Test that multi-language logic for the loadUsersByEmail method respects |
2268
|
|
|
* prioritized language list. |
2269
|
|
|
* |
2270
|
|
|
* @covers \eZ\Publish\API\Repository\UserService::loadUsersByEmail |
2271
|
|
|
* @dataProvider getPrioritizedLanguageList |
2272
|
|
|
* @param string[] $prioritizedLanguages |
2273
|
|
|
* @param string|null $expectedLanguageCode language code of expected translation |
2274
|
|
|
*/ |
2275
|
|
View Code Duplication |
public function testLoadUsersByEmailWithPrioritizedLanguagesList( |
2276
|
|
|
array $prioritizedLanguages, |
2277
|
|
|
$expectedLanguageCode |
2278
|
|
|
) { |
2279
|
|
|
$repository = $this->getRepository(); |
2280
|
|
|
$userService = $repository->getUserService(); |
2281
|
|
|
$user = $this->createMultiLanguageUser(); |
2282
|
|
|
|
2283
|
|
|
// load, with prioritized languages, users by email |
2284
|
|
|
$loadedUsers = $userService->loadUsersByEmail($user->email, $prioritizedLanguages); |
2285
|
|
|
|
2286
|
|
|
foreach ($loadedUsers as $loadedUser) { |
2287
|
|
|
if ($expectedLanguageCode === null) { |
2288
|
|
|
$expectedLanguageCode = $loadedUser->contentInfo->mainLanguageCode; |
2289
|
|
|
} |
2290
|
|
|
self::assertEquals( |
2291
|
|
|
$loadedUser->getName($expectedLanguageCode), |
2292
|
|
|
$loadedUser->getName() |
2293
|
|
|
); |
2294
|
|
|
|
2295
|
|
|
foreach (['first_name', 'last_name', 'signature'] as $fieldIdentifier) { |
2296
|
|
|
self::assertEquals( |
2297
|
|
|
$loadedUser->getFieldValue($fieldIdentifier, $expectedLanguageCode), |
2298
|
|
|
$loadedUser->getFieldValue($fieldIdentifier) |
2299
|
|
|
); |
2300
|
|
|
} |
2301
|
|
|
} |
2302
|
|
|
} |
2303
|
|
|
|
2304
|
|
|
/** |
2305
|
|
|
* Test that multi-language logic for the loadUserGroupsOfUser method respects |
2306
|
|
|
* prioritized language list. |
2307
|
|
|
* |
2308
|
|
|
* @covers \eZ\Publish\API\Repository\UserService::loadUserGroupsOfUser |
2309
|
|
|
* @dataProvider getPrioritizedLanguageList |
2310
|
|
|
* @param string[] $prioritizedLanguages |
2311
|
|
|
* @param string|null $expectedLanguageCode language code of expected translation |
2312
|
|
|
*/ |
2313
|
|
|
public function testLoadUserGroupsOfUserWithPrioritizedLanguagesList( |
2314
|
|
|
array $prioritizedLanguages, |
2315
|
|
|
$expectedLanguageCode |
2316
|
|
|
) { |
2317
|
|
|
$repository = $this->getRepository(); |
2318
|
|
|
$userService = $repository->getUserService(); |
2319
|
|
|
$userGroup = $this->createMultiLanguageUserGroup(); |
2320
|
|
|
$user = $this->createMultiLanguageUser($userGroup->id); |
2321
|
|
|
|
2322
|
|
|
$userGroups = $userService->loadUserGroupsOfUser($user, 0, 25, $prioritizedLanguages); |
2323
|
|
|
foreach ($userGroups as $userGroup) { |
2324
|
|
|
self::assertEquals( |
2325
|
|
|
$userGroup->getName($expectedLanguageCode), |
2326
|
|
|
$userGroup->getName() |
2327
|
|
|
); |
2328
|
|
|
self::assertEquals( |
2329
|
|
|
$userGroup->getFieldValue('description', $expectedLanguageCode), |
2330
|
|
|
$userGroup->getFieldValue('description') |
2331
|
|
|
); |
2332
|
|
|
} |
2333
|
|
|
} |
2334
|
|
|
|
2335
|
|
|
/** |
2336
|
|
|
* Test that multi-language logic for the loadUsersOfUserGroup method respects |
2337
|
|
|
* prioritized language list. |
2338
|
|
|
* |
2339
|
|
|
* @covers \eZ\Publish\API\Repository\UserService::loadUsersOfUserGroup |
2340
|
|
|
* @dataProvider getPrioritizedLanguageList |
2341
|
|
|
* @param string[] $prioritizedLanguages |
2342
|
|
|
* @param string|null $expectedLanguageCode language code of expected translation |
2343
|
|
|
*/ |
2344
|
|
|
public function testLoadUsersOfUserGroupWithPrioritizedLanguagesList( |
2345
|
|
|
array $prioritizedLanguages, |
2346
|
|
|
$expectedLanguageCode |
2347
|
|
|
) { |
2348
|
|
|
$repository = $this->getRepository(); |
2349
|
|
|
$userService = $repository->getUserService(); |
2350
|
|
|
|
2351
|
|
|
// create parent user group |
2352
|
|
|
$userGroup = $this->createMultiLanguageUserGroup(); |
2353
|
|
|
// add two users to the created parent user group |
2354
|
|
|
$this->createMultiLanguageUser($userGroup->id); |
2355
|
|
|
$this->createMultiLanguageUser($userGroup->id); |
2356
|
|
|
|
2357
|
|
|
// test loading of users via user group with prioritized languages list |
2358
|
|
|
$users = $userService->loadUsersOfUserGroup($userGroup, 0, 25, $prioritizedLanguages); |
2359
|
|
|
foreach ($users as $user) { |
2360
|
|
|
if ($expectedLanguageCode === null) { |
2361
|
|
|
$expectedLanguageCode = $user->contentInfo->mainLanguageCode; |
2362
|
|
|
} |
2363
|
|
|
self::assertEquals( |
2364
|
|
|
$user->getName($expectedLanguageCode), |
2365
|
|
|
$user->getName() |
2366
|
|
|
); |
2367
|
|
|
|
2368
|
|
|
foreach (['first_name', 'last_name', 'signature'] as $fieldIdentifier) { |
2369
|
|
|
self::assertEquals( |
2370
|
|
|
$user->getFieldValue($fieldIdentifier, $expectedLanguageCode), |
2371
|
|
|
$user->getFieldValue($fieldIdentifier) |
2372
|
|
|
); |
2373
|
|
|
} |
2374
|
|
|
} |
2375
|
|
|
} |
2376
|
|
|
|
2377
|
|
|
/** |
2378
|
|
|
* Get prioritized languages list data. |
2379
|
|
|
* |
2380
|
|
|
* Test cases using this data provider should expect the following arguments: |
2381
|
|
|
* <code> |
2382
|
|
|
* array $prioritizedLanguagesList |
2383
|
|
|
* string $expectedLanguage (if null - use main language) |
2384
|
|
|
* </code> |
2385
|
|
|
* |
2386
|
|
|
* @return array |
2387
|
|
|
*/ |
2388
|
|
View Code Duplication |
public function getPrioritizedLanguageList() |
2389
|
|
|
{ |
2390
|
|
|
return [ |
2391
|
|
|
[[], null], |
2392
|
|
|
[['eng-US'], 'eng-US'], |
2393
|
|
|
[['eng-GB'], 'eng-GB'], |
2394
|
|
|
[['eng-US', 'eng-GB'], 'eng-US'], |
2395
|
|
|
[['eng-GB', 'eng-US'], 'eng-GB'], |
2396
|
|
|
// use non-existent group as the first one |
2397
|
|
|
[['ger-DE'], null], |
2398
|
|
|
[['ger-DE', 'eng-GB'], 'eng-GB'], |
2399
|
|
|
]; |
2400
|
|
|
} |
2401
|
|
|
|
2402
|
|
|
/** |
2403
|
|
|
* @param int $parentGroupId |
2404
|
|
|
* @return \eZ\Publish\API\Repository\Values\User\UserGroup |
2405
|
|
|
*/ |
2406
|
|
|
private function createMultiLanguageUserGroup($parentGroupId = 4) |
2407
|
|
|
{ |
2408
|
|
|
$repository = $this->getRepository(); |
2409
|
|
|
$userService = $repository->getUserService(); |
2410
|
|
|
|
2411
|
|
|
// create user group with multiple translations |
2412
|
|
|
$parentGroupId = $this->generateId('group', $parentGroupId); |
2413
|
|
|
$parentGroup = $userService->loadUserGroup($parentGroupId); |
2414
|
|
|
|
2415
|
|
|
$userGroupCreateStruct = $userService->newUserGroupCreateStruct('eng-US'); |
2416
|
|
|
$userGroupCreateStruct->setField('name', 'US user group', 'eng-US'); |
2417
|
|
|
$userGroupCreateStruct->setField('name', 'GB user group', 'eng-GB'); |
2418
|
|
|
$userGroupCreateStruct->setField('description', 'US user group description', 'eng-US'); |
2419
|
|
|
$userGroupCreateStruct->setField('description', 'GB user group description', 'eng-GB'); |
2420
|
|
|
$userGroupCreateStruct->alwaysAvailable = true; |
2421
|
|
|
|
2422
|
|
|
return $userService->createUserGroup($userGroupCreateStruct, $parentGroup); |
2423
|
|
|
} |
2424
|
|
|
|
2425
|
|
|
/** |
2426
|
|
|
* Create a user group fixture in a variable named <b>$userGroup</b>,. |
2427
|
|
|
* |
2428
|
|
|
* @return \eZ\Publish\API\Repository\Values\User\UserGroup |
2429
|
|
|
*/ |
2430
|
|
|
private function createUserGroupVersion1() |
2431
|
|
|
{ |
2432
|
|
|
$repository = $this->getRepository(); |
2433
|
|
|
|
2434
|
|
|
$mainGroupId = $this->generateId('group', 4); |
2435
|
|
|
/* BEGIN: Inline */ |
2436
|
|
|
// $mainGroupId is the ID of the main "Users" group |
2437
|
|
|
|
2438
|
|
|
$userService = $repository->getUserService(); |
2439
|
|
|
|
2440
|
|
|
// Load main group |
2441
|
|
|
$parentUserGroup = $userService->loadUserGroup($mainGroupId); |
2442
|
|
|
|
2443
|
|
|
// Instantiate a new create struct |
2444
|
|
|
$userGroupCreate = $userService->newUserGroupCreateStruct('eng-US'); |
2445
|
|
|
$userGroupCreate->setField('name', 'Example Group'); |
2446
|
|
|
|
2447
|
|
|
// Create the new user group |
2448
|
|
|
$userGroup = $userService->createUserGroup( |
2449
|
|
|
$userGroupCreate, |
2450
|
|
|
$parentUserGroup |
2451
|
|
|
); |
2452
|
|
|
/* END: Inline */ |
2453
|
|
|
|
2454
|
|
|
return $userGroup; |
2455
|
|
|
} |
2456
|
|
|
|
2457
|
|
|
/** |
2458
|
|
|
* Create user with multiple translations of User Content fields. |
2459
|
|
|
* |
2460
|
|
|
* @param int $userGroupId User group ID (default 13 - Editors) |
2461
|
|
|
* |
2462
|
|
|
* @return \eZ\Publish\API\Repository\Values\User\User |
2463
|
|
|
*/ |
2464
|
|
|
private function createMultiLanguageUser($userGroupId = 13) |
2465
|
|
|
{ |
2466
|
|
|
$repository = $this->getRepository(); |
2467
|
|
|
$userService = $repository->getUserService(); |
2468
|
|
|
|
2469
|
|
|
// Instantiate a create struct with mandatory properties |
2470
|
|
|
$randomLogin = md5(rand() . time()); |
2471
|
|
|
$userCreateStruct = $userService->newUserCreateStruct( |
2472
|
|
|
$randomLogin, |
2473
|
|
|
"{$randomLogin}@example.com", |
2474
|
|
|
'secret', |
2475
|
|
|
'eng-US' |
2476
|
|
|
); |
2477
|
|
|
$userCreateStruct->enabled = true; |
2478
|
|
|
$userCreateStruct->alwaysAvailable = true; |
2479
|
|
|
|
2480
|
|
|
// set field for each language |
2481
|
|
|
foreach (['eng-US', 'eng-GB'] as $languageCode) { |
2482
|
|
|
$userCreateStruct->setField('first_name', "{$languageCode} Example", $languageCode); |
2483
|
|
|
$userCreateStruct->setField('last_name', "{$languageCode} User", $languageCode); |
2484
|
|
|
$userCreateStruct->setField('signature', "{$languageCode} signature", $languageCode); |
2485
|
|
|
} |
2486
|
|
|
|
2487
|
|
|
// Load parent group for the user |
2488
|
|
|
$group = $userService->loadUserGroup($userGroupId); |
2489
|
|
|
|
2490
|
|
|
// Create a new user |
2491
|
|
|
return $userService->createUser($userCreateStruct, [$group]); |
2492
|
|
|
} |
2493
|
|
|
|
2494
|
|
View Code Duplication |
private function createHash($login, $password, $type) |
2495
|
|
|
{ |
2496
|
|
|
switch ($type) { |
2497
|
|
|
case 2: |
2498
|
|
|
/* PASSWORD_HASH_MD5_USER */ |
2499
|
|
|
return md5("{$login}\n{$password}"); |
2500
|
|
|
|
2501
|
|
|
case 3: |
2502
|
|
|
/* PASSWORD_HASH_MD5_SITE */ |
2503
|
|
|
$site = null; |
2504
|
|
|
|
2505
|
|
|
return md5("{$login}\n{$password}\n{$site}"); |
2506
|
|
|
|
2507
|
|
|
case 5: |
2508
|
|
|
/* PASSWORD_HASH_PLAINTEXT */ |
2509
|
|
|
return $password; |
2510
|
|
|
} |
2511
|
|
|
/* PASSWORD_HASH_MD5_PASSWORD (1) */ |
2512
|
|
|
return md5($password); |
2513
|
|
|
} |
2514
|
|
|
} |
2515
|
|
|
|
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.