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

UserLanguagePreferenceProviderTest::setUp()   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
 * @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