a42647c6fe
Шаг 2 «Конкурентного поля»: один номер встречается в нескольких местах — код сайта плюс карточки 2ГИС/Яндекс с разными адресами. Раньше хранилось одно provenance_url/label — список терялся. Теперь сквозной провод движок→контракт→джоб→БД→API; фронт уже умел показывать кликабельным списком с подтверждениями. - autopodbor_sources +3 колонки where_found/office/confirmations миграция 2026_06_30_120000, идемпотентная, RLS-review APPROVE 7/7 - canon-sync schema.sql v8.59 плюс CHANGELOG, вкл. catch-up phone_type/box 29.06 - тесты бэкенда автоподбора 122/122 НЕ на проде, воркстри avtopodbor. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
49 lines
1.8 KiB
PHP
49 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace Tests\Doubles;
|
|
|
|
use App\Services\Autopodbor\Agent\CompetitorAgent;
|
|
use App\Services\Autopodbor\Agent\Dto\FindCompetitorsRequest;
|
|
use App\Services\Autopodbor\Agent\Dto\FindCompetitorsResult;
|
|
use App\Services\Autopodbor\Agent\Dto\ResolveByNameRequest;
|
|
use App\Services\Autopodbor\Agent\Dto\ResolveByNameResult;
|
|
use App\Services\Autopodbor\Agent\Dto\StudyCompetitorRequest;
|
|
use App\Services\Autopodbor\Agent\Dto\StudyCompetitorResult;
|
|
|
|
/**
|
|
* Тест-дубль: возвращает один телефон с богатым «где нашли»
|
|
* (список мест + офис + число подтверждений) — для проверки провода до БД и API.
|
|
*/
|
|
final class RichCompetitorAgent implements CompetitorAgent
|
|
{
|
|
public function findCompetitors(FindCompetitorsRequest $r): FindCompetitorsResult
|
|
{
|
|
return new FindCompetitorsResult([]);
|
|
}
|
|
|
|
public function studyCompetitor(StudyCompetitorRequest $r): StudyCompetitorResult
|
|
{
|
|
return new StudyCompetitorResult([
|
|
[
|
|
'signal_type' => 'call',
|
|
'identifier' => '73912920000',
|
|
'phone_kind' => 'real',
|
|
'phone_type' => 'city',
|
|
'provenance_url' => 'https://k.ru',
|
|
'provenance_label' => 'в коде сайта',
|
|
'where_found' => [
|
|
['label' => 'в коде сайта', 'url' => 'https://k.ru'],
|
|
['label' => '2ГИС · ул. Весны 7а', 'url' => 'https://2gis.ru/firm/1'],
|
|
],
|
|
'office' => 'Единая справочная',
|
|
'confirmations' => 2,
|
|
],
|
|
]);
|
|
}
|
|
|
|
public function resolveByName(ResolveByNameRequest $r): ResolveByNameResult
|
|
{
|
|
return new ResolveByNameResult([]);
|
|
}
|
|
}
|