Completed
Push — ezp-24830_REST_for_role_drafts ( 7038df...e2f179 )
by
unknown
26:43
created

RoleTest::testDeletePolicy()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 4

Duplication

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