Files
portal/app/tests/Feature/Autopodbor/DeepStudyToggleTest.php
T

48 lines
2.6 KiB
PHP

<?php
use App\Services\Autopodbor\Agent\RealCompetitorAgent;
use App\Services\Autopodbor\Agent\FakeCompetitorAgent;
use App\Services\Autopodbor\Agent\Dto\StudyCompetitorRequest;
use App\Services\Autopodbor\Agent\Dto\StudyCompetitorResult;
use App\Services\Autopodbor\Agent\Study\SourceCollector;
use App\Services\Autopodbor\Agent\Study\Fingerprint;
use App\Services\Autopodbor\Agent\Fetch\Fetcher;
use App\Services\Autopodbor\Agent\Fetch\FetchedSite;
it('deep_study ВКЛ → studyCompetitor идёт через SourceCollector', function () {
config()->set('autopodbor.deep_study', true);
$deep = new class implements SourceCollector {
public function collect(Fingerprint $fp): array {
return [[
'signal_type' => 'call', 'identifier' => '73912920000',
'phone_kind' => 'real', 'phone_type' => 'city',
'provenance_url' => null, 'provenance_label' => 'в коде сайта',
'where_found' => [['label' => 'в коде сайта', 'url' => null]],
'office' => null, 'confirmations' => 1,
]];
}
};
$fetcher = new class implements Fetcher {
public function site(string $url): FetchedSite { throw new \LogicException('старый путь не должен вызываться при deep'); }
public function directory(string $url): array { return []; }
};
$agent = new RealCompetitorAgent($fetcher, new FakeCompetitorAgent, deep: $deep);
$res = $agent->studyCompetitor(new StudyCompetitorRequest(['name' => 'X', 'site_url' => 'x.ru'], 29));
expect($res->sources[0]['identifier'])->toBe('73912920000');
});
it('deep_study ВЫКЛ → SourceCollector НЕ вызывается (старый путь)', function () {
config()->set('autopodbor.deep_study', false);
$deep = new class implements SourceCollector {
public function collect(Fingerprint $fp): array { throw new \LogicException('deep не должен вызываться при выкл'); }
};
$fetcher = new class implements Fetcher {
public function site(string $url): FetchedSite { return new FetchedSite($url, ''); }
public function directory(string $url): array { return []; }
};
$agent = new RealCompetitorAgent($fetcher, new FakeCompetitorAgent, deep: $deep);
$res = $agent->studyCompetitor(new StudyCompetitorRequest(['name' => 'X', 'site_url' => 'x.ru'], 29));
// старый путь отработал, deep не тронут (иначе бросило бы)
expect($res)->toBeInstanceOf(StudyCompetitorResult::class);
});