SonataAdminExtensionTest   A
last analyzed

Complexity

Total Complexity 15

Size/Duplication

Total Lines 287
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6

Importance

Changes 0
Metric Value
wmc 15
lcom 1
cbo 6
dl 0
loc 287
rs 10
c 0
b 0
f 0

15 Methods

Rating   Name   Duplication   Size   Complexity  
A setUp() 0 7 1
A testHasCoreServicesAlias() 0 43 1
A testHasServiceDefinitionForLockExtension() 0 6 1
A testNotHasServiceDefinitionForLockExtension() 0 6 1
A testLoadsExporterServiceDefinitionWhenExporterBundleIsRegistered() 0 9 1
A testHasSecurityRoleParameters() 0 8 1
A testHasDefaultServiceParameters() 0 9 1
A testExtraStylesheetsGetAdded() 0 18 1
A testRemoveStylesheetsGetRemoved() 0 21 1
A testExtraJavascriptsGetAdded() 0 16 1
A testRemoveJavascriptsGetRemoved() 0 21 1
A testAssetsCanBeAddedAndRemoved() 0 43 1
A testDefaultTemplates() 0 46 1
A testLoadIntlTemplate() 0 8 1
A getContainerExtensions() 0 4 1
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\Configuration;
23
use Sonata\AdminBundle\DependencyInjection\SonataAdminExtension;
24
use Sonata\AdminBundle\Event\AdminEventExtension;
25
use Sonata\AdminBundle\Filter\FilterFactory;
26
use Sonata\AdminBundle\Filter\FilterFactoryInterface;
27
use Sonata\AdminBundle\Filter\Persister\FilterPersisterInterface;
28
use Sonata\AdminBundle\Filter\Persister\SessionFilterPersister;
29
use Sonata\AdminBundle\Model\AuditManager;
30
use Sonata\AdminBundle\Model\AuditManagerInterface;
31
use Sonata\AdminBundle\Route\AdminPoolLoader;
32
use Sonata\AdminBundle\Search\SearchHandler;
33
use Sonata\AdminBundle\Templating\MutableTemplateRegistryInterface;
34
use Sonata\AdminBundle\Templating\TemplateRegistry;
35
use Sonata\AdminBundle\Translator\BCLabelTranslatorStrategy;
36
use Sonata\AdminBundle\Translator\Extractor\AdminExtractor;
37
use Sonata\AdminBundle\Translator\FormLabelTranslatorStrategy;
38
use Sonata\AdminBundle\Translator\LabelTranslatorStrategyInterface;
39
use Sonata\AdminBundle\Translator\NativeLabelTranslatorStrategy;
40
use Sonata\AdminBundle\Translator\NoopLabelTranslatorStrategy;
41
use Sonata\AdminBundle\Translator\UnderscoreLabelTranslatorStrategy;
42
use Sonata\AdminBundle\Twig\GlobalVariables;
43
use Symfony\Component\Config\Definition\Processor;
44
45
class SonataAdminExtensionTest extends AbstractExtensionTestCase
46
{
47
    /**
48
     * @var array
49
     */
50
    private $defaultConfiguration = [];
51
52
    protected function setUp(): void
53
    {
54
        parent::setUp();
55
        $this->container->setParameter('kernel.bundles', []);
56
57
        $this->defaultConfiguration = (new Processor())->processConfiguration(new Configuration(), []);
58
    }
59
60
    public function testHasCoreServicesAlias(): void
61
    {
62
        $this->load();
63
64
        $this->assertContainerBuilderHasService(Pool::class);
65
        $this->assertContainerBuilderHasService(AdminPoolLoader::class);
66
        $this->assertContainerBuilderHasService(AdminHelper::class);
67
        $this->assertContainerBuilderHasService(FilterFactory::class);
68
        $this->assertContainerBuilderHasService(
69
            FilterFactoryInterface::class,
70
            FilterFactory::class
71
        );
72
        $this->assertContainerBuilderHasService(BreadcrumbsBuilder::class);
73
        $this->assertContainerBuilderHasService(
74
            BreadcrumbsBuilderInterface::class,
75
            BreadcrumbsBuilder::class
76
        );
77
        $this->assertContainerBuilderHasService(BCLabelTranslatorStrategy::class);
78
        $this->assertContainerBuilderHasService(NativeLabelTranslatorStrategy::class);
79
        $this->assertContainerBuilderHasService(
80
            LabelTranslatorStrategyInterface::class,
81
            NativeLabelTranslatorStrategy::class
82
        );
83
        $this->assertContainerBuilderHasService(NoopLabelTranslatorStrategy::class);
84
        $this->assertContainerBuilderHasService(UnderscoreLabelTranslatorStrategy::class);
85
        $this->assertContainerBuilderHasService(FormLabelTranslatorStrategy::class);
86
        $this->assertContainerBuilderHasService(AuditManager::class);
87
        $this->assertContainerBuilderHasService(AuditManagerInterface::class, AuditManager::class);
88
        $this->assertContainerBuilderHasService(SearchHandler::class);
89
        $this->assertContainerBuilderHasService(AdminEventExtension::class);
90
        $this->assertContainerBuilderHasService(GlobalVariables::class);
91
        $this->assertContainerBuilderHasService(SessionFilterPersister::class);
92
        $this->assertContainerBuilderHasService(
93
            FilterPersisterInterface::class,
94
            SessionFilterPersister::class
95
        );
96
        $this->assertContainerBuilderHasService(TemplateRegistry::class);
97
        $this->assertContainerBuilderHasService(
98
            MutableTemplateRegistryInterface::class,
99
            TemplateRegistry::class
100
        );
101
        $this->assertContainerBuilderHasService(AdminExtractor::class);
102
    }
103
104
    public function testHasServiceDefinitionForLockExtension(): void
105
    {
106
        $this->container->setParameter('kernel.bundles', []);
107
        $this->load(['options' => ['lock_protection' => true]]);
108
        $this->assertContainerBuilderHasService('sonata.admin.lock.extension');
109
    }
110
111
    public function testNotHasServiceDefinitionForLockExtension(): void
112
    {
113
        $this->container->setParameter('kernel.bundles', []);
114
        $this->load(['options' => ['lock_protection' => false]]);
115
        $this->assertContainerBuilderNotHasService('sonata.admin.lock.extension');
116
    }
117
118
    public function testLoadsExporterServiceDefinitionWhenExporterBundleIsRegistered(): void
119
    {
120
        $this->container->setParameter('kernel.bundles', ['SonataExporterBundle' => 'whatever']);
121
        $this->load();
122
        $this->assertContainerBuilderHasService(
123
            'sonata.admin.admin_exporter',
124
            AdminExporter::class
125
        );
126
    }
127
128
    public function testHasSecurityRoleParameters(): void
129
    {
130
        $this->container->setParameter('kernel.bundles', []);
131
        $this->load();
132
133
        $this->assertContainerBuilderHasParameter('sonata.admin.configuration.security.role_admin');
134
        $this->assertContainerBuilderHasParameter('sonata.admin.configuration.security.role_super_admin');
135
    }
136
137
    public function testHasDefaultServiceParameters(): void
138
    {
139
        $this->container->setParameter('kernel.bundles', []);
140
        $this->load();
141
142
        $this->assertContainerBuilderHasParameter('sonata.admin.configuration.default_group');
143
        $this->assertContainerBuilderHasParameter('sonata.admin.configuration.default_label_catalogue');
144
        $this->assertContainerBuilderHasParameter('sonata.admin.configuration.default_icon');
145
    }
146
147
    public function testExtraStylesheetsGetAdded(): void
148
    {
149
        $this->container->setParameter('kernel.bundles', []);
150
151
        $extraStylesheets = ['foo/bar.css', 'bar/quux.css'];
152
        $this->load([
153
            'assets' => [
154
                'extra_stylesheets' => $extraStylesheets,
155
            ],
156
        ]);
157
158
        $stylesheets = $this->container->getDefinition('sonata.admin.pool')->getArgument(3)['stylesheets'];
159
160
        $this->assertSame(
161
            array_merge($this->defaultConfiguration['assets']['stylesheets'], $extraStylesheets),
162
            $stylesheets
163
        );
164
    }
165
166
    public function testRemoveStylesheetsGetRemoved(): void
167
    {
168
        $this->container->setParameter('kernel.bundles', []);
169
        $removeStylesheets = [
170
            'bundles/sonataadmin/vendor/admin-lte/dist/css/skins/skin-black.min.css',
171
            'bundles/sonataadmin/vendor/jqueryui/themes/base/jquery-ui.css',
172
        ];
173
        $this->load([
174
            'assets' => [
175
                'remove_stylesheets' => $removeStylesheets,
176
            ],
177
        ]);
178
        $stylesheets = $this->container->getDefinition('sonata.admin.pool')->getArgument(3)['stylesheets'];
179
180
        $this->assertSame(
181
            array_values(
182
                array_diff($this->defaultConfiguration['assets']['stylesheets'], $removeStylesheets)
183
            ),
184
            $stylesheets
185
        );
186
    }
187
188
    public function testExtraJavascriptsGetAdded(): void
189
    {
190
        $this->container->setParameter('kernel.bundles', []);
191
        $extraJavascripts = ['foo/bar.js', 'bar/quux.js'];
192
        $this->load([
193
            'assets' => [
194
                'extra_javascripts' => $extraJavascripts,
195
            ],
196
        ]);
197
        $javascripts = $this->container->getDefinition('sonata.admin.pool')->getArgument(3)['javascripts'];
198
199
        $this->assertSame(
200
            array_merge($this->defaultConfiguration['assets']['javascripts'], $extraJavascripts),
201
            $javascripts
202
        );
203
    }
204
205
    public function testRemoveJavascriptsGetRemoved(): void
206
    {
207
        $this->container->setParameter('kernel.bundles', []);
208
        $removeJavascripts = [
209
            'bundles/sonataadmin/vendor/readmore-js/readmore.min.js',
210
            'bundles/sonataadmin/jquery/jquery.confirmExit.js',
211
        ];
212
        $this->load([
213
            'assets' => [
214
                'remove_javascripts' => $removeJavascripts,
215
            ],
216
        ]);
217
        $javascripts = $this->container->getDefinition('sonata.admin.pool')->getArgument(3)['javascripts'];
218
219
        $this->assertSame(
220
            array_values(
221
                array_diff($this->defaultConfiguration['assets']['javascripts'], $removeJavascripts)
222
            ),
223
            $javascripts
224
        );
225
    }
226
227
    public function testAssetsCanBeAddedAndRemoved(): void
228
    {
229
        $this->container->setParameter('kernel.bundles', []);
230
        $extraStylesheets = ['foo/bar.css', 'bar/quux.css'];
231
        $extraJavascripts = ['foo/bar.js', 'bar/quux.js'];
232
        $removeStylesheets = [
233
            'bundles/sonataadmin/vendor/admin-lte/dist/css/skins/skin-black.min.css',
234
            'bundles/sonataadmin/vendor/jqueryui/themes/base/jquery-ui.css',
235
        ];
236
        $removeJavascripts = [
237
            'bundles/sonataadmin/vendor/readmore-js/readmore.min.js',
238
            'bundles/sonataadmin/jquery/jquery.confirmExit.js',
239
        ];
240
        $this->load([
241
            'assets' => [
242
                'extra_stylesheets' => $extraStylesheets,
243
                'remove_stylesheets' => $removeStylesheets,
244
                'extra_javascripts' => $extraJavascripts,
245
                'remove_javascripts' => $removeJavascripts,
246
            ],
247
        ]);
248
        $stylesheets = $this->container
249
            ->getDefinition('sonata.admin.pool')->getArgument(3)['stylesheets']
250
        ;
251
252
        $this->assertSame(
253
            array_merge(
254
                array_diff($this->defaultConfiguration['assets']['stylesheets'], $removeStylesheets),
255
                $extraStylesheets
256
            ),
257
            $stylesheets
258
        );
259
260
        $javascripts = $this->container->getDefinition('sonata.admin.pool')->getArgument(3)['javascripts'];
261
262
        $this->assertSame(
263
            array_merge(
264
                array_diff($this->defaultConfiguration['assets']['javascripts'], $removeJavascripts),
265
                $extraJavascripts
266
            ),
267
            $javascripts
268
        );
269
    }
270
271
    public function testDefaultTemplates(): void
272
    {
273
        $this->load();
274
275
        $this->assertSame([
276
            'user_block' => '@SonataAdmin/Core/user_block.html.twig',
277
            'add_block' => '@SonataAdmin/Core/add_block.html.twig',
278
            'layout' => '@SonataAdmin/standard_layout.html.twig',
279
            'ajax' => '@SonataAdmin/ajax_layout.html.twig',
280
            'dashboard' => '@SonataAdmin/Core/dashboard.html.twig',
281
            'search' => '@SonataAdmin/Core/search.html.twig',
282
            'list' => '@SonataAdmin/CRUD/list.html.twig',
283
            'filter' => '@SonataAdmin/Form/filter_admin_fields.html.twig',
284
            'show' => '@SonataAdmin/CRUD/show.html.twig',
285
            'show_compare' => '@SonataAdmin/CRUD/show_compare.html.twig',
286
            'edit' => '@SonataAdmin/CRUD/edit.html.twig',
287
            'preview' => '@SonataAdmin/CRUD/preview.html.twig',
288
            'history' => '@SonataAdmin/CRUD/history.html.twig',
289
            'acl' => '@SonataAdmin/CRUD/acl.html.twig',
290
            'history_revision_timestamp' => '@SonataAdmin/CRUD/history_revision_timestamp.html.twig',
291
            'action' => '@SonataAdmin/CRUD/action.html.twig',
292
            'select' => '@SonataAdmin/CRUD/list__select.html.twig',
293
            'list_block' => '@SonataAdmin/Block/block_admin_list.html.twig',
294
            'search_result_block' => '@SonataAdmin/Block/block_search_result.html.twig',
295
            'short_object_description' => '@SonataAdmin/Helper/short-object-description.html.twig',
296
            'delete' => '@SonataAdmin/CRUD/delete.html.twig',
297
            'batch' => '@SonataAdmin/CRUD/list__batch.html.twig',
298
            'batch_confirmation' => '@SonataAdmin/CRUD/batch_confirmation.html.twig',
299
            'inner_list_row' => '@SonataAdmin/CRUD/list_inner_row.html.twig',
300
            'outer_list_rows_mosaic' => '@SonataAdmin/CRUD/list_outer_rows_mosaic.html.twig',
301
            'outer_list_rows_list' => '@SonataAdmin/CRUD/list_outer_rows_list.html.twig',
302
            'outer_list_rows_tree' => '@SonataAdmin/CRUD/list_outer_rows_tree.html.twig',
303
            'base_list_field' => '@SonataAdmin/CRUD/base_list_field.html.twig',
304
            'pager_links' => '@SonataAdmin/Pager/links.html.twig',
305
            'pager_results' => '@SonataAdmin/Pager/results.html.twig',
306
            'tab_menu_template' => '@SonataAdmin/Core/tab_menu_template.html.twig',
307
            'knp_menu_template' => '@SonataAdmin/Menu/sonata_menu.html.twig',
308
            'action_create' => '@SonataAdmin/CRUD/dashboard__action_create.html.twig',
309
            'button_acl' => '@SonataAdmin/Button/acl_button.html.twig',
310
            'button_create' => '@SonataAdmin/Button/create_button.html.twig',
311
            'button_edit' => '@SonataAdmin/Button/edit_button.html.twig',
312
            'button_history' => '@SonataAdmin/Button/history_button.html.twig',
313
            'button_list' => '@SonataAdmin/Button/list_button.html.twig',
314
            'button_show' => '@SonataAdmin/Button/show_button.html.twig',
315
        ], $this->container->getParameter('sonata.admin.configuration.templates'));
316
    }
317
318
    public function testLoadIntlTemplate(): void
319
    {
320
        $bundlesWithSonataIntlBundle = array_merge($this->container->getParameter('kernel.bundles'), ['SonataIntlBundle' => true]);
321
        $this->container->setParameter('kernel.bundles', $bundlesWithSonataIntlBundle);
322
        $this->load();
323
        $templates = $this->container->getParameter('sonata.admin.configuration.templates');
324
        $this->assertSame('@SonataIntl/CRUD/history_revision_timestamp.html.twig', $templates['history_revision_timestamp']);
325
    }
326
327
    protected function getContainerExtensions(): array
328
    {
329
        return [new SonataAdminExtension()];
330
    }
331
}
332