Files
portal/app/tests/Unit/GeoResolverTest.php
T

29 lines
1.3 KiB
PHP
Raw Normal View History

<?php
declare(strict_types=1);
use App\Services\Tracking\GeoResolver;
// GeoResolver читает пути к базам через config() → нужен поднятый контейнер приложения.
// Юнит-набор его не поднимает, поэтому явно подключаем TestCase (БД не трогаем).
uses(Tests\TestCase::class);
test('без гео-базы возвращает пустой результат и не падает', function () {
config()->set('services.geoip.city_db', '/nope/city.mmdb');
config()->set('services.geoip.asn_db', '/nope/asn.mmdb');
$res = (new GeoResolver())->lookup('8.8.8.8');
expect($res)->toMatchArray([
'city' => null, 'region' => null, 'asn_org' => null, 'is_datacenter' => false,
]);
});
test('организация-хостинг помечается как дата-центр/VPN', function () {
expect(GeoResolver::looksLikeDatacenter('Tencent Cloud Computing'))->toBeTrue();
expect(GeoResolver::looksLikeDatacenter('DigitalOcean, LLC'))->toBeTrue();
expect(GeoResolver::looksLikeDatacenter('NordVPN'))->toBeTrue();
expect(GeoResolver::looksLikeDatacenter('Tele2 Russia'))->toBeFalse();
expect(GeoResolver::looksLikeDatacenter('Rostelecom'))->toBeFalse();
expect(GeoResolver::looksLikeDatacenter(null))->toBeFalse();
});