Files
portal/app/tests/Unit/Services/PhonePrefixServiceTest.php
T

65 lines
2.4 KiB
PHP
Raw Normal View History

<?php
declare(strict_types=1);
use App\Services\PhonePrefixService;
it('mobile prefix 9XX returns all-districts mask', function (): void {
$service = new PhonePrefixService;
expect($service->resolveDistrictBit('79991234567'))->toBe(0xFF);
});
it('Moscow code 495 returns Central district bit (1)', function (): void {
$service = new PhonePrefixService;
expect($service->resolveDistrictBit('74951234567'))->toBe(1);
});
it('Saint-Petersburg code 812 returns Northwest district bit (2)', function (): void {
$service = new PhonePrefixService;
expect($service->resolveDistrictBit('78121234567'))->toBe(2);
});
it('Yekaterinburg code 343 returns Ural district bit (32)', function (): void {
$service = new PhonePrefixService;
expect($service->resolveDistrictBit('73431234567'))->toBe(32);
});
it('unknown code returns all-districts mask (defensive default)', function (): void {
$service = new PhonePrefixService;
expect($service->resolveDistrictBit('70001234567'))->toBe(0xFF);
});
it('rejects invalid phone formats', function (): void {
$service = new PhonePrefixService;
expect(fn () => $service->resolveDistrictBit('123'))->toThrow(InvalidArgumentException::class);
expect(fn () => $service->resolveDistrictBit('+79991234567'))->toThrow(InvalidArgumentException::class);
expect(fn () => $service->resolveDistrictBit('89991234567'))->toThrow(InvalidArgumentException::class);
});
it('phoneMatchesRegions: include + matching bit', function (): void {
$service = new PhonePrefixService;
expect($service->phoneMatchesRegions('74951234567', regionMask: 1, regionMode: 'include'))->toBeTrue();
expect($service->phoneMatchesRegions('74951234567', regionMask: 2, regionMode: 'include'))->toBeFalse();
});
it('phoneMatchesRegions: exclude inverts logic', function (): void {
$service = new PhonePrefixService;
expect($service->phoneMatchesRegions('74951234567', regionMask: 1, regionMode: 'exclude'))->toBeFalse();
expect($service->phoneMatchesRegions('74951234567', regionMask: 2, regionMode: 'exclude'))->toBeTrue();
});
it('mobile (all-districts) always passes include any-bit', function (): void {
$service = new PhonePrefixService;
expect($service->phoneMatchesRegions('79991234567', regionMask: 1, regionMode: 'include'))->toBeTrue();
expect($service->phoneMatchesRegions('79991234567', regionMask: 255, regionMode: 'include'))->toBeTrue();
});