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

LinkLanguageHandlerTest::testCallLinkHandlerWithoutSite()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

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