Completed
Push — EZP-31320 ( e9d37e...61948a )
by
unknown
14:43
created

SiteAccessServiceTest::testGetCurrentSiteAccessesRelation()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 12

Duplication

Lines 12
Ratio 100 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 0
dl 12
loc 12
rs 9.8666
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\Publish\Core\MVC\Symfony\Routing\Tests;
10
11
use ArrayIterator;
12
use eZ\Publish\API\Repository\Exceptions\NotFoundException;
13
use eZ\Publish\Core\MVC\ConfigResolverInterface;
14
use eZ\Publish\Core\MVC\Symfony\SiteAccess;
15
use eZ\Publish\Core\MVC\Symfony\SiteAccess\Provider\StaticSiteAccessProvider;
16
use eZ\Publish\Core\MVC\Symfony\SiteAccess\SiteAccessProviderInterface;
17
use eZ\Publish\Core\MVC\Symfony\SiteAccess\SiteAccessService;
18
use PHPUnit\Framework\TestCase;
19
20
class SiteAccessServiceTest extends TestCase
21
{
22
    private const EXISTING_SA_NAME = 'existing_sa';
23
    private const UNDEFINED_SA_NAME = 'undefined_sa';
24
    private const SA_GROUP = 'group';
25
26
    /** @var \eZ\Publish\Core\MVC\Symfony\SiteAccess\SiteAccessProviderInterface|\PHPUnit\Framework\MockObject\MockObject */
27
    private $provider;
28
29
    /** @var \eZ\Publish\Core\MVC\ConfigResolverInterface|\PHPUnit\Framework\MockObject\MockObject */
30
    private $configResolver;
31
32
    /** @var \eZ\Publish\Core\MVC\Symfony\SiteAccess */
33
    private $siteAccess;
34
35
    /** @var \ArrayIterator */
36
    private $availableSiteAccesses;
37
38
    /** @var array */
39
    private $configResolverParameters;
40
41
    protected function setUp(): void
42
    {
43
        parent::setUp();
44
        $this->provider = $this->createMock(SiteAccessProviderInterface::class);
45
        $this->configResolver = $this->createMock(ConfigResolverInterface::class);
46
        $this->siteAccess = new SiteAccess('current');
47
        $this->availableSiteAccesses = $this->getAvailableSitAccesses(['current', 'first_sa', 'second_sa', 'default']);
48
        $this->configResolverParameters = $this->getConfigResolverParameters();
49
    }
50
51
    public function testGetCurrentSiteAccess(): void
52
    {
53
        $service = new SiteAccessService(
54
            $this->createMock(SiteAccessProviderInterface::class),
55
            $this->createMock(ConfigResolverInterface::class)
56
        );
57
58
        self::assertNull($service->getCurrent());
59
60
        $siteAccess = new SiteAccess('default');
61
        $service->setSiteAccess($siteAccess);
62
        self::assertSame($siteAccess, $service->getCurrent());
63
64
        $service->setSiteAccess(null);
65
        self::assertNull($service->getCurrent());
66
    }
67
68
    public function testGetSiteAccess(): void
69
    {
70
        $staticSiteAccessProvider = new StaticSiteAccessProvider(
71
            [self::EXISTING_SA_NAME],
72
            [self::EXISTING_SA_NAME => [self::SA_GROUP]],
73
        );
0 ignored issues
show
Bug introduced by
This code did not parse for me. Apparently, there is an error somewhere around this line:

Syntax error, unexpected ')'
Loading history...
74
        $service = new SiteAccessService(
75
            $staticSiteAccessProvider,
76
            $this->createMock(ConfigResolverInterface::class)
77
        );
78
79
        self::assertEquals(
80
            self::EXISTING_SA_NAME,
81
            $service->get(self::EXISTING_SA_NAME)->name
82
        );
83
    }
84
85
    public function testGetSiteAccessThrowsNotFoundException(): void
86
    {
87
        $staticSiteAccessProvider = new StaticSiteAccessProvider(
88
            [self::EXISTING_SA_NAME],
89
            [self::EXISTING_SA_NAME => [self::SA_GROUP]],
90
        );
91
        $service = new SiteAccessService(
92
            $staticSiteAccessProvider,
93
            $this->createMock(ConfigResolverInterface::class)
94
        );
95
96
        $this->expectException(NotFoundException::class);
97
        $service->get(self::UNDEFINED_SA_NAME);
98
    }
99
100
    public function testGetCurrentSiteAccessesRelation(): void
101
    {
102
        $this->configResolver
103
            ->method('getParameter')
104
            ->willReturnMap($this->configResolverParameters);
105
106
        $this->provider
107
            ->method('getSiteAccesses')
108
            ->willReturn($this->availableSiteAccesses);
109
110
        $this->assertSame(['current', 'first_sa'], $this->getSiteAccessService()->getSiteAccessesRelation());
111
    }
112
113
    public function testGetFirstSiteAccessesRelation(): void
114
    {
115
        $this->configResolver
116
            ->method('getParameter')
117
            ->willReturnMap($this->configResolverParameters);
118
119
        $this->provider
120
            ->method('getSiteAccesses')
121
            ->willReturn($this->availableSiteAccesses);
122
123
        $this->assertSame(
124
            ['current', 'first_sa'],
125
            $this->getSiteAccessService()->getSiteAccessesRelation(new SiteAccess('first_sa'))
126
        );
127
    }
128
129
    private function getSiteAccessService(): SiteAccessService
130
    {
131
        $siteAccessService = new SiteAccessService($this->provider, $this->configResolver);
132
        $siteAccessService->setSiteAccess($this->siteAccess);
133
134
        return $siteAccessService;
135
    }
136
137
    /**
138
     * @param string[] $siteAccessNames
139
     */
140
    private function getAvailableSitAccesses(array $siteAccessNames): ArrayIterator
141
    {
142
        $availableSitAccesses = [];
143
        foreach ($siteAccessNames as $siteAccessName) {
144
            $availableSitAccesses[] = new SiteAccess($siteAccessName);
145
        }
146
147
        return new ArrayIterator($availableSitAccesses);
148
    }
149
150
    private function getConfigResolverParameters(): array
151
    {
152
        return [
153
            ['repository', 'ezsettings', 'current', 'repository_1'],
154
            ['content.tree_root.location_id', 'ezsettings', 'current', 1],
155
            ['repository', 'ezsettings', 'first_sa', 'repository_1'],
156
            ['content.tree_root.location_id', 'ezsettings', 'first_sa', 1],
157
            ['repository', 'ezsettings', 'second_sa', 'repository_1'],
158
            ['content.tree_root.location_id', 'ezsettings', 'second_sa', 2],
159
            ['repository', 'ezsettings', 'default', ''],
160
            ['content.tree_root.location_id', 'ezsettings', 'default', 3],
161
        ];
162
    }
163
}
164