autopodborFixture('2gis-firm-kraslombard.html')]); $r = new CompetitorResolver($pages); $c = $r->resolve('КрасЛомбард', twoGisUrl: 'https://2gis.ru/krasnoyarsk/firm/70000001040792812', city: 'Красноярск'); expect($c->source)->toBe('2ГИС'); expect($c->isLocal())->toBeTrue(); expect($c->isFederal)->toBeFalse(); expect($c->region)->toBe('Красноярск'); expect($c->siteUrl)->toBe('http://kraslombard24.ru'); }); it('2ГИС нет, Яндекс совпал → местная карточка с Яндекса', function () { $pages = stubPages([ 'maps/?text=' => 'org', '/maps/org/' => autopodborFixture('yandex-org-kraslombard.html'), ]); $r = new CompetitorResolver($pages); $c = $r->resolve('КрасЛомбард', twoGisUrl: null, city: 'Красноярск'); expect($c->source)->toBe('Яндекс.Карты'); expect($c->isLocal())->toBeTrue(); expect($c->isFederal)->toBeFalse(); }); it('2ГИС-карточка из другого города отбраковывается (не местная)', function () { $pages = stubPages(['/firm/' => autopodborFixture('2gis-firm-kraslombard.html')]); // карточка в Красноярске $r = new CompetitorResolver($pages); // искали в Москве — карточка Красноярска не считается местной, Яндекса в стабе нет $c = $r->resolve('КрасЛомбард', twoGisUrl: 'https://2gis.ru/krasnoyarsk/firm/1', city: 'Москва'); expect($c->isLocal())->toBeFalse(); }); it('ни 2ГИС, ни Яндекс, но есть сайт → федерал (is_federal=true, local=false)', function () { $r = new CompetitorResolver(stubPages([])); $c = $r->resolve('CarMoney', twoGisUrl: null, city: 'Москва', knownSite: 'https://carmoney.ru'); expect($c->isFederal)->toBeTrue(); expect($c->isLocal())->toBeFalse(); expect($c->siteUrl)->toBe('https://carmoney.ru'); expect($c->directoryUrl)->toBeNull(); expect($c->name)->toBe('CarMoney'); }); it('ничего не найдено и сайта нет → «нет филиала в регионе» (local=false, не федерал)', function () { $r = new CompetitorResolver(stubPages([])); $c = $r->resolve('Загадочная Фирма', twoGisUrl: null, city: 'Москва'); expect($c->isLocal())->toBeFalse(); expect($c->isFederal)->toBeFalse(); expect($c->directoryUrl)->toBeNull(); expect($c->name)->toBe('Загадочная Фирма'); expect($c->region)->toBe('Москва'); });