Completed
Push — master ( 52b06e...08177a )
by
unknown
04:10 queued 10s
created

SonataMediaExtensionTest   A

Complexity

Total Complexity 24

Size/Duplication

Total Lines 288
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Importance

Changes 0
Metric Value
wmc 24
lcom 1
cbo 4
dl 0
loc 288
rs 10
c 0
b 0
f 0

19 Methods

Rating   Name   Duplication   Size   Complexity  
A setUp() 0 6 1
A testLoadWithDefaultAndCustomCategoryManager() 0 11 1
A testLoadWithForceDisableTrueAndWithCategoryManager() 0 12 1
A testLoadWithDefaultAndClassificationBundleEnable() 0 10 1
A testLoadWithDefaultAndClassificationBundleEnableAndForceDisableCategory() 0 8 1
A testLoadWithDefaultAndClassificationBundleEnableAndCustomCategoryManager() 0 11 1
A testDefaultAdapter() 0 6 1
A testAdapter() 0 9 2
A dataAdapter() 0 8 1
A testDefaultResizer() 0 12 2
A testResizer() 0 9 2
A dataResizer() 0 7 1
A testLoadWithSonataAdminDefaults() 0 9 1
A testLoadWithSonataAdminCustomConfiguration() 0 35 3
A testLoadWithFilesystemConfiguration() 0 9 1
A dataFilesystemConfiguration() 0 45 1
A testMediaPool() 0 7 1
A getMinimalConfiguration() 0 22 1
A getContainerExtensions() 0 6 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\MediaBundle\Tests\DependencyInjection;
15
16
use Imagine\Gd\Imagine as GdImagine;
17
use Imagine\Gmagick\Imagine as GmagicImagine;
18
use Imagine\Imagick\Imagine as ImagicImagine;
19
use Matthias\SymfonyDependencyInjectionTest\PhpUnit\AbstractExtensionTestCase;
20
use Sonata\MediaBundle\DependencyInjection\SonataMediaExtension;
21
use Sonata\MediaBundle\Model\CategoryManager;
22
use Sonata\MediaBundle\Resizer\SimpleResizer;
23
use Sonata\MediaBundle\Resizer\SquareResizer;
24
use Symfony\Component\DependencyInjection\ContainerBuilder;
25
use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
26
27
class SonataMediaExtensionTest extends AbstractExtensionTestCase
28
{
29
    /**
30
     * {@inheritdoc}
31
     */
32
    protected function setUp(): void
33
    {
34
        parent::setUp();
35
36
        $this->container->setParameter('kernel.bundles', ['SonataAdminBundle' => true]);
37
    }
38
39
    public function testLoadWithDefaultAndCustomCategoryManager(): void
40
    {
41
        $this->load([
42
            'class' => [
43
                'category' => \stdClass::class,
44
            ],
45
            'category_manager' => 'dummy.service.name',
46
        ]);
47
48
        $this->assertContainerBuilderHasAlias('sonata.media.manager.category', 'dummy.service.name');
49
    }
50
51
    public function testLoadWithForceDisableTrueAndWithCategoryManager(): void
52
    {
53
        $this->load([
54
            'class' => [
55
                'category' => \stdClass::class,
56
            ],
57
            'category_manager' => 'dummy.service.name',
58
            'force_disable_category' => true,
59
        ]);
60
61
        $this->assertContainerBuilderNotHasService('sonata.media.manager.category');
62
    }
63
64
    public function testLoadWithDefaultAndClassificationBundleEnable(): void
65
    {
66
        $this->load();
67
68
        $this->assertContainerBuilderHasAlias('sonata.media.manager.category');
69
        $this->assertContainerBuilderHasService(
70
            'sonata.media.manager.category.default',
71
            CategoryManager::class
72
        );
73
    }
74
75
    public function testLoadWithDefaultAndClassificationBundleEnableAndForceDisableCategory(): void
76
    {
77
        $this->load([
78
            'force_disable_category' => true,
79
        ]);
80
81
        $this->assertContainerBuilderNotHasService('sonata.media.manager.category');
82
    }
83
84
    public function testLoadWithDefaultAndClassificationBundleEnableAndCustomCategoryManager(): void
85
    {
86
        $this->load([
87
            'class' => [
88
                'category' => \stdClass::class,
89
            ],
90
            'category_manager' => 'dummy.service.name',
91
        ]);
92
93
        $this->assertContainerBuilderHasAlias('sonata.media.manager.category', 'dummy.service.name');
94
    }
95
96
    public function testDefaultAdapter(): void
97
    {
98
        $this->load();
99
100
        $this->assertContainerBuilderHasAlias('sonata.media.adapter.image.default', 'sonata.media.adapter.image.gd');
101
    }
102
103
    /**
104
     * @param string $serviceId
105
     * @param string $extension
106
     * @param string $type
107
     *
108
     * @dataProvider dataAdapter
109
     */
110
    public function testAdapter($serviceId, $extension, $type): void
111
    {
112
        $this->load();
113
114
        $this->assertContainerBuilderHasService($serviceId);
115
        if (\extension_loaded($extension)) {
116
            $this->isInstanceOf($type, $this->container->get($serviceId));
117
        }
118
    }
119
120
    public function dataAdapter()
121
    {
122
        return [
123
            ['sonata.media.adapter.image.gd', 'gd', GdImagine::class],
124
            ['sonata.media.adapter.image.gmagick', 'gmagick', GmagicImagine::class],
125
            ['sonata.media.adapter.image.imagick', 'imagick', ImagicImagine::class],
126
        ];
127
    }
128
129
    public function testDefaultResizer(): void
130
    {
131
        $this->load();
132
133
        $this->assertContainerBuilderHasAlias('sonata.media.resizer.default', 'sonata.media.resizer.simple');
134
        if (\extension_loaded('gd')) {
135
            $this->assertContainerBuilderHasService(
136
                'sonata.media.resizer.default',
137
                SimpleResizer::class
138
            );
139
        }
140
    }
141
142
    /**
143
     * @param $serviceId
144
     * @param $type
145
     *
146
     * @dataProvider dataResizer
147
     */
148
    public function testResizer($serviceId, $type): void
149
    {
150
        $this->load();
151
152
        $this->assertContainerBuilderHasService($serviceId);
153
        if (\extension_loaded('gd')) {
154
            $this->isInstanceOf($type, $this->container->get($serviceId));
155
        }
156
    }
157
158
    public function dataResizer()
159
    {
160
        return [
161
            ['sonata.media.resizer.simple', SimpleResizer::class],
162
            ['sonata.media.resizer.square', SquareResizer::class],
163
        ];
164
    }
165
166
    public function testLoadWithSonataAdminDefaults(): void
167
    {
168
        $this->load();
169
170
        $this->assertEquals(
171
            $this->container->getDefinition('sonata.media.security.superadmin_strategy')->getArgument(2),
172
            ['ROLE_ADMIN', 'ROLE_SUPER_ADMIN']
173
        );
174
    }
175
176
    public function testLoadWithSonataAdminCustomConfiguration(): void
177
    {
178
        $fakeContainer = $this->getMockBuilder(ContainerBuilder::class)
179
            ->setMethods(['getParameter', 'getExtensionConfig'])
180
            ->getMock();
181
182
        $fakeContainer->expects($this->once())
183
            ->method('getParameter')
184
            ->with($this->equalTo('kernel.bundles'))
185
            ->willReturn($this->container->getParameter('kernel.bundles'));
186
187
        $fakeContainer->expects($this->once())
188
            ->method('getExtensionConfig')
189
            ->with($this->equalTo('sonata_admin'))
190
            ->willReturn([[
191
                'security' => [
192
                    'role_admin' => 'ROLE_FOO',
193
                    'role_super_admin' => 'ROLE_BAR',
194
                ],
195
            ]]);
196
197
        $configs = [$this->getMinimalConfiguration()];
198
        foreach ($this->getContainerExtensions() as $extension) {
199
            if ($extension instanceof PrependExtensionInterface) {
200
                $extension->prepend($fakeContainer);
201
            }
202
203
            $extension->load($configs, $this->container);
204
        }
205
206
        $this->assertEquals(
207
            $this->container->getDefinition('sonata.media.security.superadmin_strategy')->getArgument(2),
208
            ['ROLE_FOO', 'ROLE_BAR']
209
        );
210
    }
211
212
    /**
213
     * @param $configs
214
     * @param $args
215
     *
216
     * @dataProvider dataFilesystemConfiguration
217
     */
218
    public function testLoadWithFilesystemConfiguration($configs, $args): void
219
    {
220
        $this->load($configs);
221
222
        $this->assertEquals(
223
            $this->container->getDefinition('sonata.media.adapter.service.s3')->getArgument(0),
224
            $args
225
        );
226
    }
227
228
    public function dataFilesystemConfiguration()
229
    {
230
        return [
231
            [
232
                [
233
                    'filesystem' => [
234
                        's3' => [
235
                            'bucket' => 'bucket_name',
236
                            'sdk_version' => 3,
237
                            'region' => 'region',
238
                            'version' => 'version',
239
                            'secretKey' => null,
240
                            'accessKey' => null,
241
                        ],
242
                    ],
243
                ],
244
                [
245
                    'region' => 'region',
246
                    'version' => 'version',
247
                ],
248
            ],
249
            [
250
                [
251
                    'filesystem' => [
252
                        's3' => [
253
                            'bucket' => 'bucket_name',
254
                            'sdk_version' => 3,
255
                            'region' => 'region',
256
                            'version' => 'version',
257
                            'secretKey' => 'secret',
258
                            'accessKey' => 'access',
259
                        ],
260
                    ],
261
                ],
262
                [
263
                    'credentials' => [
264
                        'secret' => 'secret',
265
                        'key' => 'access',
266
                    ],
267
                    'region' => 'region',
268
                    'version' => 'version',
269
                ],
270
            ],
271
        ];
272
    }
273
274
    public function testMediaPool()
275
    {
276
        $this->load();
277
278
        $this->assertContainerBuilderHasService('sonata.media.pool');
279
        $this->assertContainerBuilderHasAlias('%sonata.media.pool.class%', 'sonata.media.pool');
280
    }
281
282
    protected function getMinimalConfiguration()
283
    {
284
        return [
285
            'default_context' => 'default',
286
            'db_driver' => 'doctrine_orm',
287
            'contexts' => [
288
                'default' => [
289
                    'formats' => [
290
                        'small' => [
291
                            'width' => 100,
292
                            'quality' => 50,
293
                        ],
294
                    ],
295
                ],
296
            ],
297
            'filesystem' => [
298
                'local' => [
299
                    'directory' => '/tmp/',
300
                ],
301
            ],
302
        ];
303
    }
304
305
    /**
306
     * {@inheritdoc}
307
     */
308
    protected function getContainerExtensions()
309
    {
310
        return [
311
            new SonataMediaExtension(),
312
        ];
313
    }
314
}
315