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