Completed
Push — test-EZP-26707-issearchable-fu... ( fbd943...774d65 )
by
unknown
19:43
created

RoleTest::testAddPolicyByRoleDraft()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 33
Code Lines 16

Duplication

Lines 33
Ratio 100 %

Importance

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