Completed
Push — master ( 9c45fe...2e51e7 )
by
unknown
29:13 queued 13:18
created

testSiteAccessNoConfiguration()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 0
dl 0
loc 9
rs 9.9666
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * File containing the EzPublishCoreExtensionTest class.
5
 *
6
 * @copyright Copyright (C) eZ Systems AS. All rights reserved.
7
 * @license For full copyright and license information view LICENSE file distributed with this source code.
8
 */
9
namespace eZ\Bundle\EzPublishCoreBundle\Tests\DependencyInjection;
10
11
use eZ\Bundle\EzPublishCoreBundle\DependencyInjection\Configuration\Parser\Common;
12
use eZ\Bundle\EzPublishCoreBundle\DependencyInjection\Configuration\Parser\Content;
13
use eZ\Bundle\EzPublishCoreBundle\DependencyInjection\EzPublishCoreExtension;
14
use eZ\Bundle\EzPublishCoreBundle\Tests\DependencyInjection\Stub\StubPolicyProvider;
15
use Matthias\SymfonyDependencyInjectionTest\PhpUnit\AbstractExtensionTestCase;
16
use Symfony\Component\DependencyInjection\Definition;
17
use Symfony\Component\Yaml\Yaml;
18
use ReflectionObject;
19
20
class EzPublishCoreExtensionTest extends AbstractExtensionTestCase
21
{
22
    private $minimalConfig = [];
23
24
    private $siteaccessConfig = [];
25
26
    /** @var \eZ\Bundle\EzPublishCoreBundle\DependencyInjection\EzPublishCoreExtension */
27
    private $extension;
28
29
    protected function setUp(): void
30
    {
31
        $this->extension = new EzPublishCoreExtension();
32
        $this->siteaccessConfig = [
33
            'siteaccess' => [
34
                'default_siteaccess' => 'ezdemo_site',
35
                'list' => ['ezdemo_site', 'eng', 'fre', 'ezdemo_site_admin'],
36
                'groups' => [
37
                    'ezdemo_group' => ['ezdemo_site', 'eng', 'fre', 'ezdemo_site_admin'],
38
                    'ezdemo_frontend_group' => ['ezdemo_site', 'eng', 'fre'],
39
                ],
40
                'match' => [
41
                    'URILElement' => 1,
42
                    'Map\URI' => ['the_front' => 'ezdemo_site', 'the_back' => 'ezdemo_site_admin'],
43
                ],
44
            ],
45
            'system' => [
46
                'ezdemo_site' => [],
47
                'eng' => [],
48
                'fre' => [],
49
                'ezdemo_site_admin' => [],
50
            ],
51
        ];
52
53
        parent::setUp();
54
    }
55
56
    protected function getContainerExtensions(): array
57
    {
58
        return [$this->extension];
59
    }
60
61
    protected function getMinimalConfiguration(): array
62
    {
63
        return $this->minimalConfig = Yaml::parse(file_get_contents(__DIR__ . '/Fixtures/ezpublish_minimal_no_siteaccess.yml'));
0 ignored issues
show
Documentation Bug introduced by
It seems like \Symfony\Component\Yaml\...al_no_siteaccess.yml')) of type * is incompatible with the declared type array of property $minimalConfig.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
64
    }
65
66
    public function testSiteAccessConfiguration()
67
    {
68
        // Injecting needed config parsers.
69
        $refExtension = new ReflectionObject($this->extension);
70
        $refMethod = $refExtension->getMethod('getMainConfigParser');
71
        $refMethod->setAccessible(true);
72
        $refMethod->invoke($this->extension);
73
        $refParser = $refExtension->getProperty('mainConfigParser');
74
        $refParser->setAccessible(true);
75
        /** @var \eZ\Bundle\EzPublishCoreBundle\DependencyInjection\Configuration\ConfigParser $parser */
76
        $parser = $refParser->getValue($this->extension);
77
        $parser->setConfigParsers([new Common(), new Content()]);
78
79
        $this->load($this->siteaccessConfig);
80
        $this->assertContainerBuilderHasParameter(
81
            'ezpublish.siteaccess.list',
82
            $this->siteaccessConfig['siteaccess']['list']
83
        );
84
        $this->assertContainerBuilderHasParameter(
85
            'ezpublish.siteaccess.default',
86
            $this->siteaccessConfig['siteaccess']['default_siteaccess']
87
        );
88
        $this->assertContainerBuilderHasParameter('ezpublish.siteaccess.groups', $this->siteaccessConfig['siteaccess']['groups']);
89
90
        $expectedMatchingConfig = [];
91
        foreach ($this->siteaccessConfig['siteaccess']['match'] as $key => $val) {
92
            // Value is expected to always be an array (transformed by semantic configuration parser).
93
            $expectedMatchingConfig[$key] = is_array($val) ? $val : ['value' => $val];
94
        }
95
        $this->assertContainerBuilderHasParameter('ezpublish.siteaccess.match_config', $expectedMatchingConfig);
96
97
        $groupsBySiteaccess = [];
98 View Code Duplication
        foreach ($this->siteaccessConfig['siteaccess']['groups'] as $groupName => $groupMembers) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
99
            foreach ($groupMembers as $member) {
100
                if (!isset($groupsBySiteaccess[$member])) {
101
                    $groupsBySiteaccess[$member] = [];
102
                }
103
104
                $groupsBySiteaccess[$member][] = $groupName;
105
            }
106
        }
107
        $this->assertContainerBuilderHasParameter('ezpublish.siteaccess.groups_by_siteaccess', $groupsBySiteaccess);
108
109
        $relatedSiteAccesses = ['ezdemo_site', 'eng', 'fre', 'ezdemo_site_admin'];
110
        $this->assertContainerBuilderHasParameter(
111
            'ezpublish.siteaccess.relation_map',
112
            [
113
                // Empty string is the default repository name
114
                '' => [
115
                    // 2 is the default rootLocationId
116
                    2 => $relatedSiteAccesses,
117
                ],
118
            ]
119
        );
120
121
        $this->assertContainerBuilderHasParameter('ezsettings.ezdemo_site.related_siteaccesses', $relatedSiteAccesses);
122
        $this->assertContainerBuilderHasParameter('ezsettings.eng.related_siteaccesses', $relatedSiteAccesses);
123
        $this->assertContainerBuilderHasParameter('ezsettings.fre.related_siteaccesses', $relatedSiteAccesses);
124
    }
