Completed
Push — ezp-24830_REST_for_role_drafts ( 27affb...ac0f60 )
by
unknown
121:19 queued 97:08
created

RoleTest::testCreateRoleDraft()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 18
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

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