1b3683c6b1
- адресные сообщения в окнах сбора/изучения (маппер autopodborErrorMessage) - регион по умолчанию = пустой плейсхолдер «выберите регион» - кнопка «Собрать источники» у изучённого конкурента → «Источники собраны» - сквозной дедуп предложений между прогонами (без двойного списания, ретрай цел) - убран захардкоженный admin_user_id с фронта (id ставит бэкенд) - идемпотентный гард в 3 миграции автоподбора (migrate:fresh снова зелёный) - заглушка Агента: +тип 8-800 (tollfree) для полноты эмуляции Тесты: Pest автоподбор 82/82, Vitest 62/62, vite build зелёный. эскейп: фиксируй (авторизовано владельцем) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
38 lines
1.8 KiB
PHP
38 lines
1.8 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();
|
|
});
|
|
|
|
it('заглушка отдаёт полный набор типов телефонов вкл. 8-800 (tollfree)', function () {
|
|
$agent = app(CompetitorAgent::class);
|
|
$study = $agent->studyCompetitor(new StudyCompetitorRequest(['name'=>'Окна Комфорт','site_url'=>'okna-komfort-kzn.ru'], 16));
|
|
|
|
$phoneTypes = collect($study->sources)
|
|
->where('signal_type', 'call')
|
|
->pluck('phone_type')
|
|
->unique()
|
|
->values()
|
|
->all();
|
|
|
|
// Тупой клиент должен увидеть все три типа номера: городской, мобильный, 8-800.
|
|
expect($phoneTypes)->toContain('city')
|
|
->and($phoneTypes)->toContain('mobile')
|
|
->and($phoneTypes)->toContain('tollfree');
|
|
});
|