125
126
    public function testSiteAccessNoConfiguration()
127
    {
128
        $this->load();
129
        $this->assertContainerBuilderHasParameter('ezpublish.siteaccess.list', ['setup']);
130
        $this->assertContainerBuilderHasParameter('ezpublish.siteaccess.default', 'setup');
131
        $this->assertContainerBuilderHasParameter('ezpublish.siteaccess.groups', []);
132
        $this->assertContainerBuilderHasParameter('ezpublish.siteaccess.groups_by_siteaccess', []);
133
        $this->assertContainerBuilderHasParameter('ezpublish.siteaccess.match_config', null);
134
    }
135
136
    public function testImageMagickConfigurationBasic()
137
    {
138 View Code Duplication
        if (!isset($_ENV['imagemagickConvertPath']) || !is_executable($_ENV['imagemagickConvertPath'])) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
139
            $this->markTestSkipped('Missing or mis-configured Imagemagick convert path.');
140
        }
141
142
        $this->load(
143
            [
144
                'imagemagick' => [
145
                    'enabled' => true,
146
                    'path' => $_ENV['imagemagickConvertPath'],
147
                ],
148
            ]
149
        );
150
        $this->assertContainerBuilderHasParameter('ezpublish.image.imagemagick.enabled', true);
151
        $this->assertContainerBuilderHasParameter('ezpublish.image.imagemagick.executable_path', dirname($_ENV['imagemagickConvertPath']));
152
        $this->assertContainerBuilderHasParameter('ezpublish.image.imagemagick.executable', basename($_ENV['imagemagickConvertPath']));
153
    }
154
155
    public function testImageMagickConfigurationFilters()
156
    {
157 View Code Duplication
        if (!isset($_ENV['imagemagickConvertPath']) || !is_executable($_ENV['imagemagickConvertPath'])) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
158
            $this->markTestSkipped('Missing or mis-configured Imagemagick convert path.');
159
        }
