Completed
Push — ezp_30981_content_info_proxy ( a78a98...0757d2 )
by
unknown
15:21
created

testIsDefinedForUndefinedSiteAccess()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 0
dl 0
loc 6
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
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 PHPUnit\Framework\TestCase;
14
use eZ\Publish\Core\MVC\Symfony\SiteAccess\Provider\ChainSiteAccessProvider;
15
use eZ\Publish\Core\MVC\Symfony\SiteAccess\Provider\StaticSiteAccessProvider;
16
17
final class ChainSiteAccessProviderTest extends TestCase
18
{
19
    private const EXISTING_SA_NAME = 'existing_sa';
20
    private const UNDEFINED_SA_NAME = 'undefined_sa';
21
22
    /** @var \eZ\Publish\Core\MVC\Symfony\SiteAccess\SiteAccessProviderInterface[] */
23
    private $providers;
24
25
    protected function setUp(): void
26
    {
27
        parent::setUp();
28
29
        $this->providers = [
30
            new StaticSiteAccessProvider([self::EXISTING_SA_NAME, 'first_sa']),
31
            new StaticSiteAccessProvider(['second_sa']),
32
        ];
33
    }
34
35
    public function testIsDefinedForExistingSiteAccess(): void
36
    {
37
        $chainSiteAccessProvider = $this->getChainSiteAccessProvider();
38
39
        $this->assertTrue($chainSiteAccessProvider->isDefined(self::EXISTING_SA_NAME));
40
    }
41
42
    public function testIsDefinedForUndefinedSiteAccess(): void
43
    {
44
        $chainSiteAccessProvider = $this->getChainSiteAccessProvider();
45
46
        $this->assertFalse($chainSiteAccessProvider->isDefined(self::UNDEFINED_SA_NAME));
47
    }
48
49
    public function testGetSiteAccesses(): void
50
    {
51
        $chainSiteAccessProvider = $this->getChainSiteAccessProvider();
52
        $siteAccesses = iterator_to_array($chainSiteAccessProvider->getSiteAccesses());
53
54
        $this->assertCount(3, $siteAccesses);
55
56
        $expectedSiteAccessNames = [self::EXISTING_SA_NAME, 'first_sa', 'second_sa'];
57
58
        foreach ($expectedSiteAccessNames as $key => $expectedSiteAccessName) {
59
            $expectedSiteAccess = new SiteAccess(
60
                $expectedSiteAccessName,
61
                SiteAccess::DEFAULT_MATCHING_TYPE,
62
                null,
63
                StaticSiteAccessProvider::class
64
            );
65
            $this->assertEquals($expectedSiteAccess, $siteAccesses[$key]);
66
        }
67
68
        $this->assertNotContains(
69
            new SiteAccess(
70
                self::UNDEFINED_SA_NAME,
71
                SiteAccess::DEFAULT_MATCHING_TYPE,
72
                null,
73
                StaticSiteAccessProvider::class
74
            ),
75
            $siteAccesses
76
        );
77
    }
78
79
    public function testGetExistingSiteAccess(): void
80
    {
81
        $chainSiteAccessProvider = $this->getChainSiteAccessProvider();
82
        $this->assertEquals(
83
            new SiteAccess(
84
                self::EXISTING_SA_NAME,
85
                SiteAccess::DEFAULT_MATCHING_TYPE,
86
                null,
87
                StaticSiteAccessProvider::class
88
            ),
89
            $chainSiteAccessProvider->getSiteAccess(self::EXISTING_SA_NAME)
90
        );
91
    }
92
93
    public function testGetUndefinedSiteAccess(): void
94
    {
95
        $chainSiteAccessProvider = $this->getChainSiteAccessProvider();
96
97
        $this->expectException(NotFoundException::class);
98
        $this->expectExceptionMessage("Could not find 'Site Access' with identifier 'undefined_sa'");
99
100
        $chainSiteAccessProvider->getSiteAccess(self::UNDEFINED_SA_NAME);
101
    }
102
103
    private function getChainSiteAccessProvider(): ChainSiteAccessProvider
104
    {
105
        return new ChainSiteAccessProvider($this->providers);
106
    }
107
}
108