Completed
Pull Request — master (#5091)
by Marko
03:59
created

testRemoveJavascriptsGetRemoved()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 16
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 16
rs 9.4285
cc 1
eloc 10
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 testExtraStylesheetsGetAdded(): void
91
    {
92
        $this->container->setParameter('kernel.bundles', []);
93
        $extraStylesheets = ['foo/bar.css', 'bar/quux.css'];
94
        $this->load([
95
            'assets' => [
96
                'extra_stylesheets' => $extraStylesheets,
97
            ],
98
        ]);
99
        $stylesheets = $this->container->getDefinition('sonata.admin.pool')->getArgument(3)['stylesheets'];
100
101
        $this->assertSame(array_merge($this->defaultStylesheets, $extraStylesheets), $stylesheets);
102
    }
103
104
    public function testRemoveStylesheetsGetRemoved(): void
105
    {
106
        $this->container->setParameter('kernel.bundles', []);
107
        $removeStylesheets = [
108
            'bundles/sonataadmin/vendor/admin-lte/dist/css/skins/skin-black.min.css',
109
            'bundles/sonataadmin/vendor/jqueryui/themes/base/jquery-ui.css',
110
        ];
111
        $this->load([
112
            'assets' => [
113
                'remove_stylesheets' => $removeStylesheets,
114
            ],
115
        ]);
116
        $stylesheets = $this->container->getDefinition('sonata.admin.pool')->getArgument(3)['stylesheets'];
117
118
        $this->assertSame(array_values(array_diff($this->defaultStylesheets, $removeStylesheets)), $stylesheets);
119
    }
120
121
    public function testExtraJavascriptsGetAdded(): void
122
    {
123
        $this->container->setParameter('kernel.bundles', []);
124
        $extraJavascripts = ['foo/bar.js', 'bar/quux.js'];
125
        $this->load([
126
            'assets' => [
127
                'extra_javascripts' => $extraJavascripts,
128
            ],
129
        ]);
130
        $javascripts = $this->container->getDefinition('sonata.admin.pool')->getArgument(3)['javascripts'];
131
132
        $this->assertSame(array_merge($this->defaultJavascripts, $extraJavascripts), $javascripts);
133
    }
134
135
    public function testRemoveJavascriptsGetRemoved(): void
136
    {
137
        $this->container->setParameter('kernel.bundles', []);
138
        $removeJavascripts = [
139
            'bundles/sonataadmin/vendor/readmore-js/readmore.min.js',
140
            'bundles/sonataadmin/jquery/jquery.confirmExit.js',
141
        ];
142
        $this->load([
143
            'assets' => [
144
                'remove_javascripts' => $removeJavascripts,
145
            ],
146
        ]);
147
        $javascripts = $this->container->getDefinition('sonata.admin.pool')->getArgument(3)['javascripts'];
148
149
        $this->assertSame(array_values(array_diff($this->defaultJavascripts, $removeJavascripts)), $javascripts);
150
    }
151
152
    public function testAssetsCanBeAddedAndRemoved(): void
153
    {
154
        $this->container->setParameter('kernel.bundles', []);
155
        $extraStylesheets = ['foo/bar.css', 'bar/quux.css'];
156
        $extraJavascripts = ['foo/bar.js', 'bar/quux.js'];
157
        $removeStylesheets = [
158
            'bundles/sonataadmin/vendor/admin-lte/dist/css/skins/skin-black.min.css',
159
            'bundles/sonataadmin/vendor/jqueryui/themes/base/jquery-ui.css',
160
        ];
161
        $removeJavascripts = [
162
            'bundles/sonataadmin/vendor/readmore-js/readmore.min.js',
163
            'bundles/sonataadmin/jquery/jquery.confirmExit.js',
164
        ];
165
        $this->load([
166
            'assets' => [
167
                'extra_stylesheets' => $extraStylesheets,
168
                'remove_stylesheets' => $removeStylesheets,
169
                'extra_javascripts' => $extraJavascripts,
170
                'remove_javascripts' => $removeJavascripts,
171
            ],
172
        ]);
173
        $stylesheets = $this->container
174
            ->getDefinition('sonata.admin.pool')->getArgument(3)['stylesheets']
175
        ;
176
177
        $this->assertSame(
178
            array_merge(array_diff($this->defaultStylesheets, $removeStylesheets), $extraStylesheets),
179
            $stylesheets
180
        );
181
182
        $javascripts = $this->container->getDefinition('sonata.admin.pool')->getArgument(3)['javascripts'];
183
184
        $this->assertSame(
185
            array_merge(array_diff($this->defaultJavascripts, $removeJavascripts), $extraJavascripts),
186
            $javascripts
187
        );
188
    }
189
190
    protected function getContainerExtensions()
191
    {
192
        return [new SonataAdminExtension()];
193
    }
194
}
195