Files
portal/app/tests/Unit/Autopodbor/FakeCompetitorAgentTest.php
T
Дмитрий 3b9c1b8bdc feat(автоподбор): интерфейс движка CompetitorAgent + заглушка + binding
- CompetitorAgent interface: findCompetitors / studyCompetitor / resolveByName
- FakeCompetitorAgent: 4 конкурента, 5 источников, 1 кандидат по имени
- AutopodborServiceProvider: bind(CompetitorAgent → FakeCompetitorAgent)
- Регистрация провайдера в bootstrap/providers.php (Laravel 11+)
- Pest.php: extend TestCase для Unit/Autopodbor (контейнер в Unit-тестах)
- Тест: 1/1 PASS, 10 assertions

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-28 13:28:56 +03:00

21 lines
1.1 KiB
PHP

<?php
use App\Services\Autopodbor\Agent\CompetitorAgent;
use App\Services\Autopodbor\Agent\Dto\{FindCompetitorsRequest, StudyCompetitorRequest, ResolveByNameRequest};
it('заглушка резолвится через контейнер и отдаёт данные', function () {
$agent = app(CompetitorAgent::class);
expect($agent)->toBeInstanceOf(\App\Services\Autopodbor\Agent\FakeCompetitorAgent::class);
$found = $agent->findCompetitors(new FindCompetitorsRequest(16, ['okna.ru'], [], true, 15));
expect(count($found->competitors))->toBeGreaterThan(0)
->and($found->competitors[0])->toHaveKeys(['name','relevance_pct','site_url']);
$study = $agent->studyCompetitor(new StudyCompetitorRequest(['name'=>'Окна Комфорт','site_url'=>'okna-komfort-kzn.ru'], 16));
expect($study->sources)->not->toBeEmpty()
->and($study->sources[0])->toHaveKeys(['signal_type','identifier','provenance_url']);
$resolve = $agent->resolveByName(new ResolveByNameRequest('Окна Комфорт', 16));
expect($resolve->candidates)->not->toBeEmpty();
});