Completed
Push — EZP-31049-siteaccess-api ( 288ffc...d2eff1 )
by
unknown
14:02
created

ChainSiteAccessProviderTest   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 120
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Importance

Changes 0
Metric Value
dl 0
loc 120
rs 10
c 0
b 0
f 0
wmc 9
lcom 1
cbo 5

8 Methods

Rating   Name   Duplication   Size   Complexity  
A testGetExistingSiteAccess() 0 15 1
A testGetUndefinedSiteAccess() 0 9 1
A getChainSiteAccessProvider() 0 4 1
A setUp() 0 14 1
A testIsDefinedForExistingSiteAccess() 0 6 1
A testIsDefinedForUndefinedSiteAccess() 0 6 1
A testGetSiteAccesses() 0 26 2
A createSiteAcccess() 0 17 1
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\SiteAccess\Test\Provider;
10
11
use eZ\Publish\Core\Base\Exceptions\NotFoundException;
12
use eZ\Publish\Core\MVC\Symfony\SiteAccess;
13
use eZ\Publish\Core\MVC\Symfony\SiteAccessGroup;
14
use PHPUnit\Framework\TestCase;
15
use eZ\Publish\Core\MVC\Symfony\SiteAccess\Provider\ChainSiteAccessProvider;
16
use eZ\Publish\Core\MVC\Symfony\SiteAccess\Provider\StaticSiteAccessProvider;
17
use function array_map;
18
19
final class ChainSiteAccessProviderTest extends TestCase
20
{
21
    private const EXISTING_SA_NAME = 'existing_sa';
22
    private const UNDEFINED_SA_NAME = 'undefined_sa';
23
    private const SA_GROUP = 'group';
24
25
    /** @var \eZ\Publish\Core\MVC\Symfony\SiteAccess\SiteAccessProviderInterface[] */
26
    private $providers;
27
28
    /** @var array */
29
    private $groupsBySiteAccess;
30
31
    protected function setUp(): void
32
    {
33
        parent::setUp();
34
35
        $this->groupsBySiteAccess = [
36
            self::EXISTING_SA_NAME => [self::SA_GROUP],
37
            'first_sa' => [self::SA_GROUP],
38
            'second_sa' => [self::SA_GROUP],
39
        ];
40
        $this->providers = [
41
            new StaticSiteAccessProvider([self::EXISTING_SA_NAME, 'first_sa'], $this->groupsBySiteAccess),
42
            new StaticSiteAccessProvider(['second_sa'], $this->groupsBySiteAccess),
43
        ];
44
    }
45
46
    public function testIsDefinedForExistingSiteAccess(): void
47
    {
48
        $chainSiteAccessProvider = $this->getChainSiteAccessProvider();
49
50
        $this->assertTrue($chainSiteAccessProvider->isDefined(self::EXISTING_SA_NAME));
51
    }
52
53
    public function testIsDefinedForUndefinedSiteAccess(): void
54
    {
55
        $chainSiteAccessProvider = $this->getChainSiteAccessProvider();
56
57
        $this->assertFalse($chainSiteAccessProvider->isDefined(self::UNDEFINED_SA_NAME));
58
    }
59
60
    public function testGetSiteAccesses(): void
61
    {
62
        $chainSiteAccessProvider = $this->getChainSiteAccessProvider();
63
        $siteAccesses = iterator_to_array($chainSiteAccessProvider->getSiteAccesses());
64
65
        $this->assertCount(3, $siteAccesses);
66
67
        $expectedSiteAccessNames = [self::EXISTING_SA_NAME, 'first_sa', 'second_sa'];
68
69
        foreach ($expectedSiteAccessNames as $key => $expectedSiteAccessName) {
70
            $expectedSiteAccess = $this->createSiteAcccess(
71
                $expectedSiteAccessName, [self::SA_GROUP]
72
            );
73
74
            $this->assertEquals($expectedSiteAccess, $siteAccesses[$key]);
75
        }
76
77
        $undefinedSiteAccess = $this->createSiteAcccess(
78
            self::UNDEFINED_SA_NAME, [self::SA_GROUP]
79
        );
80
81
        $this->assertNotContains(
82
            $undefinedSiteAccess,
83
            $siteAccesses
84
        );
85
    }
86
87
    public function testGetExistingSiteAccess(): void
88
    {
89
        $chainSiteAccessProvider = $this->getChainSiteAccessProvider();
90
        $expectedSiteAccess = new SiteAccess(
91
            self::EXISTING_SA_NAME,
92
            SiteAccess::DEFAULT_MATCHING_TYPE,
93
            null,
94
            StaticSiteAccessProvider::class
95
        );
96
        $expectedSiteAccess->groups = [self::SA_GROUP];
0 ignored issues
show
Documentation Bug introduced by
It seems like array(self::SA_GROUP) of type array<integer,string,{"0":"string"}> is incompatible with the declared type array<integer,object<eZ\...mfony\SiteAccessGroup>> of property $groups.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
97
        $this->assertEquals(
98
            $expectedSiteAccess,
99
            $chainSiteAccessProvider->getSiteAccess(self::EXISTING_SA_NAME)
100
        );
101
    }
102
103
    public function testGetUndefinedSiteAccess(): void
104
    {
105
        $chainSiteAccessProvider = $this->getChainSiteAccessProvider();
106
107
        $this->expectException(NotFoundException::class);
108
        $this->expectExceptionMessage("Could not find 'Site Access' with identifier 'undefined_sa'");
109
110
        $chainSiteAccessProvider->getSiteAccess(self::UNDEFINED_SA_NAME);
111
    }
112
113
    private function getChainSiteAccessProvider(): ChainSiteAccessProvider
114
    {
115
        return new ChainSiteAccessProvider($this->providers);
116
    }
117
118
    /**
119
     * @param string[] $groupNames
120
     */
121
    private function createSiteAcccess(string $name, array $groupNames): SiteAccess
122
    {
123
        $undefinedSiteAccess = new SiteAccess(
124
            $name,
125
            SiteAccess::DEFAULT_MATCHING_TYPE,
126
            null,
127
            StaticSiteAccessProvider::class
128
        );
129
        $undefinedSiteAccess->groups = array_map(
130
            static function (string $groupName) {
131
                return new SiteAccessGroup($groupName);
132
            },
133
            $groupNames
134
        );
135
136
        return $undefinedSiteAccess;
137
    }
138
}
139