160
161
        $customFilters = [
162
            'foobar' => '-foobar',
163
            'wow' => '-amazing',
164
        ];
165
        $this->load(
166
            [
167
                'imagemagick' => [
168
                    'enabled' => true,
169
                    'path' => $_ENV['imagemagickConvertPath'],
170
                    'filters' => $customFilters,
171
                ],
172
            ]
173
        );
174
        $this->assertTrue($this->container->hasParameter('ezpublish.image.imagemagick.filters'));
175
        $filters = $this->container->getParameter('ezpublish.image.imagemagick.filters');
176
        $this->assertArrayHasKey('foobar', $filters);
177
        $this->assertSame($customFilters['foobar'], $filters['foobar']);
178
        $this->assertArrayHasKey('wow', $filters);
179
        $this->assertSame($customFilters['wow'], $filters['wow']);
180
    }
181
182
    public function testImagePlaceholderConfiguration()
183
    {
184
        $this->load([
185
            'image_placeholder' => [
186
                'default' => [
187
                    'provider' => 'generic',
188
                    'options' => [
189
                        'foo' => 'Foo',
190
                        'bar' => 'Bar',
191
                    ],
192
                ],
193
                'fancy' => [
194
                    'provider' => 'remote',
195
                ],
196
            ],
197
        ]);
198
199
        $this->assertEquals([
200
            'default' => [
201
                'provider' => 'generic',
202
                'options' => [
203
                    'foo' => 'Foo',
204
                    'bar' => 'Bar',
205
                ],
206
            ],
207
            'fancy' => [
208
                'provider' => 'remote',
209
                'options' => [],
210
            ],
211
        ], $this->container->getParameter('image_alias.placeholder_providers'));
212
    }
213
214
    public function testRoutingConfiguration()
215
    {
216
        $this->load();
217
        $this->assertContainerBuilderHasAlias('router', 'ezpublish.chain_router');
218
219
        $this->assertTrue($this->container->hasParameter('ezpublish.default_router.non_siteaccess_aware_routes'));
220
        $nonSiteaccessAwareRoutes = $this->container->getParameter('ezpublish.default_router.non_siteaccess_aware_routes');
221
        // See ezpublish_minimal_no_siteaccess.yml fixture
222
        $this->assertContains('foo_route', $nonSiteaccessAwareRoutes);
223
        $this->assertContains('my_prefix_', $nonSiteaccessAwareRoutes);
224
    }
225
226
    /**
227
     * @dataProvider cacheConfigurationProvider
228
     *
229
     * @param array $customCacheConfig
230
     * @param string $expectedPurgeType
231
     */
232
    public function testCacheConfiguration(array $customCacheConfig, $expectedPurgeType)
233
    {
234
        $this->load($customCacheConfig);
235
236
        $this->assertContainerBuilderHasParameter('ezpublish.http_cache.purge_type', $expectedPurgeType);
237
    }
238
239
    public function cacheConfigurationProvider()
240
    {
241
        return [
242
            [[], 'local'],
243
            [
244
                [
245
                    'http_cache' => ['purge_type' => 'local'],
246
                ],
247
                'local',
248
            ],
249
            [
250
                [
251
                    'http_cache' => ['purge_type' => 'multiple_http'],
252
                ],
253
                'http',
254
            ],
255
            [
256
                [
257
                    'http_cache' => ['purge_type' => 'single_http'],
258
                ],
259
                'http',
260
            ],
261
            [
262
                [
263
                    'http_cache' => ['purge_type' => 'http'],
264
                ],
265
                'http',
266
            ],
267
        ];
268
    }
269
270
    public function testCacheConfigurationCustomPurgeService()
271
    {
272
        $serviceId = 'foobar';
273
        $this->setDefinition($serviceId, new Definition());
274
        $this->load(
275
            [
276
                'http_cache' => ['purge_type' => 'foobar', 'timeout' => 12],
277
            ]
278
        );
279
280
        $this->assertContainerBuilderHasParameter('ezpublish.http_cache.purge_type', 'foobar');
281
    }
