testTraitExecutionWithNoUserLanguages()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 36
Code Lines 22

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 22
nc 2
nop 0
dl 0
loc 36
rs 9.568
c 1
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Lochmueller\LanguageDetection\Tests\Unit\Service;
6
7
use Lochmueller\LanguageDetection\Handler\Exception\DisableLanguageDetectionException;
0 ignored issues
show
Bug introduced by
The type Lochmueller\LanguageDete...guageDetectionException was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
8
use Lochmueller\LanguageDetection\Handler\LinkLanguageHandler;
9
use Lochmueller\LanguageDetection\Service\RespectLanguageLinkDetailsTrait;
10
use Lochmueller\LanguageDetection\Tests\Unit\AbstractUnitTest;
11
use TYPO3\CMS\Core\Http\NullResponse;
12
use TYPO3\CMS\Core\Http\ServerRequestFactory;
13
use TYPO3\CMS\Core\LinkHandling\LinkService;
14
use TYPO3\CMS\Core\Site\Entity\Site;
15
use TYPO3\CMS\Core\Site\SiteFinder;
16
17
/**
18
 * @internal
19
 *
20
 * @coversNothing
21
 */
22
class RespectLanguageLinkDetailsTraitTest extends AbstractUnitTest
23
{
24
    /**
25
     * @covers \Lochmueller\LanguageDetection\Service\RespectLanguageLinkDetailsTrait
26
     */
27
    public function testTraitExecutionWithWrongType(): void
28
    {
29
        $traitObject = $this->createTraitMock();
30
31
        if (!\is_callable([$traitObject, 'addLanguageParameterByDetection'])) {
32
            self::assertTrue(false, 'Trait object is not callable');
33
34
            return;
35
        }
36
37
        self::assertEquals(['type' => 'wrong'], $traitObject->addLanguageParameterByDetection(['type' => 'wrong']));
38
    }
39
40
    /**
41
     * @covers \Lochmueller\LanguageDetection\Check\EnableCheck
42
     * @covers \Lochmueller\LanguageDetection\Detect\BrowserLanguageDetect
43
     * @covers \Lochmueller\LanguageDetection\Domain\Model\Dto\SiteConfiguration
44
     * @covers \Lochmueller\LanguageDetection\Event\CheckLanguageDetectionEvent
45
     * @covers \Lochmueller\LanguageDetection\Event\DetectUserLanguagesEvent
46
     * @covers \Lochmueller\LanguageDetection\Event\NegotiateSiteLanguageEvent
47
     * @covers \Lochmueller\LanguageDetection\Negotiation\DefaultNegotiation
48
     * @covers \Lochmueller\LanguageDetection\Service\Normalizer
49
     * @covers \Lochmueller\LanguageDetection\Service\RespectLanguageLinkDetailsTrait
50
     * @covers \Lochmueller\LanguageDetection\Service\SiteConfigurationService
51
     */
52
    public function testTraitExecutionWithDisabledLanguageDetection(): void
53
    {
54
        $siteFinder = $this->createStub(SiteFinder::class);
55
        $siteFinder->method('getSiteByPageId')
56
            ->willReturn(new Site('dummy', 1, ['enableLanguageDetection' => false]))
57
        ;
58
59
        $handler = $this->createStub(LinkLanguageHandler::class);
60
        $handler->method('handle')->willThrowException(new DisableLanguageDetectionException());
61
62
        $traitObject = $this->createTraitMock($handler, $siteFinder);
63
64
        $configuration = [
65
            'type' => LinkService::TYPE_PAGE,
66
            'pageuid' => 5,
67
        ];
68
69
        $factory = new ServerRequestFactory();
70
        $request = $factory->createServerRequest('GET', '/', []);
71
72
        if (!\is_callable([$traitObject, 'addLanguageParameterByDetection'])) {
73
            self::assertTrue(false, 'Trait object is not callable');
74
75
            return;
76
        }
77
78
        self::assertEquals($configuration, $traitObject->addLanguageParameterByDetection($configuration, $request));
79
    }
80
81
    /**
82
     * @covers \Lochmueller\LanguageDetection\Check\EnableCheck
83
     * @covers \Lochmueller\LanguageDetection\Detect\BrowserLanguageDetect
84
     * @covers \Lochmueller\LanguageDetection\Domain\Model\Dto\SiteConfiguration
85
     * @covers \Lochmueller\LanguageDetection\Event\CheckLanguageDetectionEvent
86
     * @covers \Lochmueller\LanguageDetection\Event\DetectUserLanguagesEvent
87
     * @covers \Lochmueller\LanguageDetection\Event\NegotiateSiteLanguageEvent
88
     * @covers \Lochmueller\LanguageDetection\Negotiation\DefaultNegotiation
89
     * @covers \Lochmueller\LanguageDetection\Service\Normalizer
90
     * @covers \Lochmueller\LanguageDetection\Service\RespectLanguageLinkDetailsTrait
91
     * @covers \Lochmueller\LanguageDetection\Service\SiteConfigurationService
92
     */
93
    public function testTraitExecutionWithNoUserLanguages(): void
94
    {
95
        $site = $this->createStub(Site::class);
96
97
        $siteFinder = $this->createStub(SiteFinder::class);
98
        $siteFinder->method('getSiteByPageId')
99
            ->willReturn($site)
100
        ;
101
102
        $response = new NullResponse();
103
        $response = $response->withAddedHeader(LinkLanguageHandler::HEADER_NAME, '5');
104
105
        $handler = $this->createStub(LinkLanguageHandler::class);
106
        $handler->method('handle')->willReturn($response);
107
108
        $traitObject = $this->createTraitMock($handler, $siteFinder);
109
110
        $configuration = [
111
            'type' => LinkService::TYPE_PAGE,
112
            'pageuid' => 5,
113
        ];
114
115
        $factory = new ServerRequestFactory();
116
        $request = $factory->createServerRequest('GET', '/', []);
117
118
        if (!\is_callable([$traitObject, 'addLanguageParameterByDetection'])) {
119
            self::assertTrue(false, 'Trait object is not callable');
120
121
            return;
122
        }
123
124
        self::assertEquals([
125
            'type' => LinkService::TYPE_PAGE,
126
            'pageuid' => 5,
127
            'parameters' => 'L=5',
128
        ], $traitObject->addLanguageParameterByDetection($configuration, $request));
129
    }
130
131
    protected function createTraitMock(?LinkLanguageHandler $linkLanguageHandler = null, ?SiteFinder $languageSiteFinder = null): object
132
    {
133
        $traitObject = $this->getObjectForTrait(RespectLanguageLinkDetailsTrait::class);
134
        $reflectionClass = new \ReflectionClass($traitObject);
135
136
        if ($linkLanguageHandler !== null) {
137
            $propertyLanguageEventDispatcher = $reflectionClass->getProperty('linkLanguageHandler');
138
            $propertyLanguageEventDispatcher->setAccessible(true);
139
            $propertyLanguageEventDispatcher->setValue($traitObject, $linkLanguageHandler);
140
        }
141
142
        if ($languageSiteFinder !== null) {
143
            $propertyLanguageSiteFinder = $reflectionClass->getProperty('languageSiteFinder');
144
            $propertyLanguageSiteFinder->setAccessible(true);
145
            $propertyLanguageSiteFinder->setValue($traitObject, $languageSiteFinder);
146
        }
147
148
        return $traitObject;
149
    }
150
}
151