Completed
Push — EZP-31046-chain-config-resolve... ( 1b7228...de9afc )
by
unknown
14:26
created

IOTest::getChainConfigResolver()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 30

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 0
dl 0
loc 30
rs 9.44
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * File containing the IOTest class.
5
 *
6
 * @copyright Copyright (C) eZ Systems AS. All rights reserved.
7
 * @license For full copyright and license information view LICENSE file distributed with this source code.
8
 */
9
namespace eZ\Bundle\EzPublishCoreBundle\Tests\DependencyInjection\Configuration\Parser;
10
11
use eZ\Bundle\EzPublishCoreBundle\DependencyInjection\Configuration\ChainConfigResolver;
12
use eZ\Bundle\EzPublishCoreBundle\DependencyInjection\Configuration\ComplexSettings\ComplexSettingParser;
13
use eZ\Bundle\EzPublishCoreBundle\DependencyInjection\Configuration\ConfigResolver;
14
use eZ\Bundle\EzPublishCoreBundle\DependencyInjection\Configuration\Parser\IO;
15
use eZ\Bundle\EzPublishCoreBundle\DependencyInjection\EzPublishCoreExtension;
16
use eZ\Publish\Core\MVC\Symfony\SiteAccess;
17
use eZ\Publish\Core\MVC\Symfony\SiteAccess\Provider\StaticSiteAccessProvider;
18
use eZ\Publish\Core\MVC\Symfony\SiteAccess\SiteAccessProviderInterface;
19
use Symfony\Component\Yaml\Yaml;
20
21
class IOTest extends AbstractParserTestCase
22
{
23
    private const DEFAULT_NAMESPACE = 'ezsettings';
24
25
    private $minimalConfig;
26
27
    protected function setUp(): void
28
    {
29
        parent::setUp();
30
        $this->container->setParameter('ezsettings.default.var_dir', 'var'); // PS: Does not seem to take effect
31
        $this->container->setParameter('ezsettings.default.storage_dir', 'storage');
32
        $this->container->setParameter('ezsettings.ezdemo_site.var_dir', 'var/ezdemo_site');
33
34
        $this->container->set('ezpublish.config.resolver.chain', $this->getChainConfigResolver());
35
    }
36
37
    protected function getContainerExtensions(): array
38
    {
39
        return [
40
            new EzPublishCoreExtension([new IO(new ComplexSettingParser())]),
41
        ];
42
    }
43
44
    protected function getMinimalConfiguration(): array
45
    {
46
        if ($this->minimalConfig === null) {
47
            $this->minimalConfig = Yaml::parse(file_get_contents(__DIR__ . '/../../Fixtures/ezpublish_minimal.yml'));
48
        }
49
50
        return $this->minimalConfig;
51
    }
52
53
    public function testHandlersConfig()
54
    {
55
        $config = [
56
            'system' => [
57
                'ezdemo_site' => [
58
                    'io' => [
59
                        'binarydata_handler' => 'cluster',
60
                        'metadata_handler' => 'cluster',
61
                    ],
62
                ],
63
            ],
64
        ];
65
66
        $this->load($config);
67
68
        $this->assertConfigResolverParameterValue('io.metadata_handler', 'cluster', 'ezdemo_site');
69
        $this->assertConfigResolverParameterValue('io.binarydata_handler', 'cluster', 'ezdemo_site');
70
    }
71
72
    /**
73
     * Tests that a complex default io.url_prefix will be set in a context where one of its dependencies is set.
74
     */
75
    public function testComplexIoUrlPrefix()
76
    {
77
        $this->load();
78
79
        // Should have been defined & converted in ezdemo_site
80
        $this->assertContainerBuilderHasParameter('ezsettings.ezdemo_site.io.url_prefix', 'var/ezdemo_site/storage');
81
        // Should have been converted in default
82
        $this->assertContainerBuilderHasParameter('ezsettings.default.io.url_prefix', 'var/storage');
83
    }
84
85
    /**
86
     * Tests that a complex default io.url_prefix will be set in a context where one of its dependencies is set.
87
     */
88
    public function testComplexIoLegacyUrlPrefix()
89
    {
90
        $this->load();
91
92
        // Should have been defined & converted in ezdemo_site
93
        $this->assertContainerBuilderHasParameter('ezsettings.ezdemo_site.io.legacy_url_prefix', 'var/ezdemo_site/storage');
94
        // Should have been converted in default
95
        $this->assertContainerBuilderHasParameter('ezsettings.default.io.legacy_url_prefix', 'var/storage');
96
    }
97
98
    /**
99
     * Tests that a complex default io.url_prefix will be set in a context where one of its dependencies is set.
100
     */
101
    public function testComplexIoRootDir()
102
    {
103
        $this->load();
104
105
        // Should have been defined & converted in ezdemo_site
106
        $this->assertContainerBuilderHasParameter('ezsettings.ezdemo_site.io.root_dir', '%webroot_dir%/var/ezdemo_site/storage');
107
        // Should have been converted in default
108
        $this->assertContainerBuilderHasParameter('ezsettings.default.io.root_dir', '%webroot_dir%/var/storage');
109
    }
110
111
    private function getChainConfigResolver(): ChainConfigResolver{
112
        $siteAccessProvider = $this->getSiteAccessProviderMock();
113
114
        $chainConfigResolver = new ChainConfigResolver();
115
        $globalConfigResolver = new ConfigResolver\GlobalScopeConfigResolver(self::DEFAULT_NAMESPACE);
116
        $globalConfigResolver->setContainer($this->container);
117
        $chainConfigResolver->addResolver($globalConfigResolver, 255);
118
119
        $saConfigResolver = new ConfigResolver\StaticSiteAccessConfigResolver(
120
            $siteAccessProvider,
121
            self::DEFAULT_NAMESPACE
122
        );
123
        $saConfigResolver->setContainer($this->container);
124
        $saConfigResolver->setSiteAccess(new SiteAccess('ezdemo_site'));
125
        $chainConfigResolver->addResolver($saConfigResolver, 100);
126
127
        $saGroupConfigResolver = new ConfigResolver\SiteAccessGroupConfigResolver(
128
            $siteAccessProvider,
129
            self::DEFAULT_NAMESPACE
130
        );
131
        $saGroupConfigResolver->setContainer($this->container);
132
        $saGroupConfigResolver->setSiteAccess(new SiteAccess('ezdemo_site'));
133
        $chainConfigResolver->addResolver($saGroupConfigResolver, 50);
134
135
        $defaultConfigResolver = new ConfigResolver\DefaultScopeConfigResolver(self::DEFAULT_NAMESPACE);
136
        $defaultConfigResolver->setContainer($this->container);
137
        $chainConfigResolver->addResolver($defaultConfigResolver, 0);
138
139
        return $chainConfigResolver;
140
    }
141
142
    protected function getSiteAccessProviderMock(): SiteAccessProviderInterface
143
    {
144
        $siteAccessProvider = $this->createMock(SiteAccessProviderInterface::class);
145
        $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...
146
            ->method('isDefined')
147
            ->willReturnMap([
148
                ['ezdemo_site', true],
149
                ['fre', true],
150
                ['ezdemo_site_admin', true],
151
                ['default', true],
152
                ['ezdemo_group', true],
153
                ['ezdemo_frontend_group', true],
154
            ]);
155
        $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...
156
            ->method('getSiteAccess')
157
            ->willReturnMap([
158
                ['ezdemo_site', $this->getSiteAccess('ezdemo_site', StaticSiteAccessProvider::class, [])],
159
                ['fre', $this->getSiteAccess('fre', StaticSiteAccessProvider::class, [])],
160
                ['ezdemo_site_admin', $this->getSiteAccess('ezdemo_site_admin', StaticSiteAccessProvider::class, [])],
161
                ['default', $this->getSiteAccess('default', StaticSiteAccessProvider::class, [])],
162
                ['ezdemo_group', $this->getSiteAccess('ezdemo_group', StaticSiteAccessProvider::class, [])],
163
                ['ezdemo_frontend_group', $this->getSiteAccess('ezdemo_frontend_group', StaticSiteAccessProvider::class, [])],
164
            ]);
165
166
        return $siteAccessProvider;
167
    }
168
}
169