toBe(82) ->and(RussianRegions::resolveSubjectCode('г. Санкт-Петербург'))->toBe(83) ->and(RussianRegions::resolveSubjectCode('г. Севастополь'))->toBe(84); }); it('still maps a plain canonical federal-city name', function (): void { expect(RussianRegions::resolveSubjectCode('Москва'))->toBe(82); }); it('takes the last pipe segment as the subject region', function (): void { // регион = последний сегмент после | expect(RussianRegions::resolveSubjectCode('г. Оренбург|Оренбургская обл.'))->toBe(62) ->and(RussianRegions::resolveSubjectCode('г. Воскресенск|р-н Воскресенский|Московская обл.'))->toBe(56); }); it('expands the обл. abbreviation to область', function (): void { expect(RussianRegions::resolveSubjectCode('г. Иркутск|Иркутская обл.'))->toBe(45) ->and(RussianRegions::resolveSubjectCode('г. Балашиха|Московская обл.'))->toBe(56); }); it('keeps already-canonical край/республика segments', function (): void { expect(RussianRegions::resolveSubjectCode('г. Красноярск|Красноярский край'))->toBe(29) ->and(RussianRegions::resolveSubjectCode('г. Уфа|Республика Башкортостан'))->toBe(3); }); it('reorders the Удмуртская Республика inverted form', function (): void { expect(RussianRegions::resolveSubjectCode('г. Ижевск|Республика Удмуртская'))->toBe(21); }); it('maps the Кузбасс special form to Кемеровская область', function (): void { expect(RussianRegions::resolveSubjectCode('г. Кемерово|Кемеровская область - Кузбасс обл.'))->toBe(48); }); it('returns null for hopeless / ambiguous / city-only strings', function (string $raw): void { expect(RussianRegions::resolveSubjectCode($raw))->toBeNull(); })->with([ '-', 'Российская Федерация', 'Москва и Московская область', // неоднозначно — два субъекта 'г.о. Тольятти', // нет региона в строке 'г.о. город Уфа', '', ' ', ]); it('exposes the canonical name via canonicalRegionName', function (): void { expect(RussianRegions::canonicalRegionName('г. Оренбург|Оренбургская обл.'))->toBe('Оренбургская область') ->and(RussianRegions::canonicalRegionName('г. Ижевск|Республика Удмуртская'))->toBe('Удмуртская Республика') ->and(RussianRegions::canonicalRegionName('-'))->toBeNull(); });