Completed
Push — asset_dump_sf_env ( 7179db...758bb0 )
by André
16:06
created

RoleTest::testUpdatePolicyByRoleDraft()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 21
Code Lines 8

Duplication

Lines 21
Ratio 100 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
c 1
b 1
f 0
dl 21
loc 21
rs 9.3142
cc 1
eloc 8
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 View Code Duplication
    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($roleDraftHref)
161
    {
162
        $response = $this->sendHttpRequest(
163
            $this->createHttpRequest('GET', $roleDraftHref)
164
        );
165
166
        self::assertHttpResponseCodeEquals($response, 200);
167
    }
168
169
    /**
170
     * @depends testCreateRole
171
     * @covers PATCH /user/roles/{roleId}
172
     */
173 View Code Duplication
    public function testUpdateRole($roleHref)
174
    {
175
        $xml = <<< XML
176
<?xml version="1.0" encoding="UTF-8"?>
177
<RoleInput>
178
  <identifier>testUpdateRole</identifier>
179
  <mainLanguageCode>eng-GB</mainLanguageCode>
180
  <names>
181
    <value languageCode="eng-GB">testUpdateRole</value>
182
  </names>
183
  <descriptions>
184
    <value languageCode="eng-GB">testUpdateRole description</value>
185
  </descriptions>
186
</RoleInput>
187
XML;
188
189
        $request = $this->createHttpRequest('PATCH', $roleHref, 'RoleInput+xml', 'Role+json');
190
        $request->setContent($xml);
191
        $response = $this->sendHttpRequest($request);
192
193
        // @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
194
        self::assertHttpResponseCodeEquals($response, 200);
195
    }
196
197
    /**
198
     * @depends testCreateRoleDraft
199
     * @covers PATCH /user/roles/{roleId}/draft
200
     */
201 View Code Duplication
    public function testUpdateRoleDraft($roleDraftHref)
202
    {
203
        $xml = <<< XML
204
<?xml version="1.0" encoding="UTF-8"?>
205
<RoleInput>
206
  <identifier>testUpdateRoleDraft</identifier>
207
  <mainLanguageCode>eng-GB</mainLanguageCode>
208
  <names>
209
    <value languageCode="eng-GB">testUpdateRoleDraft</value>
210
  </names>
211
  <descriptions>
212
    <value languageCode="eng-GB">testUpdateRoleDraft description</value>
213
  </descriptions>
214
</RoleInput>
215
XML;
216
217
        $request = $this->createHttpRequest('PATCH', $roleDraftHref, 'RoleInput+xml', 'RoleDraft+json');
218
        $request->setContent($xml);
219
        $response = $this->sendHttpRequest($request);
220
221
        self::assertHttpResponseCodeEquals($response, 200);
222
    }
223
224
    /**
225
     * @covers POST /user/roles/{roleId}/policies
226
     * @depends testCreateRole
227
     *
228
     * @return string The created policy href
229
     */
230 View Code Duplication
    public function testAddPolicy($roleHref)
231
    {
232
        // @todo Error in Resource URL in spec @ https://github.com/ezsystems/ezpublish-kernel/blob/master/doc/specifications/rest/REST-API-V2.rst#151213create-policy
233
        $xml = <<< XML
234
<?xml version="1.0" encoding="UTF-8"?>
235
<PolicyCreate>
236
  <module>content</module>
237
  <function>create</function>
238
  <limitations>
239
    <limitation identifier="Class">
240
      <values>
241
        <ref href="2"/>
242
      </values>
243
    </limitation>
244
  </limitations>
245
</PolicyCreate>
246
XML;
247
        $request = $this->createHttpRequest('POST', "$roleHref/policies", 'PolicyCreate+xml', 'Policy+json');
248
        $request->setContent($xml);
249
250
        $response = $this->sendHttpRequest($request);
251
        self::assertHttpResponseCodeEquals($response, 201);
252
        self::assertHttpResponseHasHeader($response, 'Location');
253
254
        $href = $response->getHeader('Location');
255
        $this->addCreatedElement($href);
256
257
        return $href;
258
    }
259
260
    /**
261
     * @covers POST /user/roles/{roleId}/policies
262
     * @depends testCreateRoleDraft
263
     *
264
     * @return string The created policy href
265
     */
266 View Code Duplication
    public function testAddPolicyByRoleDraft($roleDraftHref)
