Completed
Push — ezp-24830_REST_for_role_drafts ( a61586...6f0e8c )
by
unknown
30:00
created

RoleTest::testUpdatePolicyByRoleDraft()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 26
Code Lines 12

Duplication

Lines 26
Ratio 100 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
c 1
b 1
f 0
dl 26
loc 26
rs 8.8571
cc 1
eloc 12
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($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 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($roleDraftHref)
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', $roleDraftHref, '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 POST /user/roles/{roleId}/policiesByRoleDraft
276
     * @depends testCreateRoleDraft
277
     *
278
     * @return string The created policy href
279
     */
280 View Code Duplication
    public function testAddPolicyByRoleDraft($roleDraftHref)
281
    {
282
        $xml = <<< XML
283
<?xml version="1.0" encoding="UTF-8"?>
284
<PolicyCreate>
285
  <module>content</module>
286
  <function>create</function>
287
  <limitations>
288
    <limitation identifier="Class">
289
      <values>
290
        <ref href="1"/>
291
      </values>
292
    </limitation>
293
  </limitations>
294
</PolicyCreate>
295
XML;
296
        $request = $this->createHttpRequest(
297
            'POST',
298
            $this->roleDraftHrefToRoleHref($roleDraftHref) . '/policiesByRoleDraft',
299
            'PolicyCreate+xml',
300
            'Policy+json'
301
        );
302
        $request->setContent($xml);
303
304
        $response = $this->sendHttpRequest($request);
305
        self::assertHttpResponseCodeEquals($response, 201);
306
        self::assertHttpResponseHasHeader($response, 'Location');
307
308
        $href = $response->getHeader('Location');
309
        $this->addCreatedElement($href);
310
311
        return $href;
312
    }
313
314
    /**
315
     * @covers GET /user/roles/{roleId}/policies/{policyId}
316
     * @depends testAddPolicy
317
     */
318
    public function testLoadPolicy($policyHref)
319
    {
320
        $response = $this->sendHttpRequest(
321
            $this->createHttpRequest('GET', $policyHref)
322
        );
323
324
        self::assertHttpResponseCodeEquals($response, 200);
325
    }
326
327
    /**
328
     * @covers GET /user/roles/{roleId}/policies
329
     * @depends testCreateRole
330
     */
331
    public function testLoadPolicies($roleHref)
332
    {
333
        $response = $this->sendHttpRequest(
334
            $this->createHttpRequest('GET', "$roleHref/policies")
335
        );
336
337
        self::assertHttpResponseCodeEquals($response, 200);
338
    }
339
340
    /**
341
     * @covers PATCH /user/roles/{roleId}/policies/{policyId}
342
     * @depends testAddPolicy
343
     */
344 View Code Duplication
    public function testUpdatePolicy($policyHref)
345
    {
346
        $xml = <<< XML
347
<?xml version="1.0" encoding="UTF-8"?>
348
<PolicyUpdate>
349
  <limitations>
350
    <limitation identifier="Class">
351
      <values>
352
        <ref href="1"/>
353
      </values>
354
    </limitation>
355
  </limitations>
356
</PolicyUpdate>
357
XML;
358
359
        $request = $this->createHttpRequest('PATCH', $policyHref, 'PolicyUpdate+xml', 'Policy+json');
360
        $request->setContent($xml);
361
        $response = $this->sendHttpRequest($request);
362
363
        self::assertHttpResponseCodeEquals($response, 200);
364
    }
365
366
    /**
367
     * @covers PATCH /user/roles/{roleId}/policiesByRoleDraft/{policyId}
368
     * @depends testAddPolicyByRoleDraft
369
     */
370 View Code Duplication
    public function testUpdatePolicyByRoleDraft($policyHref)
371
    {
372
        $xml = <<< XML
373
<?xml version="1.0" encoding="UTF-8"?>
374
<PolicyUpdate>
375
  <limitations>
376
    <limitation identifier="Class">
377
      <values>
378
        <ref href="1"/>
379
      </values>
380
    </limitation>
381
  </limitations>
382
</PolicyUpdate>
383
XML;
384
385
        $request = $this->createHttpRequest(
386
            'PATCH',
387
            $this->policyHrefToPolicyDraftHref($policyHref),
388
            'PolicyUpdate+xml',
389
            'Policy+json'
390
        );
391
        $request->setContent($xml);
392
        $response = $this->sendHttpRequest($request);
393
394
        self::assertHttpResponseCodeEquals($response, 200);
395
    }
396
397
    /**
398
     * @depends testCreateRole
399
     * @covers POST /user/users/{userId}/roles
400
     *
401
     * @return string assigned role href
402
     *
403
     * @todo stop using the anonymous user, this is dangerous...
404
     */
405 View Code Duplication
    public function testAssignRoleToUser($roleHref)
406
    {
407
        self::markTestSkipped('@todo fixme');
408
        $xml = <<< XML
409
<?xml version="1.0" encoding="UTF-8"?>
410
<RoleAssignInput>
411
  <Role href="{$roleHref}" media-type="application/vnd.ez.api.RoleAssignInput+xml"/>
412
  <limitation identifier="Section">
413
      <values>
414
          <ref href="/api/ezp/v2/content/sections/1" media-type="application/vnd.ez.api.Section+xml" />
415
      </values>
416
  </limitation>
417
</RoleAssignInput>
418
XML;
419
420
        $request = $this->createHttpRequest(
421
            'POST',
422
            '/api/ezp/v2/user/users/10/roles',
423
            'RoleAssignInput+xml',
424
            'RoleAssignmentList+json'
425
        );
426
        $request->setContent($xml);
427
428
        $response = $this->sendHttpRequest($request);
429
        $roleAssignmentArray = json_decode($response->getContent(), true);
430
431
        self::assertHttpResponseCodeEquals($response, 200);
432
433
        return $roleAssignmentArray['RoleAssignmentList']['RoleAssignment'][0]['_href'];
434
    }
435
436
    /**
437
     * @covers GET /user/users/{userId}/roles/{roleId}
438
     * @depends testAssignRoleToUser
439
     */
440
    public function testLoadRoleAssignmentForUser($roleAssignmentHref)
441
    {
442
        $response = $this->sendHttpRequest(
443
            $this->createHttpRequest('GET', $roleAssignmentHref)
444
        );
445
446
        self::assertHttpResponseCodeEquals($response, 200);
447
    }
448
449
    /**
450
     * @covers DELETE /user/users/{userId}/roles/{roleId}
451
     * @depends testAssignRoleToUser
452
     */
453
    public function testUnassignRoleFromUser($roleAssignmentHref)
454
    {
455
        $response = $this->sendHttpRequest(
456
            $this->createHttpRequest('DELETE', $roleAssignmentHref)
457
        );
458
459
        self::assertHttpResponseCodeEquals($response, 200);
460
    }
461
462
    /**
463
     * @depends testCreateRole
464
     * @covers POST /user/groups/{groupId}/roles
465
     *
466
     * @return string role assignment href
467
     */
468 View Code Duplication
    public function testAssignRoleToUserGroup($roleHref)
469
    {
470
        self::markTestSkipped('@todo fixme');
471
        $xml = <<< XML
472
<?xml version="1.0" encoding="UTF-8"?>
473
<RoleAssignInput>
474
  <Role href="{$roleHref}" media-type="application/vnd.ez.api.RoleAssignInput+xml"/>
475
  <limitation identifier="Section">
476
      <values>
477
          <ref href="/api/ezp/v2/content/sections/1" media-type="application/vnd.ez.api.Section+xml" />
478
      </values>
479
  </limitation>
480
</RoleAssignInput>
481
XML;
482
483
        $request = $this->createHttpRequest(
484
            'POST',
485
            '/api/ezp/v2/user/groups/1/5/44/roles',
486
            'RoleAssignInput+xml',
487
            'RoleAssignmentList+json'
488
        );
489
        $request->setContent($xml);
490
491
        $response = $this->sendHttpRequest($request);
492
        $roleAssignmentArray = json_decode($response->getContent(), true);
493
494
        self::assertHttpResponseCodeEquals($response, 200);
495
496
        return $roleAssignmentArray['RoleAssignmentList']['RoleAssignment'][0]['_href'];
497
    }
498
499
    /**
500
     * @covers GET /user/groups/{groupId}/roles/{roleId}
501
     * @depends testAssignRoleToUserGroup
502
     */
503 View Code Duplication
    public function testLoadRoleAssignmentForUserGroup($roleAssignmentHref)
504
    {
505
        $response = $this->sendHttpRequest(
506
            $request = $this->createHttpRequest('GET', $roleAssignmentHref)
507
        );
508
509
        self::markTestIncomplete('Requires that visitors are fixed (group url generation)');
510
        self::assertHttpResponseCodeEquals($response, 200);
511
    }
512
513
    /**
514
     * @covers DELETE /user/groups/{groupId}/roles/{roleId}
515
     * @depends testAssignRoleToUserGroup
516
     */
517 View Code Duplication
    public function testUnassignRoleFromUserGroup($roleAssignmentHref)
518
    {
519
        $response = $this->sendHttpRequest(
520
            $request = $this->createHttpRequest('DELETE', $roleAssignmentHref)
521
        );
522
523
        self::markTestIncomplete('Requires that visitors are fixed (group url generation)');
524
        self::assertHttpResponseCodeEquals($response, 200);
525
    }
526
527
    /**
528
     * @covers GET /user/users/{userId}/roles
529
     */
530
    public function testLoadRoleAssignmentsForUser()
531
    {
532
        $response = $this->sendHttpRequest(
533
            $request = $this->createHttpRequest('GET', '/api/ezp/v2/user/users/10/roles')
534
        );
535
536
        self::assertHttpResponseCodeEquals($response, 200);
537
    }
538
539
    /**
540
     * @covers GET /user/groups/{groupPath}/roles
541
     */
542
    public function testLoadRoleAssignmentsForUserGroup()
543
    {
544
        $response = $this->sendHttpRequest(
545
            $this->createHttpRequest('GET', '/api/ezp/v2/user/groups/1/5/44/roles')
546
        );
547
548
        self::assertHttpResponseCodeEquals($response, 200);
549
    }
550
551
    /**
552
     * @covers GET /user/policies?userId={userId}
553
     */
554
    public function testListPoliciesForUser()
555
    {
556
        $response = $this->sendHttpRequest(
557
            $this->createHttpRequest('GET', '/api/ezp/v2/user/policies?userId=10')
558
        );
559
560
        self::assertHttpResponseCodeEquals($response, 200);
561
    }
562
563
    /**
564
     * @covers DELETE /user/roles/{roleId}/policies/{policyId}
565
     * @depends testAddPolicy
566
     */
567
    public function testDeletePolicy($policyHref)
568
    {
569
        $response = $this->sendHttpRequest(
570
            $this->createHttpRequest('DELETE', $policyHref)
571
        );
572
573
        self::assertHttpResponseCodeEquals($response, 204);
574
    }
575
576
    /**
577
     * @covers DELETE /user/roles/{roleId}/policiesByRoleDraft/{policyId}
578
     * @depends testAddPolicyByRoleDraft
579
     */
580
    public function testRemovePolicyByRoleDraft($policyHref)
581
    {
582
        $response = $this->sendHttpRequest(
583
            $this->createHttpRequest('DELETE', $this->policyHrefToPolicyDraftHref($policyHref))
584
        );
585
586
        self::assertHttpResponseCodeEquals($response, 204);
587
    }
588
589
    /**
590
     * @covers DELETE /user/roles/{roleId}/policies
591
     * @depends testCreateRole
592
     */
593
    public function testDeletePolicies($roleHref)
594
    {
595
        $response = $this->sendHttpRequest(
596
            $this->createHttpRequest('DELETE', "$roleHref/policies")
597
        );
598
599
        self::assertHttpResponseCodeEquals($response, 204);
600
    }
601
602
    /**
603
     * @covers DELETE /user/roles/{roleId}
604
     * @depends testCreateRole
605
     */
606
    public function testDeleteRole($roleHref)
607
    {
608
        $response = $this->sendHttpRequest(
609
            $this->createHttpRequest('DELETE', $roleHref)
610
        );
611
612
        self::assertHttpResponseCodeEquals($response, 204);
613
    }
614
615
    /**
616
     * @covers PUBLISH /user/roles/{roleId}/draft
617
     * @depends testCreateRoleDraft
618
     */
619
    public function testPublishRoleDraft($roleDraftHref)
620
    {
621
        $response = $this->sendHttpRequest(
622
            $this->createHttpRequest('PUBLISH', $roleDraftHref)
623
        );
624
625
        self::assertHttpResponseCodeEquals($response, 201);
626
    }
627
628
    /**
629
     * @covers DELETE /user/roles/{roleId}/draft
630
     * @depends testCreateRoleDraft
631
     */
632
    public function testDeleteRoleDraft($roleDraftHref)
633
    {
634
        // we need to create a role draft first since we published the previous one in testPublishRoleDraft
635
        $roleHref = $this->testCreateRoleDraft($this->roleDraftHrefToRoleHref($roleDraftHref));
636
637
        $response = $this->sendHttpRequest(
638
            $this->createHttpRequest('DELETE', $roleHref)
639
        );
640
641
        self::assertHttpResponseCodeEquals($response, 204);
642
    }
643
644
    /**
645
     * Helper method for changing a roledraft href to a role href
646
     *
647
     * @param string $roleDraftHref Role draft href
648
     *
649
     * @return string Role href
650
     */
651
    private function roleDraftHrefToRoleHref($roleDraftHref)
652
    {
653
        return str_replace('/draft', '', $roleDraftHref);
654
    }
655
656
    /**
657
     * Helper method for changing a policy href to a policy by role draft href
658
     *
659
     * @param string $policyHref Policy href
660
     *
661
     * @return string Policy by role draft href
662
     */
663
    private function policyHrefToPolicyDraftHref($policyHref)
664
    {
665
        return str_replace('/policies/', '/policiesByRoleDraft/', $policyHref);
666
    }
667
}
668