Completed
Push — master ( c4e93d...f0fa26 )
by
unknown
79:49 queued 61:06
created

AbstractParserTestCase::setUp()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 0
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
use Symfony\Component\Config\FileLocator;
21
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
22
23
abstract class AbstractParserTestCase extends AbstractExtensionTestCase
24
{
25
    protected const EMPTY_SA_GROUP = 'empty_group';
26
27
    protected function setUp(): void
28
    {
29
        parent::setUp();
30
31
        $loader = new YamlFileLoader(
32
            $this->container,
33
            new FileLocator(__DIR__ . '/../../Fixtures')
34
        );
35
36
        $loader->load('parameters.yml');
37
    }
38
39
    /**
40
     * Asserts a parameter from ConfigResolver has expected value for given scope.
41
     *
42
     * @param string $parameterName
43
     * @param mixed $expectedValue
44
     * @param string $scope SiteAccess name, group, default or global
45
     * @param bool $assertSame Set to false if you want to use assertEquals() instead of assertSame()
46
     */
47
    protected function assertConfigResolverParameterValue($parameterName, $expectedValue, $scope, $assertSame = true)
48
    {
49
        $chainConfigResolver = $this->getConfigResolver();
50
        $assertMethod = $assertSame ? 'assertSame' : 'assertEquals';
51
        $this->$assertMethod($expectedValue, $chainConfigResolver->getParameter($parameterName, 'ezsettings', $scope));
52
    }
53
54
    protected function getConfigResolver(): ConfigResolverInterface
55
    {
56
        $chainConfigResolver = new ChainConfigResolver();
57
        $siteAccessProvider = $this->getSiteAccessProviderMock();
58
59
        $configResolvers = [
60
            new DefaultScopeConfigResolver('default'),
61
            new SiteAccessGroupConfigResolver($siteAccessProvider, 'default', [self::EMPTY_SA_GROUP => []]),
62
            new StaticSiteAccessConfigResolver($siteAccessProvider, 'default'),
63
            new GlobalScopeConfigResolver('default'),
64
        ];
65
66
        foreach ($configResolvers as $priority => $configResolver) {
67
            $configResolver->setContainer($this->container);
68
            $chainConfigResolver->addResolver($configResolver, $priority);
69
        }
70
71
        return $chainConfigResolver;
72
    }
73
74
    protected function getSiteAccessProviderMock(): SiteAccessProviderInterface
75
    {
76
        $siteAccessProvider = $this->createMock(SiteAccessProviderInterface::class);
77
        $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...
78
            ->method('isDefined')
79
            ->willReturnMap([
80
                ['ezdemo_site', true],
81
                ['fre', true],
82
                ['fre2', true],
83
                ['ezdemo_site_admin', true],
84
                ['empty_group', false],
85
            ]);
86
        $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...
87
            ->method('getSiteAccess')
88
            ->willReturnMap([
89
                ['ezdemo_site', $this->getSiteAccess('ezdemo_site', StaticSiteAccessProvider::class, ['ezdemo_group', 'ezdemo_frontend_group'])],
90
                ['fre', $this->getSiteAccess('fre', StaticSiteAccessProvider::class, ['ezdemo_group', 'ezdemo_frontend_group'])],
91
                ['fre2', $this->getSiteAccess('fre', StaticSiteAccessProvider::class, ['ezdemo_group', 'ezdemo_frontend_group'])],
92
                ['ezdemo_site_admin', $this->getSiteAccess('ezdemo_site_admin', StaticSiteAccessProvider::class, ['ezdemo_group'])],
93
            ]);
94
95
        return $siteAccessProvider;
96
    }
97
98
    /**
99
     * @param string[] $groupNames
100
     */
101
    protected function getSiteAccess(string $name, string $provider, array $groupNames): SiteAccess
102
    {
103
        $siteAccess = new SiteAccess($name, SiteAccess::DEFAULT_MATCHING_TYPE, null, $provider);
104
        $siteAccessGroups = [];
105
        foreach ($groupNames as $groupName) {
106
            $siteAccessGroups[] = new SiteAccessGroup($groupName);
107
        }
108
        $siteAccess->groups = $siteAccessGroups;
109
110
        return $siteAccess;
111
    }
112
}
113