267
    {
268
        $xml = <<< XML
269
<?xml version="1.0" encoding="UTF-8"?>
270
<PolicyCreate>
271
  <module>content</module>
272
  <function>create</function>
273
  <limitations>
274
    <limitation identifier="Class">
275
      <values>
276
        <ref href="1"/>
277
      </values>
278
    </limitation>
279
  </limitations>
280
</PolicyCreate>
281
XML;
282
        $request = $this->createHttpRequest(
283
            'POST',
284
            $this->roleDraftHrefToRoleHref($roleDraftHref) . '/policies',
285
            'PolicyCreate+xml',
286
            'Policy+json'
287
        );
288
        $request->setContent($xml);
289
290
        $response = $this->sendHttpRequest($request);
291
        self::assertHttpResponseCodeEquals($response, 201);
292
        self::assertHttpResponseHasHeader($response, 'Location');
293
294
        $href = $response->getHeader('Location');
295
        $this->addCreatedElement($href);
296
297
        return $href;
298
    }
299
300
    /**
301
     * @covers GET /user/roles/{roleId}/policies/{policyId}
302
     * @depends testAddPolicy
303
     */
304
    public function testLoadPolicy($policyHref)
305
    {
306
        $response = $this->sendHttpRequest(
307
            $this->createHttpRequest('GET', $policyHref)
308
        );
309
310
        self::assertHttpResponseCodeEquals($response, 200);
311
    }
312
313
    /**
314
     * @covers GET /user/roles/{roleId}/policies
315
     * @depends testCreateRole
316
     */
317
    public function testLoadPolicies($roleHref)
318
    {
319
        $response = $this->sendHttpRequest(
320
            $this->createHttpRequest('GET', "$roleHref/policies")
321
        );
322
323
        self::assertHttpResponseCodeEquals($response, 200);
324
    }
325
326
    /**
327
     * @covers PATCH /user/roles/{roleId}/policies/{policyId}
328
     * @depends testAddPolicy
329
     */
330 View Code Duplication
    public function testUpdatePolicy($policyHref)
331
    {
332
        $xml = <<< XML
333
<?xml version="1.0" encoding="UTF-8"?>
334
<PolicyUpdate>
335
  <limitations>
336
    <limitation identifier="Class">
337
      <values>
338
        <ref href="1"/>
339
      </values>
340
    </limitation>
341
  </limitations>
342
</PolicyUpdate>
343
XML;
344
345
        $request = $this->createHttpRequest('PATCH', $policyHref, 'PolicyUpdate+xml', 'Policy+json');
346
        $request->setContent($xml);
347
        $response = $this->sendHttpRequest($request);
348
349
        self::assertHttpResponseCodeEquals($response, 200);
350
    }
351
352
    /**
353
     * @covers PATCH /user/roles/{roleId}/policies/{policyId}
354
     * @depends testAddPolicyByRoleDraft
355
     */
356 View Code Duplication
    public function testUpdatePolicyByRoleDraft($policyHref)
357
    {
358
        $xml = <<< XML
359
<?xml version="1.0" encoding="UTF-8"?>
360
<PolicyUpdate>
361
  <limitations>
362
    <limitation identifier="Class">
363
      <values>
364
        <ref href="1"/>
365
      </values>
366
    </limitation>
367
  </limitations>
368
</PolicyUpdate>
369
XML;
370
371
        $request = $this->createHttpRequest('PATCH', $policyHref, 'PolicyUpdate+xml', 'Policy+json');
372
        $request->setContent($xml);
373
        $response = $this->sendHttpRequest($request);
374
375
        self::assertHttpResponseCodeEquals($response, 200);
376
    }
377
378
    /**
379
     * @depends testCreateRole
380
     * @covers POST /user/users/{userId}/roles
381
     *
382
     * @return string assigned role href
383
     *
384
     * @todo stop using the anonymous user, this is dangerous...
385
     */
386 View Code Duplication
    public function testAssignRoleToUser($roleHref)
