Completed
Push — EZP-31044-site-access-provider ( 8220ce...d98e47 )
by
unknown
15:28
created

RouterURIElementTest::testAnalyseLink()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8

Duplication

Lines 8
Ratio 100 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 2
dl 8
loc 8
rs 10
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
namespace eZ\Publish\Core\MVC\Symfony\SiteAccess\Tests;
8
9
use eZ\Publish\Core\MVC\Symfony\SiteAccess;
10
use eZ\Publish\Core\MVC\Symfony\SiteAccess\Matcher\URIElement;
11
use eZ\Publish\Core\MVC\Symfony\SiteAccess\Router;
12
use eZ\Publish\Core\MVC\Symfony\SiteAccess\Matcher\URIElement as URIElementMatcher;
13
use eZ\Publish\Core\MVC\Symfony\Routing\SimplifiedRequest;
14
use Psr\Log\LoggerInterface;
15
16
class RouterURIElementTest extends RouterBaseTest
17
{
18 View Code Duplication
    public function matchProvider(): array
19
    {
20
        return [
21
            [SimplifiedRequest::fromUrl('http://example.com'), 'default_sa'],
22
            [SimplifiedRequest::fromUrl('https://example.com'), 'default_sa'],
23
            [SimplifiedRequest::fromUrl('http://example.com/'), 'default_sa'],
24
            [SimplifiedRequest::fromUrl('https://example.com/'), 'default_sa'],
25
            [SimplifiedRequest::fromUrl('http://example.com//'), 'default_sa'],
26
            [SimplifiedRequest::fromUrl('https://example.com//'), 'default_sa'],
27
            [SimplifiedRequest::fromUrl('http://example.com:8080/'), 'default_sa'],
28
            [SimplifiedRequest::fromUrl('http://example.com/first_siteaccess/'), 'first_siteaccess'],
29
            [SimplifiedRequest::fromUrl('http://example.com/?first_siteaccess'), 'default_sa'],
30
            [SimplifiedRequest::fromUrl('http://example.com/?first_sa'), 'default_sa'],
31
            [SimplifiedRequest::fromUrl('http://example.com/first_salt'), 'first_salt'],
32
            [SimplifiedRequest::fromUrl('http://example.com/first_sa.foo'), 'first_sa.foo'],
33
            [SimplifiedRequest::fromUrl('http://example.com/test'), 'test'],
34
            [SimplifiedRequest::fromUrl('http://example.com/test/foo/'), 'test'],
35
            [SimplifiedRequest::fromUrl('http://example.com/test/foo/bar/'), 'test'],
36
            [SimplifiedRequest::fromUrl('http://example.com/test/foo/bar/first_sa'), 'test'],
37
            [SimplifiedRequest::fromUrl('http://example.com/default_sa'), 'default_sa'],
38
39
            [SimplifiedRequest::fromUrl('http://example.com/first_sa'), 'first_sa'],
40
            [SimplifiedRequest::fromUrl('http://example.com/first_sa/'), 'first_sa'],
41
            // Double slashes shouldn't be considered as one
42
            [SimplifiedRequest::fromUrl('http://example.com//first_sa//'), 'default_sa'],
43
            [SimplifiedRequest::fromUrl('http://example.com///first_sa///test'), 'default_sa'],
44
            [SimplifiedRequest::fromUrl('http://example.com//first_sa//foo/bar'), 'default_sa'],
45
            [SimplifiedRequest::fromUrl('http://example.com/first_sa/foo'), 'first_sa'],
46
            [SimplifiedRequest::fromUrl('http://example.com:82/first_sa/'), 'first_sa'],
47
            [SimplifiedRequest::fromUrl('http://third_siteaccess/first_sa/'), 'first_sa'],
48
            [SimplifiedRequest::fromUrl('http://first_sa/'), 'first_sa'],
49
            [SimplifiedRequest::fromUrl('https://first_sa/'), 'first_sa'],
50
            [SimplifiedRequest::fromUrl('http://first_sa:81/'), 'first_sa'],
51
            [SimplifiedRequest::fromUrl('http://first_siteaccess/'), 'first_sa'],
52
            [SimplifiedRequest::fromUrl('http://first_siteaccess:82/'), 'first_sa'],
53
            [SimplifiedRequest::fromUrl('http://first_siteaccess:83/'), 'first_sa'],
54
            [SimplifiedRequest::fromUrl('http://first_siteaccess/foo/'), 'foo'],
55
            [SimplifiedRequest::fromUrl('http://first_siteaccess:82/foo/'), 'foo'],
56
            [SimplifiedRequest::fromUrl('http://first_siteaccess:83/foo/'), 'foo'],
57
58
            [SimplifiedRequest::fromUrl('http://example.com/second_sa'), 'second_sa'],
59
            [SimplifiedRequest::fromUrl('http://example.com/second_sa/'), 'second_sa'],
60
            [SimplifiedRequest::fromUrl('http://example.com/second_sa?param1=foo'), 'second_sa'],
61
            [SimplifiedRequest::fromUrl('http://example.com/second_sa/foo/'), 'second_sa'],
62
            [SimplifiedRequest::fromUrl('http://example.com:82/second_sa/'), 'second_sa'],
63
            [SimplifiedRequest::fromUrl('http://example.com:83/second_sa/'), 'second_sa'],
64
            [SimplifiedRequest::fromUrl('http://first_siteaccess:82/second_sa/'), 'second_sa'],
65
            [SimplifiedRequest::fromUrl('http://first_siteaccess:83/second_sa/'), 'second_sa'],
66
        ];
67
    }
68
69
    public function testGetName()
70
    {
71
        $matcher = new URIElementMatcher([]);
72
        $this->assertSame('uri:element', $matcher->getName());
73
    }
74
75
    /**
76
     * @param string $uri
77
     * @param string $expectedFixedUpURI
78
     *
79
     * @dataProvider analyseProvider
80
     */
81 View Code Duplication
    public function testAnalyseURI($uri, $expectedFixedUpURI)
82
    {
83
        $matcher = new URIElementMatcher([1]);
84
        $matcher->setRequest(
85
            new SimplifiedRequest(['pathinfo' => $uri])
86
        );
87
        $this->assertSame($expectedFixedUpURI, $matcher->analyseURI($uri));
88
    }
89
90
    /**
91
     * @param string $fullUri
92
     * @param string $linkUri
93
     *
94
     * @dataProvider analyseProvider
95
     */
96 View Code Duplication
    public function testAnalyseLink($fullUri, $linkUri)
97
    {
98
        $matcher = new URIElementMatcher([1]);
99
        $matcher->setRequest(
100
            new SimplifiedRequest(['pathinfo' => $fullUri])
101
        );
102
        $this->assertSame($fullUri, $matcher->analyseLink($linkUri));
103
    }
104
105
    public function analyseProvider()
106
    {
107
        return [
108
            ['/my_siteaccess/foo/bar', '/foo/bar'],
109
            ['/vive/le/sucre', '/le/sucre'],
110
        ];
111
    }
112
113
    /**
114
     * @dataProvider reverseMatchProvider
115
     */
116
    public function testReverseMatch($siteAccessName, $originalPathinfo)
117
    {
118
        $matcher = new URIElementMatcher([1]);
119
        $matcher->setRequest(new SimplifiedRequest(['pathinfo' => $originalPathinfo]));
120
        $result = $matcher->reverseMatch($siteAccessName);
121
        $this->assertInstanceOf(URIElement::class, $result);
122
        $this->assertSame("/{$siteAccessName}{$originalPathinfo}", $result->getRequest()->pathinfo);
123
        $this->assertSame("/$siteAccessName/some/linked/uri", $result->analyseLink('/some/linked/uri'));
124
        $this->assertSame('/foo/bar/baz', $result->analyseURI("/$siteAccessName/foo/bar/baz"));
125
    }
126
127
    public function reverseMatchProvider()
128
    {
129
        return [
130
            ['something', '/foo/bar'],
131
            ['something', '/'],
132
            ['some_thing', '/foo/bar'],
133
            ['another_siteaccess', '/foo/bar'],
134
            ['another_siteaccess_again_dont_tell_me', '/foo/bar'],
135
        ];
136
    }
137
138 View Code Duplication
    public function testSerialize()
139
    {
140
        $matcher = new URIElementMatcher([1]);
141
        $matcher->setRequest(new SimplifiedRequest(['pathinfo' => '/foo/bar']));
142
        $sa = new SiteAccess('test', 'test', $matcher);
143
        $serializedSA1 = serialize($sa);
144
145
        $matcher->setRequest(new SimplifiedRequest(['pathinfo' => '/foo/bar/baz']));
146
        $serializedSA2 = serialize($sa);
147
148
        $this->assertSame($serializedSA1, $serializedSA2);
149
    }
150
151 View Code Duplication
    protected function createRouter(): Router
152
    {
153
        return new Router(
154
            $this->matcherBuilder,
155
            $this->createMock(LoggerInterface::class),
156
            'default_sa',
157
            [
158
                'URIElement' => [
159
                    'value' => 1,
160
                ],
161
                'Map\\URI' => [
162
                    'first_sa' => 'first_sa',
163
                    'second_sa' => 'second_sa',
164
                ],
165
                'Map\\Host' => [
166
                    'first_sa' => 'first_sa',
167
                    'first_siteaccess' => 'first_sa',
168
                ],
169
            ],
170
            $this->siteAccessProvider
171
        );
172
    }
173
174
    /**
175
     * @return \eZ\Publish\Core\MVC\Symfony\SiteAccess\Tests\SiteAccessSetting[]
176
     */
177
    public function getSiteAccessProviderSettings(): array
178
    {
179
        return [
180
            new SiteAccessSetting('first_sa', true),
181
            new SiteAccessSetting('second_sa', true),
182
            new SiteAccessSetting('first_siteaccess', true),
183
            new SiteAccessSetting('first_salt', true),
184
            new SiteAccessSetting('first_sa.foo', true),
185
            new SiteAccessSetting('test', true),
186
            new SiteAccessSetting('foo', true),
187
            new SiteAccessSetting('default_sa', true),
188
        ];
189
    }
190
}
191