282
283
    public function testLocaleConfiguration()
284
    {
285
        $this->load(['locale_conversion' => ['foo' => 'bar']]);
286
        $conversionMap = $this->container->getParameter('ezpublish.locale.conversion_map');
287
        $this->assertArrayHasKey('foo', $conversionMap);
288
        $this->assertSame('bar', $conversionMap['foo']);
289
    }
290
291
    public function testRepositoriesConfiguration()
292
    {
293
        $repositories = [
294
            'main' => [
295
                'storage' => [
296
                    'engine' => 'legacy',
297
                    'connection' => 'default',
298
                ],
299
                'search' => [
300
                    'engine' => 'legacy',
301
                    'connection' => 'blabla',
302
                ],
303
                'fields_groups' => [
304
                    'list' => ['content', 'metadata'],
305
                    'default' => '%ezsettings.default.content.field_groups.default%',
306
                ],
307
                'options' => [
308
                    'default_version_archive_limit' => 5,
309
                ],
310
            ],
311
            'foo' => [
312
                'storage' => [
313
                    'engine' => 'sqlng',
314
                    'connection' => 'default',
315
                ],
316
                'search' => [
317
                    'engine' => 'solr',
318
                    'connection' => 'lalala',
319
                ],
320
                'fields_groups' => [
321
                    'list' => ['content', 'metadata'],
322
                    'default' => '%ezsettings.default.content.field_groups.default%',
323
                ],
324
                'options' => [
325
                    'default_version_archive_limit' => 5,
326
                ],
327
            ],
328
        ];
329
        $this->load(['repositories' => $repositories]);
330
        $this->assertTrue($this->container->hasParameter('ezpublish.repositories'));
331
332
        foreach ($repositories as &$repositoryConfig) {
333
            $repositoryConfig['storage']['config'] = [];
334
            $repositoryConfig['search']['config'] = [];
335
        }
336
        $this->assertSame($repositories, $this->container->getParameter('ezpublish.repositories'));
337
    }
338
339
    /**
340
     * @dataProvider repositoriesConfigurationFieldGroupsProvider
341
     */
342
    public function testRepositoriesConfigurationFieldGroups($repositories, $expectedRepositories)
343
    {
344
        $this->load(['repositories' => $repositories]);
345
        $this->assertTrue($this->container->hasParameter('ezpublish.repositories'));
346
347
        $repositoriesPar = $this->container->getParameter('ezpublish.repositories');
348
        $this->assertEquals(count($repositories), count($repositoriesPar));
349
350
        foreach ($repositoriesPar as $key => $repo) {
351
            $this->assertArrayHasKey($key, $expectedRepositories);
352
            $this->assertArrayHasKey('fields_groups', $repo);
353
            $this->assertEqualsCanonicalizing($expectedRepositories[$key]['fields_groups'], $repo['fields_groups'], 'Invalid fields groups element');
354
        }
355
    }
356
357
    public function repositoriesConfigurationFieldGroupsProvider()