387
    {
388
        self::markTestSkipped('@todo fixme');
389
        $xml = <<< XML
390
<?xml version="1.0" encoding="UTF-8"?>
391
<RoleAssignInput>
392
  <Role href="{$roleHref}" media-type="application/vnd.ez.api.RoleAssignInput+xml"/>
393
  <limitation identifier="Section">
394
      <values>
395
          <ref href="/api/ezp/v2/content/sections/1" media-type="application/vnd.ez.api.Section+xml" />
396
      </values>
397
  </limitation>
398
</RoleAssignInput>
399
XML;
400
401
        $request = $this->createHttpRequest(
402
            'POST',
403
            '/api/ezp/v2/user/users/10/roles',
404
            'RoleAssignInput+xml',
405
            'RoleAssignmentList+json'
406
        );
407
        $request->setContent($xml);
408
409
        $response = $this->sendHttpRequest($request);
410
        $roleAssignmentArray = json_decode($response->getContent(), true);
411
412
        self::assertHttpResponseCodeEquals($response, 200);
413
414
        return $roleAssignmentArray['RoleAssignmentList']['RoleAssignment'][0]['_href'];
415
    }
416
417
    /**
418
     * @covers GET /user/users/{userId}/roles/{roleId}
419
     * @depends testAssignRoleToUser
420
     */
421
    public function testLoadRoleAssignmentForUser($roleAssignmentHref)
422
    {
423
        $response = $this->sendHttpRequest(
424
            $this->createHttpRequest('GET', $roleAssignmentHref)
425
        );
426
427
        self::assertHttpResponseCodeEquals($response, 200);
428
    }
429
430
    /**
431
     * @covers DELETE /user/users/{userId}/roles/{roleId}
432
     * @depends testAssignRoleToUser
433
     */
434
    public function testUnassignRoleFromUser($roleAssignmentHref)
435
    {
436
        $response = $this->sendHttpRequest(
437
            $this->createHttpRequest('DELETE', $roleAssignmentHref)
438
        );
439
440
        self::assertHttpResponseCodeEquals($response, 200);
441
    }
442
443
    /**
444
     * @depends testCreateRole
445
     * @covers POST /user/groups/{groupId}/roles
446
     *
447
     * @return string role assignment href
448
     */
449 View Code Duplication
    public function testAssignRoleToUserGroup($roleHref)
450
    {
451
        self::markTestSkipped('@todo fixme');
452
        $xml = <<< XML
453
<?xml version="1.0" encoding="UTF-8"?>
454
<RoleAssignInput>
455
  <Role href="{$roleHref}" media-type="application/vnd.ez.api.RoleAssignInput+xml"/>
456
  <limitation identifier="Section">
457
      <values>
458
          <ref href="/api/ezp/v2/content/sections/1" media-type="application/vnd.ez.api.Section+xml" />
459
      </values>
460
  </limitation>
461
</RoleAssignInput>
462
XML;
463
464
        $request = $this->createHttpRequest(
465
            'POST',
466
            '/api/ezp/v2/user/groups/1/5/44/roles',
467
            'RoleAssignInput+xml',
468
            'RoleAssignmentList+json'
469
        );
470
        $request->setContent($xml);
471
472
        $response = $this->sendHttpRequest($request);
473
        $roleAssignmentArray = json_decode($response->getContent(), true);
474
475
        self::assertHttpResponseCodeEquals($response, 200);
476
477
        return $roleAssignmentArray['RoleAssignmentList']['RoleAssignment'][0]['_href'];
478
    }
479
480
    /**
481
     * @covers GET /user/groups/{groupId}/roles/{roleId}
482
     * @depends testAssignRoleToUserGroup
483
     */
484 View Code Duplication
    public function testLoadRoleAssignmentForUserGroup($roleAssignmentHref)
485
    {
486
        $response = $this->sendHttpRequest(
487
            $request = $this->createHttpRequest('GET', $roleAssignmentHref)
488
        );
489
490
        self::markTestIncomplete('Requires that visitors are fixed (group url generation)');
491
        self::assertHttpResponseCodeEquals($response, 200);
492
    }
493
494
    /**
495
     * @covers DELETE /user/groups/{groupId}/roles/{roleId}
496
     * @depends testAssignRoleToUserGroup
497
     */
498 View Code Duplication
    public function testUnassignRoleFromUserGroup($roleAssignmentHref)
499
    {
500
        $response = $this->sendHttpRequest(
501
            $request = $this->createHttpRequest('DELETE', $roleAssignmentHref)
502
        );
503
504
        self::markTestIncomplete('Requires that visitors are fixed (group url generation)');
505
        self::assertHttpResponseCodeEquals($response, 200);
506
    }
