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