Completed
Push — ezp-24830_REST_for_role_drafts ( ac0f60...ff5f81 )
by
unknown
27:12
created

RoleTest::testCreateRoleDraft()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 32
Code Lines 16

Duplication

Lines 32
Ratio 100 %

Importance

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