set('autopodbor.deep_study', true); config()->set('autopodbor.phone_reverse', true); $agent = app(CompetitorAgent::class); expect($agent)->toBeInstanceOf(RealCompetitorAgent::class); $deep = (new ReflectionProperty(RealCompetitorAgent::class, 'deep'))->getValue($agent); expect($deep)->toBeInstanceOf(DeepStudyCollector::class); $reverse = (new ReflectionProperty(DeepStudyCollector::class, 'reverse'))->getValue($deep); expect($reverse)->toBeInstanceOf(PhoneReverse::class); }); it('при phone_reverse+phone_reverse_yandex reverse = композит (2ГИС + Яндекс)', function () { config()->set('autopodbor.deep_study', true); config()->set('autopodbor.phone_reverse', true); config()->set('autopodbor.phone_reverse_yandex', true); // Ветка композита проверяется явно; параллельный разворот — отдельный флаг, здесь пиним ВЫКЛ, // иначе dev-.env (AUTOPODBOR_PHONE_REVERSE_PARALLEL=true) даёт ParallelPhoneReverse. config()->set('autopodbor.phone_reverse_parallel', false); $agent = app(\App\Services\Autopodbor\Agent\CompetitorAgent::class); $deep = (new ReflectionProperty(\App\Services\Autopodbor\Agent\RealCompetitorAgent::class, 'deep'))->getValue($agent); $reverse = (new ReflectionProperty(\App\Services\Autopodbor\Agent\Study\DeepStudyCollector::class, 'reverse'))->getValue($deep); expect($reverse)->toBeInstanceOf(\App\Services\Autopodbor\Agent\Study\CompositePhoneReverse::class); }); it('только phone_reverse (без Яндекса) → reverse = 2ГИС-экспандер (не композит)', function () { config()->set('autopodbor.deep_study', true); config()->set('autopodbor.phone_reverse', true); config()->set('autopodbor.phone_reverse_yandex', false); $agent = app(\App\Services\Autopodbor\Agent\CompetitorAgent::class); $deep = (new ReflectionProperty(\App\Services\Autopodbor\Agent\RealCompetitorAgent::class, 'deep'))->getValue($agent); $reverse = (new ReflectionProperty(\App\Services\Autopodbor\Agent\Study\DeepStudyCollector::class, 'reverse'))->getValue($deep); expect($reverse)->toBeInstanceOf(\App\Services\Autopodbor\Agent\Study\PhoneReverseExpander::class); });