Completed
Pull Request — master (#5391)
by Grégoire
03:40
created

testHasDefaultServiceParameters()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 9
rs 9.9666
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of the Sonata Project package.
7
 *
8
 * (c) Thomas Rabaix <[email protected]>
9
 *
10
 * For the full copyright and license information, please view the LICENSE
11
 * file that was distributed with this source code.
12
 */
13
14
namespace Sonata\AdminBundle\Tests\DependencyInjection;
15
16
use Matthias\SymfonyDependencyInjectionTest\PhpUnit\AbstractExtensionTestCase;
17
use Sonata\AdminBundle\Bridge\Exporter\AdminExporter;
18
use Sonata\AdminBundle\DependencyInjection\SonataAdminExtension;
19
20
class SonataAdminExtensionTest extends AbstractExtensionTestCase
21
{
22
    /**
23
     * @var string[]
24
     */
25
    private $defaultStylesheets = [];
26
27
    /**
28
     * @var string[]
29
     */
30
    private $defaultJavascripts = [];
31
32
    protected function setUp(): void
33
    {
34
        parent::setUp();
35
        $this->container->setParameter('kernel.bundles', []);
36
        $this->load();
37
        $this->defaultStylesheets = $this->container
38
            ->getDefinition('sonata.admin.pool')->getArgument(3)['stylesheets']
39
        ;
40
        $this->defaultJavascripts = $this->container
41
            ->getDefinition('sonata.admin.pool')->getArgument(3)['javascripts']
42
        ;
43
    }
44
45
    /**
46
     * @group legacy
47
     */
48
    public function testContainerCompileWithJMSDiExtraBundle(): void
49
    {
50
        $this->container->setParameter('kernel.bundles', [
51
            'JMSDiExtraBundle' => true,
52
        ]);
53
54
        $this->container->compile();
55
    }
56
57
    public function testHasServiceDefinitionForLockExtension(): void
58
    {
59
        $this->container->setParameter('kernel.bundles', []);
60
        $this->load(['options' => ['lock_protection' => true]]);
61
        $this->assertContainerBuilderHasService('sonata.admin.lock.extension');
62
    }
63
64
    public function testNotHasServiceDefinitionForLockExtension(): void
65
    {
66
        $this->container->setParameter('kernel.bundles', []);
67
        $this->load(['options' => ['lock_protection' => false]]);
68
        $this->assertContainerBuilderNotHasService('sonata.admin.lock.extension');
69
    }
70
71
    public function testLoadsExporterServiceDefinitionWhenExporterBundleIsRegistered(): void
72
    {
73
        $this->container->setParameter('kernel.bundles', ['SonataExporterBundle' => 'whatever']);
74
        $this->load();
75
        $this->assertContainerBuilderHasService(
76
            'sonata.admin.admin_exporter',
77
            AdminExporter::class
78
        );
79
    }
80
81
    public function testHasSecurityRoleParameters(): void
82
    {
83
        $this->container->setParameter('kernel.bundles', []);
84
        $this->load();
85
86
        $this->assertContainerBuilderHasParameter('sonata.admin.configuration.security.role_admin');
87
        $this->assertContainerBuilderHasParameter('sonata.admin.configuration.security.role_super_admin');
88
    }
89
90
    public function testHasDefaultServiceParameters(): void
91
    {
92
        $this->container->setParameter('kernel.bundles', []);
93
        $this->load();
94
95
        $this->assertContainerBuilderHasParameter('sonata.admin.configuration.default_group');
96
        $this->assertContainerBuilderHasParameter('sonata.admin.configuration.default_label_catalogue');
97
        $this->assertContainerBuilderHasParameter('sonata.admin.configuration.default_icon');
98
    }
99
100
    public function testExtraStylesheetsGetAdded(): void
101
    {
102
        $this->container->setParameter('kernel.bundles', []);
103
        $extraStylesheets = ['foo/bar.css', 'bar/quux.css'];
104
        $this->load([
105
            'assets' => [
106
                'extra_stylesheets' => $extraStylesheets,
107
            ],
108
        ]);
109
        $stylesheets = $this->container->getDefinition('sonata.admin.pool')->getArgument(3)['stylesheets'];
110
111
        $this->assertSame(array_merge($this->defaultStylesheets, $extraStylesheets), $stylesheets);
112
    }
113
114
    public function testRemoveStylesheetsGetRemoved(): void
115
    {
116
        $this->container->setParameter('kernel.bundles', []);
117
        $removeStylesheets = [
118
            'bundles/sonataadmin/vendor/admin-lte/dist/css/skins/skin-black.min.css',
119
            'bundles/sonataadmin/vendor/jqueryui/themes/base/jquery-ui.css',
120
        ];
121
        $this->load([
122
            'assets' => [
123
                'remove_stylesheets' => $removeStylesheets,
124
            ],
125
        ]);
126
        $stylesheets = $this->container->getDefinition('sonata.admin.pool')->getArgument(3)['stylesheets'];
127
128
        $this->assertSame(array_values(array_diff($this->defaultStylesheets, $removeStylesheets)), $stylesheets);
129
    }
130
131
    public function testExtraJavascriptsGetAdded(): void
132
    {
133
        $this->container->setParameter('kernel.bundles', []);
134
        $extraJavascripts = ['foo/bar.js', 'bar/quux.js'];
135
        $this->load([
136
            'assets' => [
137
                'extra_javascripts' => $extraJavascripts,
138
            ],
139
        ]);
140
        $javascripts = $this->container->getDefinition('sonata.admin.pool')->getArgument(3)['javascripts'];
141
142
        $this->assertSame(array_merge($this->defaultJavascripts, $extraJavascripts), $javascripts);
143
    }
144
145
    public function testRemoveJavascriptsGetRemoved(): void
146
    {
147
        $this->container->setParameter('kernel.bundles', []);
148
        $removeJavascripts = [
149
            'bundles/sonataadmin/vendor/readmore-js/readmore.min.js',
150
            'bundles/sonataadmin/jquery/jquery.confirmExit.js',
151
        ];
152
        $this->load([
153
            'assets' => [
154
                'remove_javascripts' => $removeJavascripts,
155
            ],
156
        ]);
157
        $javascripts = $this->container->getDefinition('sonata.admin.pool')->getArgument(3)['javascripts'];
158
159
        $this->assertSame(array_values(array_diff($this->defaultJavascripts, $removeJavascripts)), $javascripts);
160
    }
161
162
    public function testAssetsCanBeAddedAndRemoved(): void
163
    {
164
        $this->container->setParameter('kernel.bundles', []);
165
        $extraStylesheets = ['foo/bar.css', 'bar/quux.css'];
166
        $extraJavascripts = ['foo/bar.js', 'bar/quux.js'];
167
        $removeStylesheets = [
168
            'bundles/sonataadmin/vendor/admin-lte/dist/css/skins/skin-black.min.css',
169
            'bundles/sonataadmin/vendor/jqueryui/themes/base/jquery-ui.css',
170
        ];
171
        $removeJavascripts = [
172
            'bundles/sonataadmin/vendor/readmore-js/readmore.min.js',
173
            'bundles/sonataadmin/jquery/jquery.confirmExit.js',
174
        ];
175
        $this->load([
176
            'assets' => [
177
                'extra_stylesheets' => $extraStylesheets,
178
                'remove_stylesheets' => $removeStylesheets,
179
                'extra_javascripts' => $extraJavascripts,
180
                'remove_javascripts' => $removeJavascripts,
181
            ],
182
        ]);
183
        $stylesheets = $this->container
184
            ->getDefinition('sonata.admin.pool')->getArgument(3)['stylesheets']
185
        ;
186
187
        $this->assertSame(
188
            array_merge(array_diff($this->defaultStylesheets, $removeStylesheets), $extraStylesheets),
189
            $stylesheets
190
        );
191
192
        $javascripts = $this->container->getDefinition('sonata.admin.pool')->getArgument(3)['javascripts'];
193
194
        $this->assertSame(
195
            array_merge(array_diff($this->defaultJavascripts, $removeJavascripts), $extraJavascripts),
196
            $javascripts
197
        );
198
    }
199
200
    protected function getContainerExtensions()
201
    {
202
        return [new SonataAdminExtension()];
203
    }
204
}
205