Completed
Push — master ( 68a7e9...8eea69 )
by Łukasz
18:46
created

HttpOptionsTest::testHttpOptions()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 15
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 9
nc 1
nop 2
dl 0
loc 15
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * @copyright Copyright (C) eZ Systems AS. All rights reserved.
5
 * @license For full copyright and license information view LICENSE file distributed with this source code.
6
 */
7
declare(strict_types=1);
8
9
namespace eZ\Bundle\EzPublishRestBundle\Tests\Functional;
10
11
/**
12
 * Test sending OPTIONS header for REST routes.
13
 */
14
class HttpOptionsTest extends TestCase
15
{
16
    /**
17
     * Covers OPTIONS on selected routes.
18
     *
19
     * @dataProvider providerForTestHttpOptions
20
     *
21
     * @param string $route
22
     * @param string[] $expectedMethods
23
     */
24
    public function testHttpOptions(string $route, array $expectedMethods): void
25
    {
26
        $restAPIPrefix = '/api/ezp/v2';
27
28
        $response = $this->sendHttpRequest(
29
            $this->createHttpRequest('OPTIONS', "{$restAPIPrefix}{$route}")
30
        );
31
32
        self::assertHttpResponseCodeEquals($response, 200);
33
        self::assertEquals(0, (int)($response->getHeader('Content-Length')));
34
35
        self::assertHttpResponseHasHeader($response, 'Allow');
36
        $actualMethods = explode(',', $response->getHeader('Allow'));
37
        self::assertEquals($expectedMethods, $actualMethods);
38
    }
39
40
    /**
41
     * Data provider for testHttpOptions.
42
     *
43
     * @see testHttpOptions
44
     *
45
     * @return array Data Provider sets
46
     */
47
    public function providerForTestHttpOptions(): array
48
    {
49
        return [
50
            ['/', ['GET']],
51
            ['/content/sections', ['GET', 'POST']],
52
            ['/content/sections/1', ['GET', 'PATCH', 'DELETE']],
53
            ['/content/objects', ['GET', 'POST']],
54
            ['/content/objects/1', ['PATCH', 'GET', 'DELETE', 'COPY']],
55
            ['/content/objects/1/translations/eng-GB', ['DELETE']],
56
            ['/content/objects/1/relations', ['GET']],
57
            ['/content/objects/1/versions', ['GET']],
58
            ['/content/objects/1/versions/1/relations', ['GET', 'POST']],
59
            ['/content/objects/1/versions/1/relations/1', ['GET', 'DELETE']],
60
            ['/content/objects/1/versions/1', ['GET', 'PATCH', 'DELETE', 'COPY', 'PUBLISH']],
61
            ['/content/objects/1/versions/1/translations/eng-GB', ['DELETE']],
62
            ['/content/objects/1/currentversion', ['GET', 'COPY']],
63
            ['/content/binary/images/1-2-3/variations/123', ['GET']],
64
            ['/content/views', ['POST']],
65
            ['/views', ['POST', 'GET']],
66
            ['/views/1', ['GET']],
67
            ['/views/1/results', ['GET']],
68
            ['/content/objectstategroups', ['GET', 'POST']],
69
            ['/content/objectstategroups/1', ['GET', 'PATCH', 'DELETE']],
70
            ['/content/objectstategroups/1/objectstates', ['GET', 'POST']],
71
            ['/content/objectstategroups/1/objectstates/1', ['GET', 'PATCH', 'DELETE']],
72
            ['/content/objects/1/objectstates', ['GET', 'PATCH']],
73
            ['/content/locations', ['GET']],
74
            ['/content/locations/1/2', ['GET', 'PATCH', 'DELETE', 'COPY', 'MOVE', 'SWAP']],
75
            ['/content/locations/1/2/children', ['GET']],
76
            ['/content/objects/1/locations', ['GET', 'POST']],
77
            ['/content/typegroups', ['GET', 'POST']],
78
            ['/content/typegroups/1', ['GET', 'PATCH', 'DELETE']],
79
            ['/content/typegroups/1/types', ['GET', 'POST']],
80
            ['/content/types', ['GET']],
81
            ['/content/types/1', ['COPY', 'GET', 'POST', 'DELETE']],
82
            ['/content/types/1/draft', ['DELETE', 'GET', 'PATCH', 'PUBLISH']],
83
            ['/content/types/1/fieldDefinitions', ['GET']],
84
            ['/content/types/1/fieldDefinitions/1', ['GET']],
85
            ['/content/types/1/draft/fieldDefinitions', ['GET', 'POST']],
86
            ['/content/types/1/draft/fieldDefinitions/1', ['GET', 'PATCH', 'DELETE']],
87
            ['/content/types/1/groups', ['GET', 'POST']],
88
            ['/content/types/1/groups/1', ['DELETE']],
89
            ['/content/trash', ['GET', 'DELETE']],
90
            ['/content/trash/1', ['GET', 'DELETE', 'MOVE']],
91
            ['/content/urlwildcards', ['GET', 'POST']],
92
            ['/content/urlwildcards/1', ['GET', 'DELETE']],
93
            ['/user/policies', ['GET']],
94
            ['/user/roles', ['GET', 'POST']],
95
            ['/user/roles/1', ['POST', 'GET', 'PATCH', 'DELETE']],
96
            ['/user/roles/1/draft', ['GET', 'PATCH', 'PUBLISH', 'DELETE']],
97
            ['/user/roles/1/policies', ['GET', 'POST', 'DELETE']],
98
            ['/user/roles/1/policies/328', ['GET', 'PATCH', 'DELETE']],
99
            ['/user/users', ['HEAD', 'GET']],
100
            ['/user/users/10', ['GET', 'PATCH', 'DELETE']],
101
            ['/user/users/10/groups', ['GET', 'POST']],
102
            ['/user/users/10/groups/4', ['DELETE']],
103
            ['/user/users/10/drafts', ['GET']],
104
            ['/user/users/10/roles', ['GET', 'POST']],
105
            ['/user/users/10/roles/1', ['GET', 'DELETE']],
106
            ['/user/groups', ['GET']],
107
            ['/user/groups/root', ['GET']],
108
            ['/user/groups/subgroups', ['POST']],
109
            ['/user/groups/4', ['GET', 'PATCH', 'DELETE', 'MOVE']],
110
            ['/user/groups/4/subgroups', ['GET', 'POST']],
111
            ['/user/groups/4/users', ['GET', 'POST']],
112
            ['/user/groups/4/roles', ['GET', 'POST']],
113
            ['/user/groups/13/roles/1', ['GET', 'DELETE']],
114
            ['/user/sessions', ['POST']],
115
            ['/user/sessions/sess_123', ['DELETE']],
116
            ['/user/sessions/sess_123/refresh', ['POST']],
117
            ['/content/urlaliases', ['GET', 'POST']],
118
            ['/content/locations/1/2/urlaliases', ['GET']],
119
            ['/content/urlaliases/12', ['GET', 'DELETE']],
120
            ['/services/countries', ['GET']],
121
        ];
122
    }
123
}
124