358
    {
359
        return [
360
            //empty config
361
            [
362
                ['main' => null],
363
                ['main' => [
364
                        'fields_groups' => [
365
                            'list' => ['content', 'metadata'],
366
                            'default' => '%ezsettings.default.content.field_groups.default%',
367
                        ],
368
                    ],
369
                ],
370
            ],
371
            //single item with custom fields
372
            [
373
                ['foo' => [
374
                        'fields_groups' => [
375
                            'list' => ['bar', 'baz', 'john'],
376
                            'default' => 'bar',
377
                        ],
378
                    ],
379
                ],
380
                ['foo' => [
381
                        'fields_groups' => [
382
                            'list' => ['bar', 'baz', 'john'],
383
                            'default' => 'bar',
384
                        ],
385
                    ],
386
                ],
387
            ],
388
            //mixed item with custom config and empty item
389
            [
390
                [
391
                    'foo' => [
392
                        'fields_groups' => [
393
                            'list' => ['bar', 'baz', 'john', 'doe'],
394
                            'default' => 'bar',
395
                        ],
396
                    ],
397
                    'anotherone' => null,
398
                ],
399
                [
400
                    'foo' => [
401
                        'fields_groups' => [
402
                            'list' => ['bar', 'baz', 'john', 'doe'],
403
                            'default' => 'bar',
404
                        ],
405
                    ],
406
                    'anotherone' => [
407
                        'fields_groups' => [
408
                            'list' => ['content', 'metadata'],
409
                            'default' => '%ezsettings.default.content.field_groups.default%',
410
                        ],
411
                    ],
412
                ],
413
            ],
414
            //items with only one field configured
415
            [
416
                [
417
                    'foo' => [
418
                        'fields_groups' => [
419
                            'list' => ['bar', 'baz', 'john'],
420
                        ],
421
                    ],
422
                    'bar' => [
423
                        'fields_groups' => [
424
                            'default' => 'metadata',
425
                        ],
426
                    ],
427
                ],
428
                [
429
                    'foo' => [
430
                        'fields_groups' => [
431
                            'list' => ['bar', 'baz', 'john'],
432
                            'default' => '%ezsettings.default.content.field_groups.default%',
433
                        ],
434
                    ],
435
                    'bar' => [
436
                        'fields_groups' => [
437
                            'list' => ['content', 'metadata'],
438
                            'default' => 'metadata',
439
                        ],
440
                    ],
441
                ],
442
            ],
443
            //two different repositories
444
            [
445
                [
446
                    'foo' => [
447
                        'fields_groups' => [
448
                            'list' => ['bar', 'baz', 'john', 'doe'],
449
                            'default' => 'bar',
450
                        ],
451
                    ],
452
                    'bar' => [
453
                        'fields_groups' => [
454
                            'list' => ['lorem', 'ipsum'],
455
                            'default' => 'lorem',
456
                        ],
457
                    ],
458
                ],
459
                [
460
                    'foo' => [
461
                        'fields_groups' => [
462
                            'list' => ['bar', 'baz', 'john', 'doe'],
463
                            'default' => 'bar',
464
                        ],
465
                    ],
466
                    'bar' => [
467
                        'fields_groups' => [
468
                            'list' => ['lorem', 'ipsum'],
469
                            'default' => 'lorem',
470
                        ],
471
                    ],
472
                ],
473
            ],
474
        ];
475
    }
476
477
    public function testRepositoriesConfigurationEmpty()
478
    {
479
        $repositories = [
480
            'main' => null,
481
        ];
482
        $expectedRepositories = [
483
            'main' => [
484
                'storage' => [
485
                    'engine' => '%ezpublish.api.storage_engine.default%',
486
                    'connection' => null,
487
                    'config' => [],
488
                ],
489
                'search' => [
490
                    'engine' => '%ezpublish.api.search_engine.default%',
491
                    'connection' => null,
492
                    'config' => [],
493
                ],
494
                'fields_groups' => [
495
                    'list' => ['content', 'metadata'],
496
                    'default' => '%ezsettings.default.content.field_groups.default%',
497
                ],
498
                'options' => [
499
                    'default_version_archive_limit' => 5,
500
                ],
501
            ],
502
        ];
503
        $this->load(['repositories' => $repositories]);
504
        $this->assertTrue($this->container->hasParameter('ezpublish.repositories'));
505
506
        $this->assertSame(
507
            $expectedRepositories,
508
            $this->container->getParameter('ezpublish.repositories')
509
        );
510
    }
511
512 View Code Duplication
    public function testRepositoriesConfigurationStorageEmpty()
513
    {
514
        $repositories = [
515
            'main' => [
516
                'search' => [
517
                    'engine' => 'fantasticfind',
518
                    'connection' => 'french',
519
                ],
520
            ],
521
        ];
522
        $expectedRepositories = [
523
            'main' => [
524
                'search' => [
525
                    'engine' => 'fantasticfind',
526
                    'connection' => 'french',
527
                    'config' => [],
528
                ],
529
                'storage' => [
530
                    'engine' => '%ezpublish.api.storage_engine.default%',
531
                    'connection' => null,
532
                    'config' => [],
533
                ],
534
                'fields_groups' => [
535
                    'list' => ['content', 'metadata'],
536
                    'default' => '%ezsettings.default.content.field_groups.default%',
537
                ],
538
                'options' => [
539
                    'default_version_archive_limit' => 5,
540
                ],
541
            ],
542
        ];
543
        $this->load(['repositories' => $repositories]);
544
        $this->assertTrue($this->container->hasParameter('ezpublish.repositories'));
545
546
        $this->assertSame(
547
            $expectedRepositories,
548
            $this->container->getParameter('ezpublish.repositories')
549
        );
550
    }
