Completed
Push — master ( 2bbaee...d0c868 )
by Vincent
02:42
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
    public function testHasServiceDefinitionForLockExtension(): void
103
    {
104
        $this->container->setParameter('kernel.bundles', []);
105
        $this->load(['options' => ['lock_protection' => true]]);
106
        $this->assertContainerBuilderHasService('sonata.admin.lock.extension');
107
    }
108
109
    public function testNotHasServiceDefinitionForLockExtension(): void
110
    {
111
        $this->container->setParameter('kernel.bundles', []);
112
        $this->load(['options' => ['lock_protection' => false]]);
113
        $this->assertContainerBuilderNotHasService('sonata.admin.lock.extension');
114
    }
115
116
    public function testLoadsExporterServiceDefinitionWhenExporterBundleIsRegistered(): void
117
    {
118
        $this->container->setParameter('kernel.bundles', ['SonataExporterBundle' => 'whatever']);
119
        $this->load();
120
        $this->assertContainerBuilderHasService(
121
            'sonata.admin.admin_exporter',
122
            AdminExporter::class
123
        );
124
    }
125
126
    public function testHasSecurityRoleParameters(): void
127
    {
128
        $this->container->setParameter('kernel.bundles', []);
129
        $this->load();
130
131
        $this->assertContainerBuilderHasParameter('sonata.admin.configuration.security.role_admin');
132
        $this->assertContainerBuilderHasParameter('sonata.admin.configuration.security.role_super_admin');
133
    }
134
135
    public function testHasDefaultServiceParameters(): void
136
    {
137
        $this->container->setParameter('kernel.bundles', []);
138
        $this->load();
139
140
        $this->assertContainerBuilderHasParameter('sonata.admin.configuration.default_group');
141
        $this->assertContainerBuilderHasParameter('sonata.admin.configuration.default_label_catalogue');
142
        $this->assertContainerBuilderHasParameter('sonata.admin.configuration.default_icon');
143
    }
144
145
    public function testExtraStylesheetsGetAdded(): void
146
    {
147
        $this->container->setParameter('kernel.bundles', []);
148
149
        $extraStylesheets = ['foo/bar.css', 'bar/quux.css'];
150
        $this->load([
151
            'assets' => [
152
                'extra_stylesheets' => $extraStylesheets,
153
            ],
154
        ]);
155
156
        $stylesheets = $this->container->getDefinition('sonata.admin.pool')->getArgument(3)['stylesheets'];
157
158
        $this->assertSame(
159
            array_merge($this->defaultConfiguration['assets']['stylesheets'], $extraStylesheets),
160
            $stylesheets
161
        );
162
    }
163
164
    public function testRemoveStylesheetsGetRemoved(): void
165
    {
166
        $this->container->setParameter('kernel.bundles', []);
167
        $removeStylesheets = [
168
            'bundles/sonataadmin/vendor/admin-lte/dist/css/skins/skin-black.min.css',
169
            'bundles/sonataadmin/vendor/jqueryui/themes/base/jquery-ui.css',
170
        ];
171
        $this->load([
172
            'assets' => [
173
                'remove_stylesheets' => $removeStylesheets,
174
            ],
175
        ]);
176
        $stylesheets = $this->container->getDefinition('sonata.admin.pool')->getArgument(3)['stylesheets'];
177
178
        $this->assertSame(
179
            array_values(
180
                array_diff($this->defaultConfiguration['assets']['stylesheets'], $removeStylesheets)
181
            ),
182
            $stylesheets
183
        );
184
    }
185
186
    public function testExtraJavascriptsGetAdded(): void
187
    {
188
        $this->container->setParameter('kernel.bundles', []);
189
        $extraJavascripts = ['foo/bar.js', 'bar/quux.js'];
190
        $this->load([
191
            'assets' => [
192
                'extra_javascripts' => $extraJavascripts,
193
            ],
194
        ]);
195
        $javascripts = $this->container->getDefinition('sonata.admin.pool')->getArgument(3)['javascripts'];
196
197
        $this->assertSame(
198
            array_merge($this->defaultConfiguration['assets']['javascripts'], $extraJavascripts),
199
            $javascripts
200
        );
201
    }
202
203
    public function testRemoveJavascriptsGetRemoved(): void
204
    {
205
        $this->container->setParameter('kernel.bundles', []);
206
        $removeJavascripts = [
207
            'bundles/sonataadmin/vendor/readmore-js/readmore.min.js',
208
            'bundles/sonataadmin/jquery/jquery.confirmExit.js',
209
        ];
210
        $this->load([
211
            'assets' => [
212
                'remove_javascripts' => $removeJavascripts,
213
            ],
214
        ]);
215
        $javascripts = $this->container->getDefinition('sonata.admin.pool')->getArgument(3)['javascripts'];
216
217
        $this->assertSame(
218
            array_values(
219
                array_diff($this->defaultConfiguration['assets']['javascripts'], $removeJavascripts)
220
            ),
221
            $javascripts
222
        );
223
    }
224
225
    public function testAssetsCanBeAddedAndRemoved(): void
