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); });