551
552 View Code Duplication
    public function testRepositoriesConfigurationSearchEmpty()
553
    {
554
        $repositories = [
555
            'main' => [
556
                'storage' => [
557
                    'engine' => 'persistentprudence',
558
                    'connection' => 'yes',
559
                ],
560
            ],
561
        ];
562
        $expectedRepositories = [
563
            'main' => [
564
                'storage' => [
565
                    'engine' => 'persistentprudence',
566
                    'connection' => 'yes',
567
                    'config' => [],
568
                ],
569
                'search' => [
570
                    'engine' => '%ezpublish.api.search_engine.default%',
571
                    'connection' => null,
572
                    'config' => [],
573
                ],
574
                'fields_groups' => [
575
                    'list' => ['content', 'metadata'],
576
                    'default' => '%ezsettings.default.content.field_groups.default%',
577
                ],
578
                'options' => [
579
                    'default_version_archive_limit' => 5,
580
                ],
581
            ],
582
        ];
583
        $this->load(['repositories' => $repositories]);
584
        $this->assertTrue($this->container->hasParameter('ezpublish.repositories'));
585
586
        $this->assertSame(
587
            $expectedRepositories,
588
            $this->container->getParameter('ezpublish.repositories')
589
        );
590
    }
591
592
    public function testRepositoriesConfigurationCompatibility()
593
    {
594
        $repositories = [
595
            'main' => [
596
                'engine' => 'legacy',
597
                'connection' => 'default',
598
                'search' => [
599
                    'engine' => 'legacy',
600
                    'connection' => 'blabla',
601
                ],
602
            ],
603
            'foo' => [
604
                'engine' => 'sqlng',
605
                'connection' => 'default',
606
                'search' => [
607
                    'engine' => 'solr',
608
                    'connection' => 'lalala',
609
                ],
610
            ],
611
        ];
612
        $expectedRepositories = [
613
            'main' => [
614
                'search' => [
615
                    'engine' => 'legacy',
616
                    'connection' => 'blabla',
617
                    'config' => [],
618
                ],
619
                'storage' => [
620
                    'engine' => 'legacy',
621
                    'connection' => 'default',
622
                    'config' => [],
623
                ],
624
                'fields_groups' => [
625
                    'list' => ['content', 'metadata'],
626
                    'default' => '%ezsettings.default.content.field_groups.default%',
627
                ],
628
                'options' => [
629
                    'default_version_archive_limit' => 5,
630
                ],
631
            ],
632
            'foo' => [
633
                'search' => [
634
                    'engine' => 'solr',
635
                    'connection' => 'lalala',
636
                    'config' => [],
637
                ],
638
                'storage' => [
639
                    'engine' => 'sqlng',
640
                    'connection' => 'default',
641
                    'config' => [],
642
                ],
643
                'fields_groups' => [
644
                    'list' => ['content', 'metadata'],
645
                    'default' => '%ezsettings.default.content.field_groups.default%',
646
                ],
647
                'options' => [
648
                    'default_version_archive_limit' => 5,
649
                ],
650
            ],
651
        ];
652
        $this->load(['repositories' => $repositories]);
653
        $this->assertTrue($this->container->hasParameter('ezpublish.repositories'));
654
655
        $this->assertSame(
656
            $expectedRepositories,
657
            $this->container->getParameter('ezpublish.repositories')
658
        );
659
    }
660
661 View Code Duplication
    public function testRepositoriesConfigurationCompatibility2()
