Passed
Push — master ( 5e0f86...fc8c86 )
by Tim
02:36
created

RespectLanguageLinkDetailsTraitTest::testTraitExecutionParameterGeneration()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 27
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
cc 1
eloc 17
c 2
b 0
f 0
nc 1
nop 0
dl 0
loc 27
rs 9.7
1
<?php
2
3
declare(strict_types=1);
4
5
namespace LD\LanguageDetection\Tests\Unit\Service;
6
7
use LD\LanguageDetection\Handler\Exception\DisableLanguageDetectionException;
8
use LD\LanguageDetection\Handler\LinkLanguageHandler;
9
use LD\LanguageDetection\Service\RespectLanguageLinkDetailsTrait;
10
use LD\LanguageDetection\Tests\Unit\AbstractTest;
11
use TYPO3\CMS\Core\Http\NullResponse;
12
use TYPO3\CMS\Core\LinkHandling\LinkService;
13
use TYPO3\CMS\Core\Site\Entity\Site;
14
use TYPO3\CMS\Core\Site\SiteFinder;
15
16
/**
17
 * @internal
18
 * @coversNothing
19
 *
20
 * @todo
21
 */
22
class RespectLanguageLinkDetailsTraitTest extends AbstractTest
23
{
24
    /**
25
     * @covers \LD\LanguageDetection\Service\RespectLanguageLinkDetailsTrait
26
     */
27
    public function testTraitExecutionWithWrongType(): void
28
    {
29
        $traitObject = $this->createTraitMock();
30
31
        self::assertEquals(['type' => 'wrong'], $traitObject->addLanguageParameterByDetection(['type' => 'wrong']));
32
    }
33
34
    /**
35
     * @covers \LD\LanguageDetection\Check\EnableListener
36
     * @covers \LD\LanguageDetection\Detect\BrowserLanguage
37
     * @covers \LD\LanguageDetection\Domain\Model\Dto\SiteConfiguration
38
     * @covers \LD\LanguageDetection\Event\CheckLanguageDetection
39
     * @covers \LD\LanguageDetection\Event\DetectUserLanguages
40
     * @covers \LD\LanguageDetection\Event\NegotiateSiteLanguage
41
     * @covers \LD\LanguageDetection\Negotiation\DefaultNegotiation
42
     * @covers \LD\LanguageDetection\Service\Normalizer
43
     * @covers \LD\LanguageDetection\Service\RespectLanguageLinkDetailsTrait
44
     * @covers \LD\LanguageDetection\Service\SiteConfigurationService
45
     */
46
    public function testTraitExecutionWithDisabledLanguageDetection(): void
47
    {
48
        $siteFinder = $this->createStub(SiteFinder::class);
49
        $siteFinder->method('getSiteByPageId')
50
            ->willReturn(new Site('dummy', 1, ['enableLanguageDetection' => false]))
51
        ;
52
53
        $handler = $this->createStub(LinkLanguageHandler::class);
54
        $handler->method('handle')->willThrowException(new DisableLanguageDetectionException());
55
56
        $traitObject = $this->createTraitMock($handler, $siteFinder);
57
58
        $configuration = [
59
            'type' => LinkService::TYPE_PAGE,
60
            'pageuid' => 5,
61
        ];
62
63
        self::assertEquals($configuration, $traitObject->addLanguageParameterByDetection($configuration));
64
    }
65
66
    /**
67
     * @covers \LD\LanguageDetection\Check\EnableListener
68
     * @covers \LD\LanguageDetection\Detect\BrowserLanguage
69
     * @covers \LD\LanguageDetection\Domain\Model\Dto\SiteConfiguration
70
     * @covers \LD\LanguageDetection\Event\CheckLanguageDetection
71
     * @covers \LD\LanguageDetection\Event\DetectUserLanguages
72
     * @covers \LD\LanguageDetection\Event\NegotiateSiteLanguage
73
     * @covers \LD\LanguageDetection\Negotiation\DefaultNegotiation
74
     * @covers \LD\LanguageDetection\Service\Normalizer
75
     * @covers \LD\LanguageDetection\Service\RespectLanguageLinkDetailsTrait
76
     * @covers \LD\LanguageDetection\Service\SiteConfigurationService
77
     */
78
    public function testTraitExecutionWithNoUserLanguages(): void
79
    {
80
        $site = $this->createStub(Site::class);
81
82
        $siteFinder = $this->createStub(SiteFinder::class);
83
        $siteFinder->method('getSiteByPageId')
84
            ->willReturn($site)
85
        ;
86
87
        $response = new NullResponse();
88
        $response = $response->withAddedHeader(LinkLanguageHandler::HEADER_NAME, '5');
89
90
        $handler = $this->createStub(LinkLanguageHandler::class);
91
        $handler->method('handle')->willReturn($response);
92
93
        $traitObject = $this->createTraitMock($handler, $siteFinder);
94
95
        $configuration = [
96
            'type' => LinkService::TYPE_PAGE,
97
            'pageuid' => 5,
98
        ];
99
100
        self::assertEquals([
101
            'type' => LinkService::TYPE_PAGE,
102
            'pageuid' => 5,
103
            'parameters' => 'L=5',
104
        ], $traitObject->addLanguageParameterByDetection($configuration));
105
    }
106
107
    protected function createTraitMock(?LinkLanguageHandler $linkLanguageHandler = null, ?SiteFinder $languageSiteFinder = null): object
108
    {
109
        $traitObject = $this->getObjectForTrait(RespectLanguageLinkDetailsTrait::class);
110
        $reflectionClass = new \ReflectionClass($traitObject);
111
112
        if (null !== $linkLanguageHandler) {
113
            $propertyLanguageEventDispatcher = $reflectionClass->getProperty('linkLanguageHandler');
114
            $propertyLanguageEventDispatcher->setAccessible(true);
115
            $propertyLanguageEventDispatcher->setValue($traitObject, $linkLanguageHandler);
116
        }
117
118
        if (null !== $languageSiteFinder) {
119
            $propertyLanguageSiteFinder = $reflectionClass->getProperty('languageSiteFinder');
120
            $propertyLanguageSiteFinder->setAccessible(true);
121
            $propertyLanguageSiteFinder->setValue($traitObject, $languageSiteFinder);
122
        }
123
124
        return $traitObject;
125
    }
126
}
127