Passed
Push — main ( 656e89...66a587 )
by Tim
06:34 queued 03:15
created

LanguageDetectionHandlerTest::testFullExecution()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 26
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 15
nc 1
nop 0
dl 0
loc 26
rs 9.7666
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Lochmueller\LanguageDetection\Tests\Unit\Handler;
6
7
use Lochmueller\LanguageDetection\Handler\Exception\DisableLanguageDetectionException;
8
use Lochmueller\LanguageDetection\Handler\Exception\NoResponseException;
9
use Lochmueller\LanguageDetection\Handler\Exception\NoSelectedLanguageException;
10
use Lochmueller\LanguageDetection\Handler\Exception\NoUserLanguagesException;
11
use Lochmueller\LanguageDetection\Handler\LanguageDetectionHandler;
12
use Psr\Http\Message\ResponseInterface;
13
use TYPO3\CMS\Core\Http\ServerRequest;
14
use TYPO3\CMS\Core\Site\Entity\Site;
15
16
/**
17
 * @internal
18
 *
19
 * @coversNothing
20
 */
21
class LanguageDetectionHandlerTest extends AbstractHandlerTest
22
{
23
    /**
24
     * @covers \Lochmueller\LanguageDetection\Check\BotAgentCheck
25
     * @covers \Lochmueller\LanguageDetection\Event\CheckLanguageDetectionEvent
26
     * @covers \Lochmueller\LanguageDetection\Handler\AbstractHandler
27
     * @covers \Lochmueller\LanguageDetection\Handler\Exception\DisableLanguageDetectionException
28
     * @covers \Lochmueller\LanguageDetection\Handler\LanguageDetectionHandler
29
     * @covers \Lochmueller\LanguageDetection\Negotiation\DefaultNegotiation
30
     * @covers \Lochmueller\LanguageDetection\Response\DefaultResponse
31
     */
32
    public function testBreakAfterCheckLanguageDetectionByAddingBotAgent(): void
33
    {
34
        $this->expectException(DisableLanguageDetectionException::class);
35
        $this->expectExceptionCode(1_236_781);
0 ignored issues
show
Bug introduced by
A parse error occurred: Syntax error, unexpected T_STRING, expecting ',' or ')' on line 35 at column 36
Loading history...
36
37
        $serverRequest = new ServerRequest(null, null, 'php://input', ['user-agent' => 'AdsBot-Google']);
38
        $serverRequest = $serverRequest->withAttribute('site', new Site('dummy', 1, []));
39
40
        $handler = new LanguageDetectionHandler($this->getSmallEventListenerStack());
41
        $handler->handle($serverRequest);
42
    }
43
44
    /**
45
     * @covers \Lochmueller\LanguageDetection\Check\BotAgentCheck
46
     * @covers \Lochmueller\LanguageDetection\Detect\BrowserLanguageDetect
47
     * @covers \Lochmueller\LanguageDetection\Domain\Collection\LocaleCollection
48
     * @covers \Lochmueller\LanguageDetection\Event\CheckLanguageDetectionEvent
49
     * @covers \Lochmueller\LanguageDetection\Event\DetectUserLanguagesEvent
50
     * @covers \Lochmueller\LanguageDetection\Handler\AbstractHandler
51
     * @covers \Lochmueller\LanguageDetection\Handler\Exception\NoUserLanguagesException
52
     * @covers \Lochmueller\LanguageDetection\Handler\LanguageDetectionHandler
53
     * @covers \Lochmueller\LanguageDetection\Negotiation\DefaultNegotiation
54
     * @covers \Lochmueller\LanguageDetection\Response\DefaultResponse
55
     */
56
    public function testBreakAfterDetectUserLanguagesByMissingLanguages(): void
57
    {
58
        $this->expectException(NoUserLanguagesException::class);
59
60
        $serverRequest = new ServerRequest();
61
        $serverRequest = $serverRequest->withAttribute('site', new Site('dummy', 1, []));
62
63
        $handler = new LanguageDetectionHandler($this->getSmallEventListenerStack());
64
        $handler->handle($serverRequest);
65
    }
66
67
    /**
68
     * @covers \Lochmueller\LanguageDetection\Check\BotAgentCheck
69
     * @covers \Lochmueller\LanguageDetection\Detect\BrowserLanguageDetect
70
     * @covers \Lochmueller\LanguageDetection\Domain\Collection\LocaleCollection
71
     * @covers \Lochmueller\LanguageDetection\Domain\Model\Dto\LocaleValueObject
72
     * @covers \Lochmueller\LanguageDetection\Event\CheckLanguageDetectionEvent
73
     * @covers \Lochmueller\LanguageDetection\Event\DetectUserLanguagesEvent
74
     * @covers \Lochmueller\LanguageDetection\Event\NegotiateSiteLanguageEvent
75
     * @covers \Lochmueller\LanguageDetection\Handler\AbstractHandler
76
     * @covers \Lochmueller\LanguageDetection\Handler\Exception\NoSelectedLanguageException
77
     * @covers \Lochmueller\LanguageDetection\Handler\LanguageDetectionHandler
78
     * @covers \Lochmueller\LanguageDetection\Negotiation\DefaultNegotiation
79
     * @covers \Lochmueller\LanguageDetection\Response\DefaultResponse
80
     * @covers \Lochmueller\LanguageDetection\Service\Normalizer
81
     */
82
    public function testBreakAfterNegotiateSiteLanguageByNotFoundTargetLanguage(): void
83
    {
84
        $this->expectException(NoSelectedLanguageException::class);
85
86
        $serverRequest = new ServerRequest(null, null, 'php://input', ['accept-language' => 'de,de_DE']);
87
        $serverRequest = $serverRequest->withAttribute('site', new Site('dummy', 1, []));
88
89
        $handler = new LanguageDetectionHandler($this->getSmallEventListenerStack());
90
        $handler->handle($serverRequest);
91
    }
92
93
    /**
94
     * @covers \Lochmueller\LanguageDetection\Check\BotAgentCheck
95
     * @covers \Lochmueller\LanguageDetection\Detect\BrowserLanguageDetect
96
     * @covers \Lochmueller\LanguageDetection\Domain\Collection\LocaleCollection
97
     * @covers \Lochmueller\LanguageDetection\Domain\Model\Dto\LocaleValueObject
98
     * @covers \Lochmueller\LanguageDetection\Domain\Model\Dto\SiteConfiguration
99
     * @covers \Lochmueller\LanguageDetection\Event\BuildResponseEvent
100
     * @covers \Lochmueller\LanguageDetection\Event\CheckLanguageDetectionEvent
101
     * @covers \Lochmueller\LanguageDetection\Event\DetectUserLanguagesEvent
102
     * @covers \Lochmueller\LanguageDetection\Event\NegotiateSiteLanguageEvent
103
     * @covers \Lochmueller\LanguageDetection\Handler\AbstractHandler
104
     * @covers \Lochmueller\LanguageDetection\Handler\Exception\NoResponseException
105
     * @covers \Lochmueller\LanguageDetection\Handler\LanguageDetectionHandler
106
     * @covers \Lochmueller\LanguageDetection\Negotiation\DefaultNegotiation
107
     * @covers \Lochmueller\LanguageDetection\Response\DefaultResponse
108
     * @covers \Lochmueller\LanguageDetection\Service\Normalizer
109
     * @covers \Lochmueller\LanguageDetection\Service\SiteConfigurationService
110
     */
111
    public function testBreakAfterBuildResponseByEmptyResponseBecauseOfSameUri(): void
112
    {
113
        $this->expectException(NoResponseException::class);
114
115
        $serverRequest = new ServerRequest('https://www.dummy.de/', null, 'php://input', ['accept-language' => 'de,de_DE']);
116
        $site = new Site('dummy', 1, [
117
            'base' => 'https://www.dummy.de/',
118
            'forwardRedirectParameters' => '',
119
            'languages' => [
120
                [
121
                    'languageId' => 1,
122
                    'base' => '/',
123
                    'locale' => 'de_DE',
124
                ],
125
                [
126
                    'languageId' => 2,
127
                    'base' => '/en/',
128
                    'locale' => 'en_GB',
129
                ],
130
            ],
131
        ]);
132
133
        $serverRequest = $serverRequest->withAttribute('site', $site);
134
135
        $handler = new LanguageDetectionHandler($this->getSmallEventListenerStack());
136
        $handler->handle($serverRequest);
137
    }
138
139
    /**
140
     * @covers \Lochmueller\LanguageDetection\Check\BotAgentCheck
141
     * @covers \Lochmueller\LanguageDetection\Detect\BrowserLanguageDetect
142
     * @covers \Lochmueller\LanguageDetection\Domain\Collection\LocaleCollection
143
     * @covers \Lochmueller\LanguageDetection\Domain\Model\Dto\LocaleValueObject
144
     * @covers \Lochmueller\LanguageDetection\Domain\Model\Dto\SiteConfiguration
145
     * @covers \Lochmueller\LanguageDetection\Event\BuildResponseEvent
146
     * @covers \Lochmueller\LanguageDetection\Event\CheckLanguageDetectionEvent
147
     * @covers \Lochmueller\LanguageDetection\Event\DetectUserLanguagesEvent
148
     * @covers \Lochmueller\LanguageDetection\Event\NegotiateSiteLanguageEvent
149
     * @covers \Lochmueller\LanguageDetection\Handler\AbstractHandler
150
     * @covers \Lochmueller\LanguageDetection\Handler\LanguageDetectionHandler
151
     * @covers \Lochmueller\LanguageDetection\Negotiation\DefaultNegotiation
152
     * @covers \Lochmueller\LanguageDetection\Response\DefaultResponse
153
     * @covers \Lochmueller\LanguageDetection\Service\Normalizer
154
     * @covers \Lochmueller\LanguageDetection\Service\SiteConfigurationService
155
     */
156
    public function testFullExecution(): void
157
    {
158
        $serverRequest = new ServerRequest('https://www.dummy.de/', null, 'php://input', ['accept-language' => 'de,de_DE']);
159
        $site = new Site('dummy', 1, [
160
            'base' => 'https://www.dummy.de/',
161
            'forwardRedirectParameters' => '',
162
            'languages' => [
163
                [
164
                    'languageId' => 1,
165
                    'base' => '/de/',
166
                    'locale' => 'de_DE',
167
                ],
168
                [
169
                    'languageId' => 2,
170
                    'base' => '/en/',
171
                    'locale' => 'en_GB',
172
                ],
173
            ],
174
        ]);
175
176
        $serverRequest = $serverRequest->withAttribute('site', $site);
177
178
        $handler = new LanguageDetectionHandler($this->getSmallEventListenerStack());
179
        $response = $handler->handle($serverRequest);
180
181
        self::assertInstanceOf(ResponseInterface::class, $response);
182
    }
183
}
184