662
    {
663
        $repositories = [
664
            'main' => [
665
                'engine' => 'legacy',
666
                'connection' => 'default',
667
            ],
668
        ];
669
        $expectedRepositories = [
670
            'main' => [
671
                'storage' => [
672
                    'engine' => 'legacy',
673
                    'connection' => 'default',
674
                    'config' => [],
675
                ],
676
                'search' => [
677
                    'engine' => '%ezpublish.api.search_engine.default%',
678
                    'connection' => null,
679
                    'config' => [],
680
                ],
681
                'fields_groups' => [
682
                    'list' => ['content', 'metadata'],
683
                    'default' => '%ezsettings.default.content.field_groups.default%',
684
                ],
685
                'options' => [
686
                    'default_version_archive_limit' => 5,
687
                ],
688
            ],
689
        ];
690
        $this->load(['repositories' => $repositories]);
691
        $this->assertTrue($this->container->hasParameter('ezpublish.repositories'));
692
693
        $this->assertSame(
694
            $expectedRepositories,
695
            $this->container->getParameter('ezpublish.repositories')
696
        );
697
    }
698
699
    public function testRelatedSiteAccesses()
700
    {
701
        $mainRepo = 'main';
702
        $fooRepo = 'foo';
703
        $rootLocationId1 = 123;
704
        $rootLocationId2 = 456;
705
        $rootLocationId3 = 2;
706
        $config = [
707
            'siteaccess' => [
708
                'default_siteaccess' => 'ezdemo_site',
709
                'list' => ['ezdemo_site', 'eng', 'fre', 'ezdemo_site2', 'eng2', 'ezdemo_site3', 'fre3'],
710
                'groups' => [
711
                    'ezdemo_group' => ['ezdemo_site', 'eng', 'fre'],
712
                    'ezdemo_group2' => ['ezdemo_site2', 'eng2'],
713
                    'ezdemo_group3' => ['ezdemo_site3', 'fre3'],
714
                ],
715
                'match' => [],
716
            ],
717
            'repositories' => [
718
                $mainRepo => ['engine' => 'legacy', 'connection' => 'default'],
719
                $fooRepo => ['engine' => 'bar', 'connection' => 'blabla'],
720
            ],
721
            'system' => [
722
                'ezdemo_group' => [
723
                    'repository' => $mainRepo,
724
                    'content' => [
725
                        'tree_root' => ['location_id' => $rootLocationId1],
726
                    ],
727
                ],
728
                'ezdemo_group2' => [
729
                    'repository' => $mainRepo,
730
                    'content' => [
731
                        'tree_root' => ['location_id' => $rootLocationId2],
732
                    ],
733
                ],
734
                'ezdemo_group3' => [
735
                    'repository' => $fooRepo,
736
                ],
737
            ],
738
        ] + $this->siteaccessConfig;
739
740
        // Injecting needed config parsers.
741
        $refExtension = new ReflectionObject($this->extension);
742
        $refMethod = $refExtension->getMethod('getMainConfigParser');
743
        $refMethod->setAccessible(true);
744
        $refMethod->invoke($this->extension);
745
        $refParser = $refExtension->getProperty('mainConfigParser');
746
        $refParser->setAccessible(true);
747
        /** @var \eZ\Bundle\EzPublishCoreBundle\DependencyInjection\Configuration\ConfigParser $parser */
748
        $parser = $refParser->getValue($this->extension);
749
        $parser->setConfigParsers([new Common(), new Content()]);
750
751
        $this->load($config);
752
753
        $relatedSiteAccesses1 = ['ezdemo_site', 'eng', 'fre'];
754
        $relatedSiteAccesses2 = ['ezdemo_site2', 'eng2'];
755
        $relatedSiteAccesses3 = ['ezdemo_site3', 'fre3'];
756
        $expectedRelationMap = [
757
            $mainRepo => [
758
                $rootLocationId1 => $relatedSiteAccesses1,
759
                $rootLocationId2 => $relatedSiteAccesses2,
760
            ],
761
            $fooRepo => [
762
                $rootLocationId3 => $relatedSiteAccesses3,
763
            ],
764
        ];
765
        $this->assertContainerBuilderHasParameter('ezpublish.siteaccess.relation_map', $expectedRelationMap);
766
767
        $this->assertContainerBuilderHasParameter('ezsettings.ezdemo_site.related_siteaccesses', $relatedSiteAccesses1);
768
        $this->assertContainerBuilderHasParameter('ezsettings.eng.related_siteaccesses', $relatedSiteAccesses1);
769
        $this->assertContainerBuilderHasParameter('ezsettings.fre.related_siteaccesses', $relatedSiteAccesses1);
770
771
        $this->assertContainerBuilderHasParameter('ezsettings.ezdemo_site2.related_siteaccesses', $relatedSiteAccesses2);
772
        $this->assertContainerBuilderHasParameter('ezsettings.eng2.related_siteaccesses', $relatedSiteAccesses2);
773
774
        $this->assertContainerBuilderHasParameter('ezsettings.ezdemo_site3.related_siteaccesses', $relatedSiteAccesses3);
775
        $this->assertContainerBuilderHasParameter('ezsettings.fre3.related_siteaccesses', $relatedSiteAccesses3);
776
    }
