Completed
Push — ezp26179-rest_session_refresh_... ( 9206e2...6e6e43 )
by
unknown
24:52
created

RoleTest::testAddPolicy()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 29
Code Lines 12

Duplication

Lines 29
Ratio 100 %

Importance

Changes 0
Metric Value
cc 1
eloc 12
nc 1
nop 1
dl 29
loc 29
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
use eZ\Publish\API\Repository\Values\User\Limitation;
15
16
class RoleTest extends RESTFunctionalTestCase
17
{
18
    /**
19
     * @covers POST /user/roles
20
     *
21
     * BC compatible mode, will return a role
22
     *
23
     * @return string The created role href
24
     */
25
    public function testCreateRole()
26
    {
27
        $xml = <<< XML
28
<?xml version="1.0" encoding="UTF-8"?>
29
<RoleInput>
30
  <identifier>testCreateRole</identifier>
31
  <mainLanguageCode>eng-GB</mainLanguageCode>
32
  <names>
33
    <value languageCode="eng-GB">testCreateRole</value>
34
  </names>
35
  <descriptions>
36
    <value languageCode="eng-GB">testCreateRole description</value>
37
  </descriptions>
38
</RoleInput>
39
XML;
40
        $request = $this->createHttpRequest('POST', '/api/ezp/v2/user/roles', 'RoleInput+xml', 'Role+json');
41
        $request->setContent($xml);
42
        $response = $this->sendHttpRequest($request);
43
44
        self::assertHttpResponseCodeEquals($response, 201);
45
        self::assertHttpResponseHasHeader($response, 'Location');
46
47
        $href = $response->getHeader('Location');
48
        $this->addCreatedElement($href);
49
50
        return $href;
51
    }
52
53
    /**
54
     * @covers POST /user/roles
55
     *
56
     * BC incompatible mode, will return a role draft
57
     *
58
     * @return string The created role draft href
59
     */
60 View Code Duplication
    public function testCreateRoleWithDraft()
61
    {
62
        $xml = <<< XML
63
<?xml version="1.0" encoding="UTF-8"?>
64
<RoleInput>
65
  <identifier>testCreateRoleDraft</identifier>
66
  <mainLanguageCode>eng-GB</mainLanguageCode>
67
  <names>
68
    <value languageCode="eng-GB">testCreateRoleDraft</value>
69
  </names>
70
  <descriptions>
71
    <value languageCode="eng-GB">testCreateRoleDraft description</value>
72
  </descriptions>
73
</RoleInput>
74
XML;
75
        $request = $this->createHttpRequest(
76
            'POST',
77
            '/api/ezp/v2/user/roles?publish=false',
78
            'RoleInput+xml',
79
            'RoleDraft+json'
80
        );
81
        $request->setContent($xml);
82
        $response = $this->sendHttpRequest($request);
83
84
        self::assertHttpResponseCodeEquals($response, 201);
85
        self::assertHttpResponseHasHeader($response, 'Location');
86
87
        $href = $response->getHeader('Location');
88
        $this->addCreatedElement($href);
89
90
        return $href . '/draft';
91
    }
92
93
    /**
94
     * @covers GET /user/roles
95
     */
96
    public function testListRoles()
97
    {
98
        $response = $this->sendHttpRequest(
99
            $this->createHttpRequest('GET', '/api/ezp/v2/user/roles')
100
        );
101
102
        self::assertHttpResponseCodeEquals($response, 200);
103
    }
104
105
    /**
106
     * @depends testCreateRole
107
     * @covers GET /user/roles/{roleId}
108
     */
109
    public function testLoadRole($roleHref)
110
    {
111
        $response = $this->sendHttpRequest(
112
            $this->createHttpRequest('GET', $roleHref)
113
        );
114
115
        self::assertHttpResponseCodeEquals($response, 200);
116
    }
117
118
    /**
119
     * @depends testCreateRole
120
     * @covers POST /user/roles/{roleId}
121
     *
122
     * @return string The created role draft href
123
     */
124 View Code Duplication
    public function testCreateRoleDraft($roleHref)
125
    {
126
        $xml = <<< XML
127
<?xml version="1.0" encoding="UTF-8"?>
128
<RoleInput>
129
  <identifier>testCreateRoleDraft</identifier>
130
  <mainLanguageCode>eng-GB</mainLanguageCode>
131
  <names>
132
    <value languageCode="eng-GB">testCreateRoleDraft</value>
133
  </names>
134
  <descriptions>
135
    <value languageCode="eng-GB">testCreateRoleDraft description</value>
136
  </descriptions>
137
</RoleInput>
138
XML;
139
        $request = $this->createHttpRequest(
140
            'POST',
141
            $roleHref,
142
            'RoleInput+xml',
143
            'RoleDraft+json'
144
        );
145
        $request->setContent($xml);
146
        $response = $this->sendHttpRequest($request);
147
148
        self::assertHttpResponseCodeEquals($response, 201);
149
        self::assertHttpResponseHasHeader($response, 'Location');
150
151
        $href = $response->getHeader('Location');
152
        $this->addCreatedElement($href);
153
154
        return $href . '/draft';
155
    }
156
157
    /**
158
     * @depends testCreateRoleDraft
159
     * @covers GET /user/roles/{roleId}/draft
160
     */
161
    public function testLoadRoleDraft($roleDraftHref)
162
    {
163
        $response = $this->sendHttpRequest(
164
            $this->createHttpRequest('GET', $roleDraftHref)
165
        );
166
167
        self::assertHttpResponseCodeEquals($response, 200);
168
    }
169
170
    /**
171
     * @depends testCreateRole
172
     * @covers PATCH /user/roles/{roleId}
173
     */
174
    public function testUpdateRole($roleHref)
175
    {
176
        $xml = <<< XML
177
<?xml version="1.0" encoding="UTF-8"?>
178
<RoleInput>
179
  <identifier>testUpdateRole</identifier>
180
  <mainLanguageCode>eng-GB</mainLanguageCode>
181
  <names>
182
    <value languageCode="eng-GB">testUpdateRole</value>
183
  </names>
184
  <descriptions>
185
    <value languageCode="eng-GB">testUpdateRole description</value>
186
  </descriptions>
187
</RoleInput>
188
XML;
189
190
        $request = $this->createHttpRequest('PATCH', $roleHref, 'RoleInput+xml', 'Role+json');
191
        $request->setContent($xml);
192
        $response = $this->sendHttpRequest($request);
193
194
        // @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
195
        self::assertHttpResponseCodeEquals($response, 200);
196
    }
197
198
    /**
199
     * @depends testCreateRoleDraft
200
     * @covers PATCH /user/roles/{roleId}/draft
201
     */
202
    public function testUpdateRoleDraft($roleDraftHref)
203
    {
204
        $xml = <<< XML
205
<?xml version="1.0" encoding="UTF-8"?>
206
<RoleInput>
207
  <identifier>testUpdateRoleDraft</identifier>
208
  <mainLanguageCode>eng-GB</mainLanguageCode>
209
  <names>
210
    <value languageCode="eng-GB">testUpdateRoleDraft</value>
211
  </names>
212
  <descriptions>
213
    <value languageCode="eng-GB">testUpdateRoleDraft description</value>
214
  </descriptions>
215
</RoleInput>
216
XML;
217
218
        $request = $this->createHttpRequest('PATCH', $roleDraftHref, 'RoleInput+xml', 'RoleDraft+json');
219
        $request->setContent($xml);
220
        $response = $this->sendHttpRequest($request);
221
222
        self::assertHttpResponseCodeEquals($response, 200);
223
    }
224
225
    /**
226
     * @covers POST /user/roles/{roleId}/policies
227
     * @depends testCreateRole
228
     *
229
     * @return string The created policy href
230
     */
231 View Code Duplication
    public function testAddPolicy($roleHref)
232
    {
233
        // @todo Error in Resource URL in spec @ https://github.com/ezsystems/ezpublish-kernel/blob/master/doc/specifications/rest/REST-API-V2.rst#151213create-policy
234
        $xml = <<< XML
235
<?xml version="1.0" encoding="UTF-8"?>
236
<PolicyCreate>
237
  <module>content</module>
238
  <function>create</function>
239
  <limitations>
240
    <limitation identifier="Class">
241
      <values>
242
        <ref href="2"/>
243
      </values>
244
    </limitation>
245
  </limitations>
246
</PolicyCreate>
247
XML;
248
        $request = $this->createHttpRequest('POST', "$roleHref/policies", 'PolicyCreate+xml', 'Policy+json');
249
        $request->setContent($xml);
250
251
        $response = $this->sendHttpRequest($request);
252
        self::assertHttpResponseCodeEquals($response, 201);
253
        self::assertHttpResponseHasHeader($response, 'Location');
254
255
        $href = $response->getHeader('Location');
256
        $this->addCreatedElement($href);
257
258
        return $href;
259
    }
260
261
    /**
262
     * @covers POST /user/roles/{roleId}/policies
263
     * @depends testCreateRoleDraft
264
     *
265
     * @return string The created policy href
266
     */
267 View Code Duplication
    public function testAddPolicyByRoleDraft($roleDraftHref)
268
    {
269
        $xml = <<< XML
270
<?xml version="1.0" encoding="UTF-8"?>
271
<PolicyCreate>
272
  <module>content</module>
273
  <function>create</function>
274
  <limitations>
275
    <limitation identifier="Class">
276
      <values>
277
        <ref href="1"/>
278
      </values>
279
    </limitation>
280
  </limitations>
281
</PolicyCreate>
282
XML;
283
        $request = $this->createHttpRequest(
284
            'POST',
285
            $this->roleDraftHrefToRoleHref($roleDraftHref) . '/policies',
286
            'PolicyCreate+xml',
287
            'Policy+json'
288
        );
289
        $request->setContent($xml);
290
291
        $response = $this->sendHttpRequest($request);
292
        self::assertHttpResponseCodeEquals($response, 201);
293
        self::assertHttpResponseHasHeader($response, 'Location');
294
295
        $href = $response->getHeader('Location');
296
        $this->addCreatedElement($href);
297
298
        return $href;
299
    }
300
301
    /**
302
     * @covers GET /user/roles/{roleId}/policies/{policyId}
303
     * @depends testAddPolicy
304
     */
305
    public function testLoadPolicy($policyHref)
306
    {
307
        $response = $this->sendHttpRequest(
308
            $this->createHttpRequest('GET', $policyHref)
309
        );
310
311
        self::assertHttpResponseCodeEquals($response, 200);
312
    }
313
314
    /**
315
     * @covers GET /user/roles/{roleId}/policies
316
     * @depends testCreateRole
317
     */
318
    public function testLoadPolicies($roleHref)
319
    {
320
        $response = $this->sendHttpRequest(
321
            $this->createHttpRequest('GET', "$roleHref/policies")
322
        );
323
324
        self::assertHttpResponseCodeEquals($response, 200);
325
    }
326
327
    /**
328
     * @covers PATCH /user/roles/{roleId}/policies/{policyId}
329
     * @depends testAddPolicy
330
     */
331
    public function testUpdatePolicy($policyHref)
332
    {
333
        $xml = <<< XML
334
<?xml version="1.0" encoding="UTF-8"?>
335
<PolicyUpdate>
336
  <limitations>
337
    <limitation identifier="Class">
338
      <values>
339
        <ref href="1"/>
340
      </values>
341
    </limitation>
342
  </limitations>
343
</PolicyUpdate>
344
XML;
345
346
        $request = $this->createHttpRequest('PATCH', $policyHref, 'PolicyUpdate+xml', 'Policy+json');
347
        $request->setContent($xml);
348
        $response = $this->sendHttpRequest($request);
349
350
        self::assertHttpResponseCodeEquals($response, 200);
351
    }
352
353
    /**
354
     * @covers PATCH /user/roles/{roleId}/policies/{policyId}
355
     * @depends testAddPolicyByRoleDraft
356
     */
357
    public function testUpdatePolicyByRoleDraft($policyHref)
358
    {
359
        $xml = <<< XML
360
<?xml version="1.0" encoding="UTF-8"?>
361
<PolicyUpdate>
362
  <limitations>
363
    <limitation identifier="Class">
364
      <values>
365
        <ref href="1"/>
366
      </values>
367
    </limitation>
368
  </limitations>
369
</PolicyUpdate>
370
XML;
371
372
        $request = $this->createHttpRequest('PATCH', $policyHref, 'PolicyUpdate+xml', 'Policy+json');
373
        $request->setContent($xml);
374
        $response = $this->sendHttpRequest($request);
375
376
        self::assertHttpResponseCodeEquals($response, 200);
377
    }
378
379
    /**
380
     * @depends testCreateRole
381
     * @covers POST /user/users/{userId}/roles
382
     *
383
     * @return string assigned role href
384
     *
385
     * @todo stop using the anonymous user, this is dangerous...
386
     */
387 View Code Duplication
    public function testAssignRoleToUser($roleHref)
388
    {
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
</RoleAssignInput>
394
XML;
395
396
        $request = $this->createHttpRequest(
397
            'POST',
398
            '/api/ezp/v2/user/users/10/roles',
399
            'RoleAssignInput+xml',
400
            'RoleAssignmentList+json'
401
        );
402
        $request->setContent($xml);
403
404
        $response = $this->sendHttpRequest($request);
405
        $roleAssignmentArray = json_decode($response->getContent(), true);
406
407
        self::assertHttpResponseCodeEquals($response, 200);
408
409
        return $roleAssignmentArray['RoleAssignmentList']['RoleAssignment'][0]['_href'];
410
    }
411
412
    /**
413
     * @covers       POST /user/users/{userId}/roles
414
     *
415
     * @param string $roleHref
0 ignored issues
show
Bug introduced by
There is no parameter named $roleHref. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
416
     * @param array $limitation
417
     *
418
     * @return string assigned role href
419
     * @dataProvider provideLimitations
420
     */
421
    public function testAssignRoleToUserWithLimitation(array $limitation)
422
    {
423
        $roleHref = $this->createAndPublishRole(__METHOD__ . '_' . $limitation['identifier']);
424
425
        $xml = <<< XML
426
<?xml version="1.0" encoding="UTF-8"?>
427
<RoleAssignInput>
428
  <Role href="{$roleHref}" media-type="application/vnd.ez.api.RoleAssignInput+xml"/>
429
  <limitation identifier="{$limitation['identifier']}">
430
      <values>
431
          <ref href="{$limitation['href']}" media-type="application/vnd.ez.api.{$limitation['identifier']}+xml" />
432
      </values>
433
  </limitation>
434
</RoleAssignInput>
435
XML;
436
437
        $request = $this->createHttpRequest(
438
            'POST',
439
            '/api/ezp/v2/user/users/10/roles',
440
            'RoleAssignInput+xml',
441
            'RoleAssignmentList+json'
442
        );
443
        $request->setContent($xml);
444
445
        $response = $this->sendHttpRequest($request);
446
        $roleAssignmentArray = json_decode($response->getContent(), true);
447
448
        self::assertHttpResponseCodeEquals($response, 200);
449
450
        return $roleAssignmentArray['RoleAssignmentList']['RoleAssignment'][0]['_href'];
451
    }
452
453
    public function provideLimitations()
454
    {
455
        return [
456
            [['identifier' => 'Section', 'href' => '/api/ezp/v2/content/sections/1']],
457
            [['identifier' => 'Subtree', 'href' => '/api/ezp/v2/content/locations/1/2/']],
458
        ];
459
    }
460
461
    /**
462
     * @covers GET /user/users/{userId}/roles/{roleId}
463
     * @depends testAssignRoleToUser
464
     */
465
    public function testLoadRoleAssignmentForUser($roleAssignmentHref)
466
    {
467
        $response = $this->sendHttpRequest(
468
            $this->createHttpRequest('GET', $roleAssignmentHref)
469
        );
470
471
        self::assertHttpResponseCodeEquals($response, 200);
472
    }
473
474
    /**
475
     * @covers DELETE /user/users/{userId}/roles/{roleId}
476
     * @depends testAssignRoleToUser
477
     */
478
    public function testUnassignRoleFromUser($roleAssignmentHref)
479
    {
480
        $response = $this->sendHttpRequest(
481
            $this->createHttpRequest('DELETE', $roleAssignmentHref)
482
        );
483
484
        self::assertHttpResponseCodeEquals($response, 200);
485
    }
486
487
    /**
488
     * @depends testCreateRole
489
     * @covers POST /user/groups/{groupId}/roles
490
     *
491
     * @return string role assignment href
492
     */
493 View Code Duplication
    public function testAssignRoleToUserGroup($roleHref)
0 ignored issues
show
Unused Code introduced by
The parameter $roleHref is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
494
    {
495
        self::markTestSkipped("Breaks roles, thus preventing login");
496
        return;
497
498
        $xml = <<< XML
0 ignored issues
show
Unused Code introduced by
$xml = "<?xml version=\"...>\n</RoleAssignInput>"; does not seem to be reachable.

This check looks for unreachable code. It uses sophisticated control flow analysis techniques to find statements which will never be executed.

Unreachable code is most often the result of return, die or exit statements that have been added for debug purposes.

function fx() {
    try {
        doSomething();
        return true;
    }
    catch (\Exception $e) {
        return false;
    }

    return false;
}

In the above example, the last return false will never be executed, because a return statement has already been met in every possible execution path.

Loading history...
499
<?xml version="1.0" encoding="UTF-8"?>
500
<RoleAssignInput>
501
  <Role href="{$roleHref}" media-type="application/vnd.ez.api.RoleAssignInput+xml"/>
502
  <limitation identifier="Section">
503
      <values>
504
          <ref href="/api/ezp/v2/content/sections/1" media-type="application/vnd.ez.api.Section+xml" />
505
      </values>
506
  </limitation>
507
</RoleAssignInput>
508
XML;
509
510
        $request = $this->createHttpRequest(
511
            'POST',
512
            '/api/ezp/v2/user/groups/1/5/44/roles',
513
            'RoleAssignInput+xml',
514
            'RoleAssignmentList+json'
515
        );
516
        $request->setContent($xml);
517
518
        $response = $this->sendHttpRequest($request);
519
        $roleAssignmentArray = json_decode($response->getContent(), true);
520
521
        self::assertHttpResponseCodeEquals($response, 200);
522
523
        return $roleAssignmentArray['RoleAssignmentList']['RoleAssignment'][0]['_href'];
524
    }
525
526
    /**
527
     * @covers GET /user/groups/{groupId}/roles/{roleId}
528
     * @depends testAssignRoleToUserGroup
529
     */
530 View Code Duplication
    public function testLoadRoleAssignmentForUserGroup($roleAssignmentHref)
531
    {
532
        $response = $this->sendHttpRequest(
533
            $request = $this->createHttpRequest('GET', $roleAssignmentHref)
534
        );
535
536
        self::markTestIncomplete('Requires that visitors are fixed (group url generation)');
537
        self::assertHttpResponseCodeEquals($response, 200);
538
    }
539
540
    /**
541
     * @covers DELETE /user/groups/{groupId}/roles/{roleId}
542
     * @depends testAssignRoleToUserGroup
543
     */
544 View Code Duplication
    public function testUnassignRoleFromUserGroup($roleAssignmentHref)
545
    {
546
        $response = $this->sendHttpRequest(
547
            $request = $this->createHttpRequest('DELETE', $roleAssignmentHref)
548
        );
549
550
        self::markTestIncomplete('Requires that visitors are fixed (group url generation)');
551
        self::assertHttpResponseCodeEquals($response, 200);
552
    }
553
554
    /**
555
     * @covers GET /user/users/{userId}/roles
556
     */
557
    public function testLoadRoleAssignmentsForUser()
558
    {
559
        $response = $this->sendHttpRequest(
560
            $request = $this->createHttpRequest('GET', '/api/ezp/v2/user/users/10/roles')
561
        );
562
563
        self::assertHttpResponseCodeEquals($response, 200);
564
    }
565
566
    /**
567
     * @covers GET /user/groups/{groupPath}/roles
568
     */
569
    public function testLoadRoleAssignmentsForUserGroup()
570
    {
571
        $response = $this->sendHttpRequest(
572
            $this->createHttpRequest('GET', '/api/ezp/v2/user/groups/1/5/44/roles')
573
        );
574
575
        self::assertHttpResponseCodeEquals($response, 200);
576
    }
577
578
    /**
579
     * @covers GET /user/policies?userId={userId}
580
     */
581
    public function testListPoliciesForUser()
582
    {
583
        $response = $this->sendHttpRequest(
584
            $this->createHttpRequest('GET', '/api/ezp/v2/user/policies?userId=10')
585
        );
586
587
        self::assertHttpResponseCodeEquals($response, 200);
588
    }
589
590
    /**
591
     * @covers DELETE /user/roles/{roleId}/policies/{policyId}
592
     * @depends testAddPolicy
593
     */
594
    public function testDeletePolicy($policyHref)
595
    {
596
        $response = $this->sendHttpRequest(
597
            $this->createHttpRequest('DELETE', $policyHref)
598
        );
599
600
        self::assertHttpResponseCodeEquals($response, 204);
601
    }
602
603
    /**
604
     * @covers DELETE /user/roles/{roleId}/policies/{policyId}
605
     * @depends testAddPolicyByRoleDraft
606
     */
607
    public function testRemovePolicyByRoleDraft($policyHref)
608
    {
609
        $response = $this->sendHttpRequest(
610
            $this->createHttpRequest('DELETE', $policyHref)
611
        );
612
613
        self::assertHttpResponseCodeEquals($response, 204);
614
    }
615
616
    /**
617
     * @covers DELETE /user/roles/{roleId}/policies
618
     * @depends testCreateRole
619
     */
620
    public function testDeletePolicies($roleHref)
621
    {
622
        $response = $this->sendHttpRequest(
623
            $this->createHttpRequest('DELETE', "$roleHref/policies")
624
        );
625
626
        self::assertHttpResponseCodeEquals($response, 204);
627
    }
628
629
    /**
630
     * @covers DELETE /user/roles/{roleId}
631
     * @depends testCreateRole
632
     */
633
    public function testDeleteRole($roleHref)
634
    {
635
        $response = $this->sendHttpRequest(
636
            $this->createHttpRequest('DELETE', $roleHref)
637
        );
638
639
        self::assertHttpResponseCodeEquals($response, 204);
640
    }
641
642
    /**
643
     * @covers PUBLISH /user/roles/{roleId}/draft
644
     * @depends testCreateRoleDraft
645
     */
646 View Code Duplication
    public function testPublishRoleDraft($roleDraftHref)
647
    {
648
        $response = $this->sendHttpRequest(
649
            $this->createHttpRequest('PUBLISH', $roleDraftHref)
650
        );
651
652
        self::assertHttpResponseCodeEquals($response, 204);
653
        self::assertHttpResponseHasHeader(
654
            $response,
655
            'Location',
656
            '/api/ezp/v2/user/roles/' . preg_replace('/.*roles\/(\d+).*/', '$1', $roleDraftHref)
657
        );
658
    }
659
660
    /**
661
     * @covers DELETE /user/roles/{roleId}/draft
662
     * @depends testCreateRoleDraft
663
     */
664
    public function testDeleteRoleDraft($roleDraftHref)
665
    {
666
        // we need to create a role draft first since we published the previous one in testPublishRoleDraft
667
        $roleHref = $this->testCreateRoleDraft($this->roleDraftHrefToRoleHref($roleDraftHref));
668
669
        $response = $this->sendHttpRequest(
670
            $this->createHttpRequest('DELETE', $roleHref)
671
        );
672
673
        self::assertHttpResponseCodeEquals($response, 204);
674
    }
675
676
    /**
677
     * Helper method for changing a roledraft href to a role href.
678
     *
679
     * @param string $roleDraftHref Role draft href
680
     *
681
     * @return string Role href
682
     */
683
    private function roleDraftHrefToRoleHref($roleDraftHref)
684
    {
685
        return str_replace('/draft', '', $roleDraftHref);
686
    }
687
688
    /**
689
     * Creates and publishes a role with $identifier.
690
     *
691
     * @param string $identifier
692
     *
693
     * @return string The href of the published role
694
     */
695 View Code Duplication
    private function createAndPublishRole($identifier)
696
    {
697
        $xml = <<< XML
698
<?xml version="1.0" encoding="UTF-8"?>
699
<RoleInput>
700
  <identifier>$identifier</identifier>
701
  <mainLanguageCode>eng-GB</mainLanguageCode>
702
  <names>
703
    <value languageCode="eng-GB">$identifier</value>
704
  </names>
705
  <descriptions>
706
    <value languageCode="eng-GB">$identifier description</value>
707
  </descriptions>
708
</RoleInput>
709
XML;
710
        $request = $this->createHttpRequest(
711
            'POST',
712
            '/api/ezp/v2/user/roles',
713
            'RoleInput+xml',
714
            'RoleDraft+json'
715
        );
716
        $request->setContent($xml);
717
        $response = $this->sendHttpRequest($request);
718
719
        self::assertHttpResponseCodeEquals($response, 201);
720
        self::assertHttpResponseHasHeader($response, 'Location');
721
722
        return $response->getHeader('Location');
723
    }
724
}
725