Completed
Push — master ( 1c0828...c11e72 )
by Marko
04:18
created

testNotHasServiceDefinitionForLockExtension()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 6
rs 10
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\Admin\AdminHelper;
18
use Sonata\AdminBundle\Admin\BreadcrumbsBuilder;
19
use Sonata\AdminBundle\Admin\BreadcrumbsBuilderInterface;
20
use Sonata\AdminBundle\Admin\Pool;
21
use Sonata\AdminBundle\Bridge\Exporter\AdminExporter;
22
use Sonata\AdminBundle\DependencyInjection\SonataAdminExtension;
23
use Sonata\AdminBundle\Event\AdminEventExtension;
24
use Sonata\AdminBundle\Filter\FilterFactory;
25
use Sonata\AdminBundle\Filter\FilterFactoryInterface;
26
use Sonata\AdminBundle\Filter\Persister\FilterPersisterInterface;
27
use Sonata\AdminBundle\Filter\Persister\SessionFilterPersister;
28
use Sonata\AdminBundle\Model\AuditManager;
29
use Sonata\AdminBundle\Model\AuditManagerInterface;
30
use Sonata\AdminBundle\Route\AdminPoolLoader;
31
use Sonata\AdminBundle\Search\SearchHandler;
32
use Sonata\AdminBundle\Templating\MutableTemplateRegistryInterface;
33
use Sonata\AdminBundle\Templating\TemplateRegistry;
34
use Sonata\AdminBundle\Translator\BCLabelTranslatorStrategy;
35
use Sonata\AdminBundle\Translator\FormLabelTranslatorStrategy;
36
use Sonata\AdminBundle\Translator\LabelTranslatorStrategyInterface;
37
use Sonata\AdminBundle\Translator\NativeLabelTranslatorStrategy;
38
use Sonata\AdminBundle\Translator\NoopLabelTranslatorStrategy;
39
use Sonata\AdminBundle\Translator\UnderscoreLabelTranslatorStrategy;
40
use Sonata\AdminBundle\Twig\GlobalVariables;
41
42
class SonataAdminExtensionTest extends AbstractExtensionTestCase
43
{
44
    /**
45
     * @var string[]
46
     */
47
    private $defaultStylesheets = [];
48
49
    /**
50
     * @var string[]
51
     */
52
    private $defaultJavascripts = [];
53
54
    protected function setUp(): void
55
    {
56
        parent::setUp();
57
        $this->container->setParameter('kernel.bundles', []);
58
        $this->load();
59
        $this->defaultStylesheets = $this->container
60
            ->getDefinition('sonata.admin.pool')->getArgument(3)['stylesheets']
61
        ;
62
        $this->defaultJavascripts = $this->container
63
            ->getDefinition('sonata.admin.pool')->getArgument(3)['javascripts']
64
        ;
65
    }
66
67
    public function testHasCoreServicesAlias(): void
68
    {
69
        $this->assertContainerBuilderHasService(Pool::class);
70
        $this->assertContainerBuilderHasService(AdminPoolLoader::class);
71
        $this->assertContainerBuilderHasService(AdminHelper::class);
72
        $this->assertContainerBuilderHasService(FilterFactory::class);
73
        $this->assertContainerBuilderHasService(
74
            FilterFactoryInterface::class,
75
            FilterFactory::class
76
        );
77
        $this->assertContainerBuilderHasService(BreadcrumbsBuilder::class);
78
        $this->assertContainerBuilderHasService(
79
            BreadcrumbsBuilderInterface::class,
80
            BreadcrumbsBuilder::class
81
        );
82
        $this->assertContainerBuilderHasService(BCLabelTranslatorStrategy::class);
83
        $this->assertContainerBuilderHasService(NativeLabelTranslatorStrategy::class);
84
        $this->assertContainerBuilderHasService(
85
            LabelTranslatorStrategyInterface::class,
86
            NativeLabelTranslatorStrategy::class
87
        );
88
        $this->assertContainerBuilderHasService(NoopLabelTranslatorStrategy::class);
89
        $this->assertContainerBuilderHasService(UnderscoreLabelTranslatorStrategy::class);
90
        $this->assertContainerBuilderHasService(FormLabelTranslatorStrategy::class);
91
        $this->assertContainerBuilderHasService(AuditManager::class);
92
        $this->assertContainerBuilderHasService(AuditManagerInterface::class, AuditManager::class);
93
        $this->assertContainerBuilderHasService(SearchHandler::class);
94
        $this->assertContainerBuilderHasService(AdminEventExtension::class);
95
        $this->assertContainerBuilderHasService(GlobalVariables::class);
96
        $this->assertContainerBuilderHasService(SessionFilterPersister::class);
97
        $this->assertContainerBuilderHasService(
98
            FilterPersisterInterface::class,
99
            SessionFilterPersister::class
100
        );
101
        $this->assertContainerBuilderHasService(TemplateRegistry::class);
102
        $this->assertContainerBuilderHasService(
103
            MutableTemplateRegistryInterface::class,
104
            TemplateRegistry::class
105
        );
106
    }
107
108
    /**
109
     * @doesNotPerformAssertions
110
     * @group legacy
111
     */
112
    public function testContainerCompileWithJMSDiExtraBundle(): void
113
    {
114
        $this->container->setParameter('kernel.bundles', [
115
            'JMSDiExtraBundle' => true,
116
        ]);
117
118
        $this->container->compile();
119
    }
120
121
    public function testHasServiceDefinitionForLockExtension(): void
122
    {
123
        $this->container->setParameter('kernel.bundles', []);
124
        $this->load(['options' => ['lock_protection' => true]]);
125
        $this->assertContainerBuilderHasService('sonata.admin.lock.extension');
126
    }
127
128
    public function testNotHasServiceDefinitionForLockExtension(): void
129
    {
130
        $this->container->setParameter('kernel.bundles', []);
131
        $this->load(['options' => ['lock_protection' => false]]);
132
        $this->assertContainerBuilderNotHasService('sonata.admin.lock.extension');
133
    }
134
135
    public function testLoadsExporterServiceDefinitionWhenExporterBundleIsRegistered(): void
136
    {
137
        $this->container->setParameter('kernel.bundles', ['SonataExporterBundle' => 'whatever']);
138
        $this->load();
139
        $this->assertContainerBuilderHasService(
140
            'sonata.admin.admin_exporter',
141
            AdminExporter::class
142
        );
143
    }
144
145
    public function testHasSecurityRoleParameters(): void
146
    {
147
        $this->container->setParameter('kernel.bundles', []);
148
        $this->load();
149
150
        $this->assertContainerBuilderHasParameter('sonata.admin.configuration.security.role_admin');
151
        $this->assertContainerBuilderHasParameter('sonata.admin.configuration.security.role_super_admin');
152
    }
153
154
    public function testHasDefaultServiceParameters(): void
155
    {
156
        $this->container->setParameter('kernel.bundles', []);
157
        $this->load();
158
159
        $this->assertContainerBuilderHasParameter('sonata.admin.configuration.default_group');
160
        $this->assertContainerBuilderHasParameter('sonata.admin.configuration.default_label_catalogue');
161
        $this->assertContainerBuilderHasParameter('sonata.admin.configuration.default_icon');
162
    }
163
164
    public function testExtraStylesheetsGetAdded(): void
165
    {
166
        $this->container->setParameter('kernel.bundles', []);
167
        $extraStylesheets = ['foo/bar.css', 'bar/quux.css'];
168
        $this->load([
169
            'assets' => [
170
                'extra_stylesheets' => $extraStylesheets,
171
            ],
172
        ]);
173
        $stylesheets = $this->container->getDefinition('sonata.admin.pool')->getArgument(3)['stylesheets'];
174
175
        $this->assertSame(array_merge($this->defaultStylesheets, $extraStylesheets), $stylesheets);
176
    }
177
178
    public function testRemoveStylesheetsGetRemoved(): void
179
    {
180
        $this->container->setParameter('kernel.bundles', []);
181
        $removeStylesheets = [
182
            'bundles/sonataadmin/vendor/admin-lte/dist/css/skins/skin-black.min.css',
183
            'bundles/sonataadmin/vendor/jqueryui/themes/base/jquery-ui.css',
184
        ];
185
        $this->load([
186
            'assets' => [
187
                'remove_stylesheets' => $removeStylesheets,
188
            ],
189
        ]);
190
        $stylesheets = $this->container->getDefinition('sonata.admin.pool')->getArgument(3)['stylesheets'];
191
192
        $this->assertSame(array_values(array_diff($this->defaultStylesheets, $removeStylesheets)), $stylesheets);
193
    }
194
195
    public function testExtraJavascriptsGetAdded(): void
196
    {
197
        $this->container->setParameter('kernel.bundles', []);
198
        $extraJavascripts = ['foo/bar.js', 'bar/quux.js'];
199
        $this->load([
200
            'assets' => [
201
                'extra_javascripts' => $extraJavascripts,
202
            ],
203
        ]);
204
        $javascripts = $this->container->getDefinition('sonata.admin.pool')->getArgument(3)['javascripts'];
205
206
        $this->assertSame(array_merge($this->defaultJavascripts, $extraJavascripts), $javascripts);
207
    }
208
209
    public function testRemoveJavascriptsGetRemoved(): void
210
    {
211
        $this->container->setParameter('kernel.bundles', []);
212
        $removeJavascripts = [
213
            'bundles/sonataadmin/vendor/readmore-js/readmore.min.js',
214
            'bundles/sonataadmin/jquery/jquery.confirmExit.js',
215
        ];
216
        $this->load([
217
            'assets' => [
218
                'remove_javascripts' => $removeJavascripts,
219
            ],
220
        ]);
221
        $javascripts = $this->container->getDefinition('sonata.admin.pool')->getArgument(3)['javascripts'];
222
223
        $this->assertSame(array_values(array_diff($this->defaultJavascripts, $removeJavascripts)), $javascripts);
224
    }
225
226
    public function testAssetsCanBeAddedAndRemoved(): void
227
    {
228
        $this->container->setParameter('kernel.bundles', []);
229
        $extraStylesheets = ['foo/bar.css', 'bar/quux.css'];
230
        $extraJavascripts = ['foo/bar.js', 'bar/quux.js'];
231
        $removeStylesheets = [
232
            'bundles/sonataadmin/vendor/admin-lte/dist/css/skins/skin-black.min.css',
233
            'bundles/sonataadmin/vendor/jqueryui/themes/base/jquery-ui.css',
234
        ];
235
        $removeJavascripts = [
236
            'bundles/sonataadmin/vendor/readmore-js/readmore.min.js',
237
            'bundles/sonataadmin/jquery/jquery.confirmExit.js',
238
        ];
239
        $this->load([
240
            'assets' => [
241
                'extra_stylesheets' => $extraStylesheets,
242
                'remove_stylesheets' => $removeStylesheets,
243
                'extra_javascripts' => $extraJavascripts,
244
                'remove_javascripts' => $removeJavascripts,
245
            ],
246
        ]);
247
        $stylesheets = $this->container
248
            ->getDefinition('sonata.admin.pool')->getArgument(3)['stylesheets']
249
        ;
250
251
        $this->assertSame(
252
            array_merge(array_diff($this->defaultStylesheets, $removeStylesheets), $extraStylesheets),
253
            $stylesheets
254
        );
255
256
        $javascripts = $this->container->getDefinition('sonata.admin.pool')->getArgument(3)['javascripts'];
257
258
        $this->assertSame(
259
            array_merge(array_diff($this->defaultJavascripts, $removeJavascripts), $extraJavascripts),
260
            $javascripts
261
        );
262
    }
263
264
    protected function getContainerExtensions()
265
    {
266
        return [new SonataAdminExtension()];
267
    }
268
}
269