Completed
Push — master ( 3b7ffc...93bca7 )
by Łukasz
15:02
created

AbstractParserTestCase::getSiteAccess()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
nc 2
nop 3
dl 0
loc 11
rs 9.9
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\Bundle\EzPublishCoreBundle\Tests\DependencyInjection\Configuration\Parser;
8
9
use eZ\Bundle\EzPublishCoreBundle\DependencyInjection\Configuration\ChainConfigResolver;
10
use eZ\Bundle\EzPublishCoreBundle\DependencyInjection\Configuration\ConfigResolver\DefaultScopeConfigResolver;
11
use eZ\Bundle\EzPublishCoreBundle\DependencyInjection\Configuration\ConfigResolver\GlobalScopeConfigResolver;
12
use eZ\Bundle\EzPublishCoreBundle\DependencyInjection\Configuration\ConfigResolver\SiteAccessGroupConfigResolver;
13
use eZ\Bundle\EzPublishCoreBundle\DependencyInjection\Configuration\ConfigResolver\StaticSiteAccessConfigResolver;
14
use eZ\Publish\Core\MVC\ConfigResolverInterface;
15
use eZ\Publish\Core\MVC\Symfony\SiteAccess;
16
use eZ\Publish\Core\MVC\Symfony\SiteAccess\Provider\StaticSiteAccessProvider;
17
use eZ\Publish\Core\MVC\Symfony\SiteAccess\SiteAccessProviderInterface;
18
use eZ\Publish\Core\MVC\Symfony\SiteAccessGroup;
19
use Matthias\SymfonyDependencyInjectionTest\PhpUnit\AbstractExtensionTestCase;
20
21
abstract class AbstractParserTestCase extends AbstractExtensionTestCase
22
{
23
    /**
24
     * Asserts a parameter from ConfigResolver has expected value for given scope.
25
     *
26
     * @param string $parameterName
27
     * @param mixed $expectedValue
28
     * @param string $scope SiteAccess name, group, default or global
29
     * @param bool $assertSame Set to false if you want to use assertEquals() instead of assertSame()
30
     */
31
    protected function assertConfigResolverParameterValue($parameterName, $expectedValue, $scope, $assertSame = true)
32
    {
33
        $chainConfigResolver = $this->getConfigResolver();
34
        $assertMethod = $assertSame ? 'assertSame' : 'assertEquals';
35
        $this->$assertMethod($expectedValue, $chainConfigResolver->getParameter($parameterName, 'ezsettings', $scope));
36
    }
37
38
    protected function getConfigResolver(): ConfigResolverInterface
39
    {
40
        $chainConfigResolver = new ChainConfigResolver();
41
        $siteAccessProvider = $this->getSiteAccessProviderMock();
42
43
        $configResolvers = [
44
            new DefaultScopeConfigResolver('default'),
45
            new SiteAccessGroupConfigResolver($siteAccessProvider, 'default'),
46
            new StaticSiteAccessConfigResolver($siteAccessProvider, 'default'),
47
            new GlobalScopeConfigResolver('default'),
48
        ];
49
50
        foreach ($configResolvers as $priority => $configResolver) {
51
            $configResolver->setContainer($this->container);
52
            $chainConfigResolver->addResolver($configResolver, $priority);
53
        }
54
55
        return $chainConfigResolver;
56
    }
57
58
    protected function getSiteAccessProviderMock(): SiteAccessProviderInterface
59
    {
60
        $siteAccessProvider = $this->createMock(SiteAccessProviderInterface::class);
61
        $siteAccessProvider
0 ignored issues
show
Bug introduced by
The method method() does not seem to exist on object<PHPUnit\Framework\MockObject\MockObject>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
62
            ->method('isDefined')
63
            ->willReturnMap([
64
                ['ezdemo_site', true],
65
                ['fre', true],
66
                ['fre2', true],
67
                ['ezdemo_site_admin', true],
68
            ]);
69
        $siteAccessProvider
0 ignored issues
show
Bug introduced by
The method method() does not seem to exist on object<PHPUnit\Framework\MockObject\MockObject>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
70
            ->method('getSiteAccess')
71
            ->willReturnMap([
72
                ['ezdemo_site', $this->getSiteAccess('ezdemo_site', StaticSiteAccessProvider::class, ['ezdemo_group', 'ezdemo_frontend_group'])],
73
                ['fre', $this->getSiteAccess('fre', StaticSiteAccessProvider::class, ['ezdemo_group', 'ezdemo_frontend_group'])],
74
                ['fre2', $this->getSiteAccess('fre', StaticSiteAccessProvider::class, ['ezdemo_group', 'ezdemo_frontend_group'])],
75
                ['ezdemo_site_admin', $this->getSiteAccess('ezdemo_site_admin', StaticSiteAccessProvider::class, ['ezdemo_group'])],
76
            ]);
77
78
        return $siteAccessProvider;
79
    }
80
81
    /**
82
     * @param string[] $groupNames
83
     */
84
    protected function getSiteAccess(string $name, string $provider, array $groupNames): SiteAccess
85
    {
86
        $siteAccess = new SiteAccess($name, SiteAccess::DEFAULT_MATCHING_TYPE, null, $provider);
87
        $siteAccessGroups = [];
88
        foreach ($groupNames as $groupName) {
89
            $siteAccessGroups[] = new SiteAccessGroup($groupName);
90
        }
91
        $siteAccess->groups = $siteAccessGroups;
92
93
        return $siteAccess;
94
    }
95
}
96