Passed
Push — master ( 4d2afb...37b1cc )
by Tim
02:49
created

testValidFallbackLanguages()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 18
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 11
c 0
b 0
f 0
nc 1
nop 0
dl 0
loc 18
rs 9.9
1
<?php
2
3
declare(strict_types=1);
4
5
namespace LD\LanguageDetection\Tests\Unit\Negotiation;
6
7
use LD\LanguageDetection\Event\NegotiateSiteLanguage;
8
use LD\LanguageDetection\Negotiation\FallbackNegotiation;
9
use LD\LanguageDetection\Service\SiteConfigurationService;
10
use LD\LanguageDetection\Tests\Unit\AbstractTest;
11
use TYPO3\CMS\Core\Http\ServerRequest;
12
use TYPO3\CMS\Core\Http\Uri;
13
use TYPO3\CMS\Core\Site\Entity\NullSite;
14
use TYPO3\CMS\Core\Site\Entity\Site;
15
use TYPO3\CMS\Core\Site\Entity\SiteLanguage;
16
17
/**
18
 * @internal
19
 * @coversNothing
20
 */
21
class FallbackNegotiationTest extends AbstractTest
22
{
23
    /**
24
     * @covers \LD\LanguageDetection\Domain\Model\Dto\SiteConfiguration
25
     * @covers       \LD\LanguageDetection\Event\NegotiateSiteLanguage
26
     * @covers       \LD\LanguageDetection\Negotiation\FallbackNegotiation
27
     * @covers \LD\LanguageDetection\Service\SiteConfigurationService
28
     * @dataProvider dataInvalid
29
     *
30
     * @param mixed[]|array<string, array<int>>|array<string, string> $configuration
31
     */
32
    public function testInvalidFallbackLanguages(array $configuration): void
33
    {
34
        $site = $this->createStub(Site::class);
35
        $site->method('getConfiguration')->willReturn($configuration);
36
37
        $request = new ServerRequest(null, null, 'php://input', []);
38
        $event = new NegotiateSiteLanguage($site, $request, []);
39
40
        $botListener = new FallbackNegotiation(new SiteConfigurationService());
41
        $botListener($event);
42
43
        self::assertNull($event->getSelectedLanguage());
44
    }
45
46
    /**
47
     * @covers \LD\LanguageDetection\Domain\Model\Dto\SiteConfiguration
48
     * @covers       \LD\LanguageDetection\Event\NegotiateSiteLanguage
49
     * @covers       \LD\LanguageDetection\Negotiation\FallbackNegotiation
50
     * @covers       \LD\LanguageDetection\Service\SiteConfigurationService
51
     */
52
    public function testValidFallbackLanguages(): void
53
    {
54
        $site = $this->createStub(Site::class);
55
        $site->method('getConfiguration')->willReturn(['fallbackDetectionLanguage' => 2]);
56
57
        $siteLanguage1 = new SiteLanguage(1, 'de_DE', new Uri('/de/'), []);
58
        $siteLanguage2 = new SiteLanguage(2, 'en_GB', new Uri('/en/'), []);
59
        $siteLanguage3 = new SiteLanguage(3, 'fr_FR', new Uri('/fr/'), []);
60
61
        $site->method('getAllLanguages')->willReturn([$siteLanguage1, $siteLanguage2, $siteLanguage3]);
62
63
        $request = new ServerRequest(null, null, 'php://input', []);
64
        $event = new NegotiateSiteLanguage($site, $request, []);
65
66
        $botListener = new FallbackNegotiation(new SiteConfigurationService());
67
        $botListener($event);
68
69
        self::assertEquals($siteLanguage2, $event->getSelectedLanguage());
70
    }
71
72
    /**
73
     * @covers       \LD\LanguageDetection\Domain\Model\Dto\SiteConfiguration
74
     * @covers       \LD\LanguageDetection\Event\NegotiateSiteLanguage
75
     * @covers       \LD\LanguageDetection\Negotiation\FallbackNegotiation
76
     * @covers       \LD\LanguageDetection\Service\SiteConfigurationService
77
     */
78
    public function testValidConfigurationButNoFallback(): void
79
    {
80
        $site = $this->createStub(Site::class);
81
        $site->method('getConfiguration')->willReturn(['fallbackDetectionLanguage' => 9]);
82
83
        $siteLanguage1 = new SiteLanguage(1, 'de_DE', new Uri('/de/'), []);
84
        $siteLanguage2 = new SiteLanguage(2, 'en_GB', new Uri('/en/'), []);
85
        $siteLanguage3 = new SiteLanguage(3, 'fr_FR', new Uri('/fr/'), []);
86
87
        $site->method('getAllLanguages')->willReturn([$siteLanguage1, $siteLanguage2, $siteLanguage3]);
88
89
        $request = new ServerRequest(null, null, 'php://input', []);
90
        $event = new NegotiateSiteLanguage($site, $request, []);
91
92
        $botListener = new FallbackNegotiation(new SiteConfigurationService());
93
        $botListener($event);
94
95
        self::assertNull($event->getSelectedLanguage());
96
    }
97
98
    /**
99
     * @covers       \LD\LanguageDetection\Domain\Model\Dto\SiteConfiguration
100
     * @covers       \LD\LanguageDetection\Event\NegotiateSiteLanguage
101
     * @covers       \LD\LanguageDetection\Negotiation\FallbackNegotiation
102
     * @covers       \LD\LanguageDetection\Service\SiteConfigurationService
103
     */
104
    public function testCallWithNullSite(): void
105
    {
106
        $site = $this->createMock(NullSite::class);
107
108
        $request = new ServerRequest(null, null, 'php://input', []);
109
        $event = new NegotiateSiteLanguage($site, $request, []);
110
111
        $botListener = new FallbackNegotiation(new SiteConfigurationService());
112
        $botListener($event);
113
114
        self::assertNull($event->getSelectedLanguage());
115
    }
116
117
    /**
118
     * @return array<string, array<int, array<string, array<int, int>|string>>>
119
     */
120
    public function dataInvalid(): array
121
    {
122
        return [
123
            'empty' => [[]],
124
            'other' => [['dummy' => '1']],
125
            'text' => [['fallbackDetectionLanguage' => 'Wrong']],
126
            'array' => [['fallbackDetectionLanguage' => [1, 2, 3]]],
127
        ];
128
    }
129
}
130