Completed
Push — master ( e130e8...8fa866 )
by Łukasz
37:22 queued 13:48
created

UserLanguagePreferenceProviderTest   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 72
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6

Importance

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

4 Methods

Rating   Name   Duplication   Size   Complexity  
A setUp() 0 9 1
A testGetPreferredLanguages() 0 19 1
A providerForTestGetPreferredLanguages() 0 9 1
A getLanguageCodesMap() 0 8 1
1
<?php
2
3
/**
4
 * @copyright Copyright (C) eZ Systems AS. All rights reserved.
5
 * @license For full copyright and license information view LICENSE file distributed with this source code.
6
 */
7
declare(strict_types=1);
8
9
namespace eZ\Publish\Core\MVC\Symfony\Locale\Tests;
10
11
use eZ\Publish\Core\MVC\Symfony\Locale\UserLanguagePreferenceProvider;
12
use PHPUnit\Framework\TestCase;
13
use Symfony\Component\HttpFoundation\HeaderBag;
14
use Symfony\Component\HttpFoundation\Request;
15
use Symfony\Component\HttpFoundation\RequestStack;
16
use Symfony\Component\Yaml\Yaml;
17
18
class UserLanguagePreferenceProviderTest extends TestCase
19
{
20
    /**
21
     * @var \eZ\Publish\Core\MVC\Symfony\Locale\UserLanguagePreferenceProviderInterface
22
     */
23
    private $userLanguagePreferenceProvider;
24
25
    /**
26
     * @var \PHPUnit\Framework\MockObject\MockObject|\Symfony\Component\HttpFoundation\RequestStack
27
     */
28
    private $requestStackMock;
29
30
    public function setUp()
31
    {
32
        $this->requestStackMock = $this->createMock(RequestStack::class);
33
34
        $this->userLanguagePreferenceProvider = new UserLanguagePreferenceProvider(
35
            $this->requestStackMock,
36
            $this->getLanguageCodesMap()
37
        );
38
    }
39
40
    /**
41
     * @dataProvider providerForTestGetPreferredLanguages
42
     *
43
     * @param array $userLanguages
44
     * @param array $expectedEzLanguageCodes
45
     */
46
    public function testGetPreferredLanguages(array $userLanguages, array $expectedEzLanguageCodes)
47
    {
48
        $request = new Request();
49
        $request->headers = new HeaderBag(
50
            [
51
                'Accept-Language' => implode(', ', $userLanguages),
52
            ]
53
        );
54
        $this
55
            ->requestStackMock
56
            ->expects($this->once())
57
            ->method('getCurrentRequest')
58
            ->willReturn($request);
59
60
        self::assertEquals(
61
            $expectedEzLanguageCodes,
62
            $this->userLanguagePreferenceProvider->getPreferredLanguages()
63
        );
64
    }
65
66
    /**
67
     * @see testGetPreferredLanguages
68
     *
69
     * @return array
70
     */
71
    public function providerForTestGetPreferredLanguages(): array
72
    {
73
        return [
74
            [['pl'], ['pol-PL']],
75
            [['pol-PL'], ['pol-PL']],
76
            [['fr'], ['fre-FR']],
77
            [['en'], ['eng-GB', 'eng-US']],
78
        ];
79
    }
80
81
    private function getLanguageCodesMap(): array
82
    {
83
        $config = Yaml::parseFile(
84
            realpath(dirname(__DIR__, 6) . '/Bundle/EzPublishCoreBundle/Resources/config/locale.yml')
85
        );
86
87
        return $config['parameters']['ezpublish.locale.browser_map'];
88
    }
89
}
90