Completed
Push — ezp-24830_REST_for_role_drafts ( 70e67c...4d1b35 )
by
unknown
34:56 queued 07:07
created

RoleTest::testLoadRoleDraftByRoleId()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
dl 0
loc 8
rs 9.4285
c 1
b 1
f 0
cc 1
eloc 4
nc 1
nop 1
1
<?php
2
3
/**
4
 * File containing the Functional\RoleTest class.
5
 *
6
 * @copyright Copyright (C) eZ Systems AS. All rights reserved.
7
 * @license For full copyright and license information view LICENSE file distributed with this source code.
8
 *
9
 * @version //autogentag//
10
 */
11
namespace eZ\Bundle\EzPublishRestBundle\Tests\Functional;
12
13
use eZ\Bundle\EzPublishRestBundle\Tests\Functional\TestCase as RESTFunctionalTestCase;
14
15
class RoleTest extends RESTFunctionalTestCase
16
{
17
    /**
18
     * @covers POST /user/roles
19
     *
20
     * BC compatible mode, will return a role
21
     *
22
     * @return string The created role href
23
     */
24
    public function testCreateRole()
25
    {
26
        $xml = <<< XML
27
<?xml version="1.0" encoding="UTF-8"?>
28
<RoleInput>
29
  <identifier>testCreateRole</identifier>
30
  <mainLanguageCode>eng-GB</mainLanguageCode>
31
  <names>
32
    <value languageCode="eng-GB">testCreateRole</value>
33
  </names>
34
  <descriptions>
35
    <value languageCode="eng-GB">testCreateRole description</value>
36
  </descriptions>
37
</RoleInput>
38
XML;
39
        $request = $this->createHttpRequest('POST', '/api/ezp/v2/user/roles', 'RoleInput+xml', 'Role+json');
40
        $request->setContent($xml);
41
        $response = $this->sendHttpRequest($request);
42
43
        self::assertHttpResponseCodeEquals($response, 201);
44
        self::assertHttpResponseHasHeader($response, 'Location');
45
46
        $href = $response->getHeader('Location');
47
        $this->addCreatedElement($href);
48
49
        return $href;
50
    }
51
52
    /**
53
     * @covers POST /user/roles
54
     *
55
     * BC incompatible mode, will return a role draft
56
     *
57
     * @return string The created role draft href
58
     */
59 View Code Duplication
    public function testCreateRoleWithDraft()
60
    {
61
        $xml = <<< XML
62
<?xml version="1.0" encoding="UTF-8"?>
63
<RoleInput>
64
  <identifier>testCreateRoleDraft</identifier>
65
  <mainLanguageCode>eng-GB</mainLanguageCode>
66
  <names>
67
    <value languageCode="eng-GB">testCreateRoleDraft</value>
68
  </names>
69
  <descriptions>
70
    <value languageCode="eng-GB">testCreateRoleDraft description</value>
71
  </descriptions>
72
</RoleInput>
73
XML;
74
        $request = $this->createHttpRequest(
75
            'POST',
76
            '/api/ezp/v2/user/roles?publish=false',
77
            'RoleInput+xml',
78
            'RoleDraft+json'
79
        );
80
        $request->setContent($xml);
81
        $response = $this->sendHttpRequest($request);
82
83
        self::assertHttpResponseCodeEquals($response, 201);
84
        self::assertHttpResponseHasHeader($response, 'Location');
85
86
        $href = $response->getHeader('Location');
87
        $this->addCreatedElement($href);
88
89
        return $href . '/draft';
90
    }
91
92
    /**
93
     * @covers GET /user/roles
94
     */
95
    public function testListRoles()
96
    {
97
        $response = $this->sendHttpRequest(
98
            $this->createHttpRequest('GET', '/api/ezp/v2/user/roles')
99
        );
100
101
        self::assertHttpResponseCodeEquals($response, 200);
102
    }
103
104
    /**
105
     * @depends testCreateRole
106
     * @covers GET /user/roles/{roleId}
107
     */
108
    public function testLoadRole($roleHref)
109
    {
110
        $response = $this->sendHttpRequest(
111
            $this->createHttpRequest('GET', $roleHref)
112
        );
113
114
        self::assertHttpResponseCodeEquals($response, 200);
115
    }
116
117
    /**
118
     * @depends testCreateRole
119
     * @covers POST /user/roles/{roleId}
120
     *
121
     * @return string The created role draft href
122
     */
123 View Code Duplication
    public function testCreateRoleDraft($roleHref)
124
    {
125
        $xml = <<< XML
126
<?xml version="1.0" encoding="UTF-8"?>
127
<RoleInput>
128
  <identifier>testCreateRoleDraft</identifier>
129
  <mainLanguageCode>eng-GB</mainLanguageCode>
130
  <names>
131
    <value languageCode="eng-GB">testCreateRoleDraft</value>
132
  </names>
133
  <descriptions>
134
    <value languageCode="eng-GB">testCreateRoleDraft description</value>
135
  </descriptions>
136
</RoleInput>
137
XML;
138
        $request = $this->createHttpRequest(
139
            'POST',
140
            $roleHref,
141
            'RoleInput+xml',
142
            'RoleDraft+json'
143
        );
144
        $request->setContent($xml);
145
        $response = $this->sendHttpRequest($request);
146
147
        self::assertHttpResponseCodeEquals($response, 201);
148
        self::assertHttpResponseHasHeader($response, 'Location');
149
150
        $href = $response->getHeader('Location');
151
        $this->addCreatedElement($href);
152
153
        return $href . '/draft';
154
    }
155
156
    /**
157
     * @depends testCreateRoleDraft
158
     * @covers GET /user/roles/{roleId}/draft
159
     */
160
    public function testLoadRoleDraft($roleHref)
161
    {
162
        $response = $this->sendHttpRequest(
163
            $this->createHttpRequest('GET', $roleHref)
164
        );
165
166
        self::assertHttpResponseCodeEquals($response, 200);
167
    }
168
169
    /**
170
     * @depends testCreateRole
171
     * @covers GET /user/roles/{roleId}/draftByRoleId
172
     */
173
    public function testLoadRoleDraftByRoleId($roleHref)
174
    {
175
        $response = $this->sendHttpRequest(
176
            $this->createHttpRequest('GET', $roleHref)
177
        );
178
179
        self::assertHttpResponseCodeEquals($response, 200);
180
    }
181
182
    /**
183
     * @depends testCreateRole
184
     * @covers PATCH /user/roles/{roleId}
185
     */
186 View Code Duplication
    public function testUpdateRole($roleHref)
187
    {
188
        $xml = <<< XML
189
<?xml version="1.0" encoding="UTF-8"?>
190
<RoleInput>
191
  <identifier>testUpdateRole</identifier>
192
  <mainLanguageCode>eng-GB</mainLanguageCode>
193
  <names>
194
    <value languageCode="eng-GB">testUpdateRole</value>
195
  </names>
196
  <descriptions>
197
    <value languageCode="eng-GB">testUpdateRole description</value>
198
  </descriptions>
199
</RoleInput>
200
XML;
201
202
        $request = $this->createHttpRequest('PATCH', $roleHref, 'RoleInput+xml', 'Role+json');
203
        $request->setContent($xml);
204
        $response = $this->sendHttpRequest($request);
205
206
        // @todo Fix failure Notice: Trying to get property of non-object in \/home\/bertrand\/www\/ezpublish-kernel\/eZ\/Publish\/Core\/Persistence\/Cache\/UserHandler.php line 174
207
        self::assertHttpResponseCodeEquals($response, 200);
208
    }
209
210
    /**
211
     * @depends testCreateRoleDraft
212
     * @covers PATCH /user/roles/{roleId}/draft
213
     */
214 View Code Duplication
    public function testUpdateRoleDraft($roleHref)
215
    {
216
        $xml = <<< XML
217
<?xml version="1.0" encoding="UTF-8"?>
218
<RoleInput>
219
  <identifier>testUpdateRoleDraft</identifier>
220
  <mainLanguageCode>eng-GB</mainLanguageCode>
221
  <names>
222
    <value languageCode="eng-GB">testUpdateRoleDraft</value>
223
  </names>
224
  <descriptions>
225
    <value languageCode="eng-GB">testUpdateRoleDraft description</value>
226
  </descriptions>
227
</RoleInput>
228
XML;
229
230
        $request = $this->createHttpRequest('PATCH', $roleHref, 'RoleInput+xml', 'RoleDraft+json');
231
        $request->setContent($xml);
232
        $response = $this->sendHttpRequest($request);
233
234
        // @todo Fix failure Notice: Trying to get property of non-object in \/home\/bertrand\/www\/ezpublish-kernel\/eZ\/Publish\/Core\/Persistence\/Cache\/UserHandler.php line 174
235
        self::assertHttpResponseCodeEquals($response, 200);
236
    }
237
238
    /**
239
     * @covers POST /user/roles/{roleId}/policies
240
     * @depends testCreateRole
241
     *
242
     * @return string The created policy href
243
     */
244 View Code Duplication
    public function testAddPolicy($roleHref)
245
    {
246
        // @todo Error in Resource URL in spec @ https://github.com/ezsystems/ezpublish-kernel/blob/master/doc/specifications/rest/REST-API-V2.rst#151213create-policy
247
        $xml = <<< XML
248
<?xml version="1.0" encoding="UTF-8"?>
249
<PolicyCreate>
250
  <module>content</module>
251
  <function>create</function>
252
  <limitations>
253
    <limitation identifier="Class">
254
      <values>
255
        <ref href="2"/>
256
      </values>
257
    </limitation>
258
  </limitations>
259
</PolicyCreate>
260
XML;
261
        $request = $this->createHttpRequest('POST', "$roleHref/policies", 'PolicyCreate+xml', 'Policy+json');
262
        $request->setContent($xml);
263
264
        $response = $this->sendHttpRequest($request);
265
        self::assertHttpResponseCodeEquals($response, 201);
266
        self::assertHttpResponseHasHeader($response, 'Location');
267
268
        $href = $response->getHeader('Location');
269
        $this->addCreatedElement($href);
270
271
        return $href;
272
    }
273
274
    /**
275
     * @covers GET /user/roles/{roleId}/policies/{policyId}
276
     * @depends testAddPolicy
277
     */
278
    public function testLoadPolicy($policyHref)
279
    {
280
        $response = $this->sendHttpRequest(
281
            $this->createHttpRequest('GET', $policyHref)
282
        );
283
284
        self::assertHttpResponseCodeEquals($response, 200);
285
    }
286
287
    /**
288
     * @covers GET /user/roles/{roleId}/policies
289
     * @depends testCreateRole
290
     */
291
    public function testLoadPolicies($roleHref)
292
    {
293
        $response = $this->sendHttpRequest(
294
            $this->createHttpRequest('GET', "$roleHref/policies")
295
        );
296
297
        self::assertHttpResponseCodeEquals($response, 200);
298
    }
299
300
    /**
301
     * @covers PATCH /user/roles/{roleId}/policies/{policyId}
302
     * @depends testAddPolicy
303
     */
304 View Code Duplication
    public function testUpdatePolicy($policyHref)
305
    {
306
        $xml = <<< XML
307
<?xml version="1.0" encoding="UTF-8"?>
308
<PolicyUpdate>
309
  <limitations>
310
    <limitation identifier="Class">
311
      <values>
312
        <ref href="1"/>
313
      </values>
314
    </limitation>
315
  </limitations>
316
</PolicyUpdate>
317
XML;
318
319
        $request = $this->createHttpRequest('PATCH', $policyHref, 'PolicyUpdate+xml', 'Policy+json');
320
        $request->setContent($xml);
321
        $response = $this->sendHttpRequest($request);
322
323
        self::assertHttpResponseCodeEquals($response, 200);
324
    }
325
326
    /**
327
     * @depends testCreateRole
328
     * @covers POST /user/users/{userId}/roles
329
     *
330
     * @return string assigned role href
331
     *
332
     * @todo stop using the anonymous user, this is dangerous...
333
     */
334 View Code Duplication
    public function testAssignRoleToUser($roleHref)
335
    {
336
        self::markTestSkipped('@todo fixme');
337
        $xml = <<< XML
338
<?xml version="1.0" encoding="UTF-8"?>
339
<RoleAssignInput>
340
  <Role href="{$roleHref}" media-type="application/vnd.ez.api.RoleAssignInput+xml"/>
341
  <limitation identifier="Section">
342
      <values>
343
          <ref href="/api/ezp/v2/content/sections/1" media-type="application/vnd.ez.api.Section+xml" />
344
      </values>
345
  </limitation>
346
</RoleAssignInput>
347
XML;
348
349
        $request = $this->createHttpRequest(
350
            'POST',
351
            '/api/ezp/v2/user/users/10/roles',
352
            'RoleAssignInput+xml',
353
            'RoleAssignmentList+json'
354
        );
355
        $request->setContent($xml);
356
357
        $response = $this->sendHttpRequest($request);
358
        $roleAssignmentArray = json_decode($response->getContent(), true);
359
360
        self::assertHttpResponseCodeEquals($response, 200);
361
362
        return $roleAssignmentArray['RoleAssignmentList']['RoleAssignment'][0]['_href'];
363
    }
364
365
    /**
366
     * @covers GET /user/users/{userId}/roles/{roleId}
367
     * @depends testAssignRoleToUser
368
     */
369
    public function testLoadRoleAssignmentForUser($roleAssignmentHref)
370
    {
371
        $response = $this->sendHttpRequest(
372
            $this->createHttpRequest('GET', $roleAssignmentHref)
373
        );
374
375
        self::assertHttpResponseCodeEquals($response, 200);
376
    }
377
378
    /**
379
     * @covers DELETE /user/users/{userId}/roles/{roleId}
380
     * @depends testAssignRoleToUser
381
     */
382
    public function testUnassignRoleFromUser($roleAssignmentHref)
383
    {
384
        $response = $this->sendHttpRequest(
385
            $this->createHttpRequest('DELETE', $roleAssignmentHref)
386
        );
387
388
        self::assertHttpResponseCodeEquals($response, 200);
389
    }
390
391
    /**
392
     * @depends testCreateRole
393
     * @covers POST /user/groups/{groupId}/roles
394
     *
395
     * @return string role assignment href
396
     */
397 View Code Duplication
    public function testAssignRoleToUserGroup($roleHref)
398
    {
399
        self::markTestSkipped('@todo fixme');
400
        $xml = <<< XML
401
<?xml version="1.0" encoding="UTF-8"?>
402
<RoleAssignInput>
403
  <Role href="{$roleHref}" media-type="application/vnd.ez.api.RoleAssignInput+xml"/>
404
  <limitation identifier="Section">
405
      <values>
406
          <ref href="/api/ezp/v2/content/sections/1" media-type="application/vnd.ez.api.Section+xml" />
407
      </values>
408
  </limitation>
409
</RoleAssignInput>
410
XML;
411
412
        $request = $this->createHttpRequest(
413
            'POST',
414
            '/api/ezp/v2/user/groups/1/5/44/roles',
415
            'RoleAssignInput+xml',
416
            'RoleAssignmentList+json'
417
        );
418
        $request->setContent($xml);
419
420
        $response = $this->sendHttpRequest($request);
421
        $roleAssignmentArray = json_decode($response->getContent(), true);
422
423
        self::assertHttpResponseCodeEquals($response, 200);
424
425
        return $roleAssignmentArray['RoleAssignmentList']['RoleAssignment'][0]['_href'];
426
    }
427
428
    /**
429
     * @covers GET /user/groups/{groupId}/roles/{roleId}
430
     * @depends testAssignRoleToUserGroup
431
     */
432 View Code Duplication
    public function testLoadRoleAssignmentForUserGroup($roleAssignmentHref)
433
    {
434
        $response = $this->sendHttpRequest(
435
            $request = $this->createHttpRequest('GET', $roleAssignmentHref)
436
        );
437
438
        self::markTestIncomplete('Requires that visitors are fixed (group url generation)');
439
        self::assertHttpResponseCodeEquals($response, 200);
440
    }
441
442
    /**
443
     * @covers DELETE /user/groups/{groupId}/roles/{roleId}
444
     * @depends testAssignRoleToUserGroup
445
     */
446 View Code Duplication
    public function testUnassignRoleFromUserGroup($roleAssignmentHref)
447
    {
448
        $response = $this->sendHttpRequest(
449
            $request = $this->createHttpRequest('DELETE', $roleAssignmentHref)
450
        );
451
452
        self::markTestIncomplete('Requires that visitors are fixed (group url generation)');
453
        self::assertHttpResponseCodeEquals($response, 200);
454
    }
455
456
    /**
457
     * @covers GET /user/users/{userId}/roles
458
     */
459
    public function testLoadRoleAssignmentsForUser()
460
    {
461
        $response = $this->sendHttpRequest(
462
            $request = $this->createHttpRequest('GET', '/api/ezp/v2/user/users/10/roles')
463
        );
464
465
        self::assertHttpResponseCodeEquals($response, 200);
466
    }
467
468
    /**
469
     * @covers GET /user/groups/{groupPath}/roles
470
     */
471
    public function testLoadRoleAssignmentsForUserGroup()
472
    {
473
        $response = $this->sendHttpRequest(
474
            $this->createHttpRequest('GET', '/api/ezp/v2/user/groups/1/5/44/roles')
475
        );
476
477
        self::assertHttpResponseCodeEquals($response, 200);
478
    }
479
480
    /**
481
     * @covers GET /user/policies?userId={userId}
482
     */
483
    public function testListPoliciesForUser()
484
    {
485
        $response = $this->sendHttpRequest(
486
            $this->createHttpRequest('GET', '/api/ezp/v2/user/policies?userId=10')
487
        );
488
489
        self::assertHttpResponseCodeEquals($response, 200);
490
    }
491
492
    /**
493
     * @covers DELETE /user/roles/{roleId}/policies/{policyId}
494
     * @depends testAddPolicy
495
     */
496
    public function testDeletePolicy($policyHref)
497
    {
498
        $response = $this->sendHttpRequest(
499
            $this->createHttpRequest('DELETE', $policyHref)
500
        );
501
502
        self::assertHttpResponseCodeEquals($response, 204);
503
    }
504
505
    /**
506
     * @covers DELETE /user/roles/{roleId}/policies
507
     * @depends testCreateRole
508
     */
509
    public function testDeletePolicies($roleHref)
510
    {
511
        $response = $this->sendHttpRequest(
512
            $this->createHttpRequest('DELETE', "$roleHref/policies")
513
        );
514
515
        self::assertHttpResponseCodeEquals($response, 204);
516
    }
517
518
    /**
519
     * @covers DELETE /user/roles/{roleId}
520
     * @depends testCreateRole
521
     */
522
    public function testDeleteRole($roleHref)
523
    {
524
        $response = $this->sendHttpRequest(
525
            $this->createHttpRequest('DELETE', $roleHref)
526
        );
527
528
        self::assertHttpResponseCodeEquals($response, 204);
529
    }
530
531
    /**
532
     * @covers DELETE /user/roles/{roleId}/draft
533
     * @depends testCreateRoleDraft
534
     */
535
    public function testDeleteRoleDraft($roleHref)
536
    {
537
        $response = $this->sendHttpRequest(
538
            $this->createHttpRequest('DELETE', $roleHref)
539
        );
540
541
        self::assertHttpResponseCodeEquals($response, 204);
542
    }
543
}
544