777
778
    public function testRegisteredPolicies()
779
    {
780
        $this->load();
781
        self::assertContainerBuilderHasParameter('ezpublish.api.role.policy_map');
782
        $previousPolicyMap = $this->container->getParameter('ezpublish.api.role.policy_map');
783
784
        $policies1 = [
785
            'custom_module' => [
786
                'custom_function_1' => null,
787
                'custom_function_2' => ['CustomLimitation'],
788
            ],
789
            'helloworld' => [
790
                'foo' => ['bar'],
791
                'baz' => null,
792
            ],
793
        ];
794
        $this->extension->addPolicyProvider(new StubPolicyProvider($policies1));
795
796
        $policies2 = [
797
            'custom_module2' => [
798
                'custom_function_3' => null,
799
                'custom_function_4' => ['CustomLimitation2', 'CustomLimitation3'],
800
            ],
801
            'helloworld' => [
802
                'foo' => ['additional_limitation'],
803
                'some' => ['thingy', 'thing', 'but', 'wait'],
804
            ],
805
        ];
806
        $this->extension->addPolicyProvider(new StubPolicyProvider($policies2));
807
808
        $expectedPolicies = [
809
            'custom_module' => [
810
                'custom_function_1' => [],
811
                'custom_function_2' => ['CustomLimitation' => true],
812
            ],
813
            'helloworld' => [
814
                'foo' => ['bar' => true, 'additional_limitation' => true],
815
                'baz' => [],
816
                'some' => ['thingy' => true, 'thing' => true, 'but' => true, 'wait' => true],
817
            ],
818
            'custom_module2' => [
819
                'custom_function_3' => [],
820
                'custom_function_4' => ['CustomLimitation2' => true, 'CustomLimitation3' => true],
821
            ],
822
        ];
823
824
        $this->load();
825
        self::assertContainerBuilderHasParameter('ezpublish.api.role.policy_map');
826
        $expectedPolicies = array_merge_recursive($expectedPolicies, $previousPolicyMap);
827
        self::assertEquals($expectedPolicies, $this->container->getParameter('ezpublish.api.role.policy_map'));
828
    }
829
830
    public function testUrlAliasConfiguration()
831
    {
832
        $configuration = [
833
            'transformation' => 'urlalias_lowercase',
834
            'separator' => 'dash',
835
            'transformation_groups' => [
836
                'urlalias' => [
837
                    'commands' => [
838
                        'ascii_lowercase',
839
                        'cyrillic_lowercase',
840
                    ],
841
                    'cleanup_method' => 'url_cleanup',
842
                ],
843
                'urlalias_compact' => [
844
                    'commands' => [
845
                        'greek_normalize',
846
                        'exta_lowercase',
847
                    ],
848
                    'cleanup_method' => 'compact_cleanup',
849
                ],
850
            ],
851
        ];
852
        $this->load([
853
            'url_alias' => [
854
                'slug_converter' => $configuration,
855
            ],
856
        ]);
857
        $parsedConfig = $this->container->getParameter('ezpublish.url_alias.slug_converter');
858
        $this->assertSame(
859
            $configuration,
860
            $parsedConfig
861
        );
862
    }
863
}
864