226
    {
227
        $this->container->setParameter('kernel.bundles', []);
228
        $extraStylesheets = ['foo/bar.css', 'bar/quux.css'];
229
        $extraJavascripts = ['foo/bar.js', 'bar/quux.js'];
230
        $removeStylesheets = [
231
            'bundles/sonataadmin/vendor/admin-lte/dist/css/skins/skin-black.min.css',
232
            'bundles/sonataadmin/vendor/jqueryui/themes/base/jquery-ui.css',
233
        ];
234
        $removeJavascripts = [
235
            'bundles/sonataadmin/vendor/readmore-js/readmore.min.js',
236
            'bundles/sonataadmin/jquery/jquery.confirmExit.js',
237
        ];
238
        $this->load([
239
            'assets' => [
240
                'extra_stylesheets' => $extraStylesheets,
241
                'remove_stylesheets' => $removeStylesheets,
242
                'extra_javascripts' => $extraJavascripts,
243
                'remove_javascripts' => $removeJavascripts,
244
            ],
245
        ]);
246
        $stylesheets = $this->container
247
            ->getDefinition('sonata.admin.pool')->getArgument(3)['stylesheets']
248
        ;
249
250
        $this->assertSame(
251
            array_merge(
252
                array_diff($this->defaultConfiguration['assets']['stylesheets'], $removeStylesheets),
253
                $extraStylesheets
254
            ),
255
            $stylesheets
256
        );
257
258
        $javascripts = $this->container->getDefinition('sonata.admin.pool')->getArgument(3)['javascripts'];
259
260
        $this->assertSame(
261
            array_merge(
262
                array_diff($this->defaultConfiguration['assets']['javascripts'], $removeJavascripts),
263
                $extraJavascripts
264
            ),
265
            $javascripts
266
        );
267
    }
268
269
    public function testDefaultTemplates(): void
270
    {
271
        $this->load();
272
273
        $this->assertSame([
274
            'user_block' => '@SonataAdmin/Core/user_block.html.twig',
275
            'add_block' => '@SonataAdmin/Core/add_block.html.twig',
276
            'layout' => '@SonataAdmin/standard_layout.html.twig',
277
            'ajax' => '@SonataAdmin/ajax_layout.html.twig',
278
            'dashboard' => '@SonataAdmin/Core/dashboard.html.twig',
279
            'search' => '@SonataAdmin/Core/search.html.twig',
280
            'list' => '@SonataAdmin/CRUD/list.html.twig',
281
            'filter' => '@SonataAdmin/Form/filter_admin_fields.html.twig',
282
            'show' => '@SonataAdmin/CRUD/show.html.twig',
283
            'show_compare' => '@SonataAdmin/CRUD/show_compare.html.twig',
284
            'edit' => '@SonataAdmin/CRUD/edit.html.twig',
285
            'preview' => '@SonataAdmin/CRUD/preview.html.twig',
286
            'history' => '@SonataAdmin/CRUD/history.html.twig',
287
            'acl' => '@SonataAdmin/CRUD/acl.html.twig',
288
            'history_revision_timestamp' => '@SonataAdmin/CRUD/history_revision_timestamp.html.twig',
289
            'action' => '@SonataAdmin/CRUD/action.html.twig',
290
            'select' => '@SonataAdmin/CRUD/list__select.html.twig',
291
            'list_block' => '@SonataAdmin/Block/block_admin_list.html.twig',
292
            'search_result_block' => '@SonataAdmin/Block/block_search_result.html.twig',
293
            'short_object_description' => '@SonataAdmin/Helper/short-object-description.html.twig',
294
            'delete' => '@SonataAdmin/CRUD/delete.html.twig',
295
            'batch' => '@SonataAdmin/CRUD/list__batch.html.twig',
296
            'batch_confirmation' => '@SonataAdmin/CRUD/batch_confirmation.html.twig',
297
            'inner_list_row' => '@SonataAdmin/CRUD/list_inner_row.html.twig',
298
            'outer_list_rows_mosaic' => '@SonataAdmin/CRUD/list_outer_rows_mosaic.html.twig',
299
            'outer_list_rows_list' => '@SonataAdmin/CRUD/list_outer_rows_list.html.twig',
300
            'outer_list_rows_tree' => '@SonataAdmin/CRUD/list_outer_rows_tree.html.twig',
301
            'base_list_field' => '@SonataAdmin/CRUD/base_list_field.html.twig',
302
            'pager_links' => '@SonataAdmin/Pager/links.html.twig',
303
            'pager_results' => '@SonataAdmin/Pager/results.html.twig',
304
            'tab_menu_template' => '@SonataAdmin/Core/tab_menu_template.html.twig',
305
            'knp_menu_template' => '@SonataAdmin/Menu/sonata_menu.html.twig',
306
            'action_create' => '@SonataAdmin/CRUD/dashboard__action_create.html.twig',
307
            'button_acl' => '@SonataAdmin/Button/acl_button.html.twig',
308
            'button_create' => '@SonataAdmin/Button/create_button.html.twig',
309
            'button_edit' => '@SonataAdmin/Button/edit_button.html.twig',
310
            'button_history' => '@SonataAdmin/Button/history_button.html.twig',
311
            'button_list' => '@SonataAdmin/Button/list_button.html.twig',
312
            'button_show' => '@SonataAdmin/Button/show_button.html.twig',
313
        ], $this->container->getParameter('sonata.admin.configuration.templates'));
314
    }
315
316
    public function testLoadIntlTemplate(): void
317
    {
318
        $bundlesWithSonataIntlBundle = array_merge($this->container->getParameter('kernel.bundles'), ['SonataIntlBundle' => true]);
319
        $this->container->setParameter('kernel.bundles', $bundlesWithSonataIntlBundle);
320
        $this->load();
321
        $templates = $this->container->getParameter('sonata.admin.configuration.templates');
322
        $this->assertSame('@SonataIntl/CRUD/history_revision_timestamp.html.twig', $templates['history_revision_timestamp']);
323
    }
324
325
    protected function getContainerExtensions(): array
326
    {
327
        return [new SonataAdminExtension()];
328
    }
329
}
330