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