Completed
Push — symfony5 ( 6bae84...3e4e26 )
by
unknown
12:04
created

AbstractParserTestCase::setUp()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

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