Passed
Push — main ( b74ae1...8f51fb )
by Tim
03:01
created

MaxMindDetectTest::testNoProviderConfiguration()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 14
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 8
nc 1
nop 0
dl 0
loc 14
rs 10
c 1
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Lochmueller\LanguageDetection\Tests\Unit\Detect;
6
7
use Lochmueller\LanguageDetection\Detect\MaxMindDetect;
8
use Lochmueller\LanguageDetection\Domain\Collection\LocaleCollection;
9
use Lochmueller\LanguageDetection\Event\DetectUserLanguagesEvent;
10
use Lochmueller\LanguageDetection\Service\LanguageService;
11
use Lochmueller\LanguageDetection\Service\LocaleCollectionSortService;
12
use Lochmueller\LanguageDetection\Service\SiteConfigurationService;
13
use Lochmueller\LanguageDetection\Tests\Unit\AbstractUnitTest;
14
use TYPO3\CMS\Core\Http\ServerRequest;
15
use TYPO3\CMS\Core\Site\Entity\Site;
16
17
/**
18
 * @covers \Lochmueller\LanguageDetection\Detect\MaxMindDetect
19
 *
20
 * @internal
21
 */
22
class MaxMindDetectTest extends AbstractUnitTest
23
{
24
    /**
25
     * @covers \Lochmueller\LanguageDetection\Domain\Collection\LocaleCollection
26
     * @covers \Lochmueller\LanguageDetection\Domain\Model\Dto\LocaleValueObject
27
     * @covers \Lochmueller\LanguageDetection\Domain\Model\Dto\SiteConfiguration
28
     * @covers \Lochmueller\LanguageDetection\Event\DetectUserLanguagesEvent
29
     * @covers \Lochmueller\LanguageDetection\Service\LanguageService
30
     * @covers \Lochmueller\LanguageDetection\Service\SiteConfigurationService
31
     */
32
    public function testNoProviderConfiguration(): void
33
    {
34
        $serverRequest = new ServerRequest(null, null, 'php://input', []);
35
36
        $site = $this->createStub(Site::class);
37
        $site->method('getConfiguration')->willReturn([]);
38
39
        $event = new DetectUserLanguagesEvent($site, $serverRequest);
40
        $event->setUserLanguages(LocaleCollection::fromArray(['default']));
41
42
        $maxMindDetect = new MaxMindDetect(new LanguageService(), new SiteConfigurationService(), new LocaleCollectionSortService());
43
        $maxMindDetect($event);
44
45
        self::assertCount(1, $event->getUserLanguages()->toArray());
46
    }
47
48
    public function testMemoryConsumptionAndExecutionTimeOfMaxMindDatabaseFileUploadInclSiteConfigurationsStructure(): void
49
    {
50
        $serverRequest = new ServerRequest(
51
            null,
52
            null,
53
            'php://input',
54
            [],
55
            [
56
                'REMOTE_ADDR' => '172.217.0.0', // Google services in US
57
            ]
58
        );
59
60
        $dbFile = \dirname(__FILE__, 3) . '/Fixtures/GeoIP2-Country.mmdb';
61
        if (!is_file($dbFile)) {
62
            self::markTestIncomplete('No local GEO IP 2 database is found');
63
        }
64
65
        $site = $this->createStub(Site::class);
66
        $site->method('getConfiguration')->willReturn([
67
            'languageDetectionMaxMindDatabasePath' => $dbFile,
68
        ]);
69
70
        $event = new DetectUserLanguagesEvent($site, $serverRequest);
71
        $event->setUserLanguages(LocaleCollection::fromArray([]));
72
73
        $beforeMemory = memory_get_usage();
74
        $beforeTime = microtime(true);
75
76
        $maxMindDetect = new MaxMindDetect(new LanguageService(), new SiteConfigurationService(), new LocaleCollectionSortService());
77
        $maxMindDetect($event);
78
79
        $memoryUsage = memory_get_usage() - $beforeMemory;
80
        $timeUsage = microtime(true) - $beforeTime;
81
82
        self::assertLessThanOrEqual(1024 * 200, $memoryUsage);
83
        self::assertLessThanOrEqual(0.02, $timeUsage);
84
        $languages = $event->getUserLanguages()->toArray();
85
        self::assertCount(1, $languages);
86
        self::assertEquals('en_US', (string)$languages[0]);
87
    }
88
}
89