507
508
    /**
509
     * @covers GET /user/users/{userId}/roles
510
     */
511
    public function testLoadRoleAssignmentsForUser()
512
    {
513
        $response = $this->sendHttpRequest(
514
            $request = $this->createHttpRequest('GET', '/api/ezp/v2/user/users/10/roles')
515
        );
516
517
        self::assertHttpResponseCodeEquals($response, 200);
518
    }
519
520
    /**
521
     * @covers GET /user/groups/{groupPath}/roles
522
     */
523
    public function testLoadRoleAssignmentsForUserGroup()
524
    {
525
        $response = $this->sendHttpRequest(
526
            $this->createHttpRequest('GET', '/api/ezp/v2/user/groups/1/5/44/roles')
527
        );
528
529
        self::assertHttpResponseCodeEquals($response, 200);
530
    }
531
532
    /**
533
     * @covers GET /user/policies?userId={userId}
534
     */
535
    public function testListPoliciesForUser()
536
    {
537
        $response = $this->sendHttpRequest(
538
            $this->createHttpRequest('GET', '/api/ezp/v2/user/policies?userId=10')
539
        );
540
541
        self::assertHttpResponseCodeEquals($response, 200);
542
    }
543
544
    /**
545
     * @covers DELETE /user/roles/{roleId}/policies/{policyId}
546
     * @depends testAddPolicy
547
     */
548
    public function testDeletePolicy($policyHref)
549
    {
550
        $response = $this->sendHttpRequest(
551
            $this->createHttpRequest('DELETE', $policyHref)
552
        );
553
554
        self::assertHttpResponseCodeEquals($response, 204);
555
    }
556
557
    /**
558
     * @covers DELETE /user/roles/{roleId}/policies/{policyId}
559
     * @depends testAddPolicyByRoleDraft
560
     */
561
    public function testRemovePolicyByRoleDraft($policyHref)
562
    {
563
        $response = $this->sendHttpRequest(
564
            $this->createHttpRequest('DELETE', $policyHref)
565
        );
566
567
        self::assertHttpResponseCodeEquals($response, 204);
568
    }
569
570
    /**
571
     * @covers DELETE /user/roles/{roleId}/policies
572
     * @depends testCreateRole
573
     */
574
    public function testDeletePolicies($roleHref)
575
    {
576
        $response = $this->sendHttpRequest(
577
            $this->createHttpRequest('DELETE', "$roleHref/policies")
578
        );
579
580
        self::assertHttpResponseCodeEquals($response, 204);
581
    }
582
583
    /**
584
     * @covers DELETE /user/roles/{roleId}
585
     * @depends testCreateRole
586
     */
587
    public function testDeleteRole($roleHref)
588
    {
589
        $response = $this->sendHttpRequest(
590
            $this->createHttpRequest('DELETE', $roleHref)
591
        );
592
593
        self::assertHttpResponseCodeEquals($response, 204);
594
    }
595
596
    /**
597
     * @covers PUBLISH /user/roles/{roleId}/draft
598
     * @depends testCreateRoleDraft
599
     */
600
    public function testPublishRoleDraft($roleDraftHref)
601
    {
602
        $response = $this->sendHttpRequest(
603
            $this->createHttpRequest('PUBLISH', $roleDraftHref)
604
        );
605
606
        self::assertHttpResponseCodeEquals($response, 201);
607
    }
608
609
    /**
610
     * @covers DELETE /user/roles/{roleId}/draft
611
     * @depends testCreateRoleDraft
612
     */
613
    public function testDeleteRoleDraft($roleDraftHref)
614
    {
615
        // we need to create a role draft first since we published the previous one in testPublishRoleDraft
616
        $roleHref = $this->testCreateRoleDraft($this->roleDraftHrefToRoleHref($roleDraftHref));
617
618
        $response = $this->sendHttpRequest(
619
            $this->createHttpRequest('DELETE', $roleHref)
620
        );
621
622
        self::assertHttpResponseCodeEquals($response, 204);
623
    }
624
625
    /**
626
     * Helper method for changing a roledraft href to a role href.
627
     *
628
     * @param string $roleDraftHref Role draft href
629
     *
630
     * @return string Role href
631
     */
632
    private function roleDraftHrefToRoleHref($roleDraftHref)
633
    {
634
        return str_replace('/draft', '', $roleDraftHref);
635
    }
636
}
637