Files
portal/app/tests/Feature/Autopodbor/AutopodborDedupTest.php
T
2026-06-28 13:35:38 +03:00

44 lines
1.9 KiB
PHP

<?php
declare(strict_types=1);
use App\Models\Project;
use App\Models\Tenant;
use App\Services\Autopodbor\AutopodborDedup;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Support\Facades\DB;
uses(DatabaseTransactions::class, \Tests\Concerns\SharesSupplierPdo::class);
it('находит существующий проект клиента по типу+идентификатору', function () {
$tenant = Tenant::factory()->create();
DB::statement("SET LOCAL app.current_tenant_id = ".$tenant->id);
Project::factory()->create(['tenant_id' => $tenant->id, 'signal_type' => 'site', 'signal_identifier' => 'okna.ru']);
$dedup = app(AutopodborDedup::class);
expect($dedup->existingProjectId($tenant->id, 'site', 'https://www.okna.ru/'))->not->toBeNull() // нормализуется к okna.ru
->and($dedup->existingProjectId($tenant->id, 'site', 'drugoy.ru'))->toBeNull();
});
it('дедупит источники внутри списка', function () {
$dedup = app(AutopodborDedup::class);
$unique = $dedup->dedupSources([
['signal_type' => 'call', 'identifier' => '+7 843 200-11-22'],
['signal_type' => 'call', 'identifier' => '88432001122'], // тот же номер
['signal_type' => 'site', 'identifier' => 'www.okna.ru'],
]);
expect($unique)->toHaveCount(2);
expect($unique[0])->toHaveKey('dedup_key');
});
it('дедупит конкурентов', function () {
$dedup = app(AutopodborDedup::class);
$unique = $dedup->dedupCompetitors([
['name' => 'Окна Комфорт', 'site_url' => 'https://okna-komfort.ru/'],
['name' => 'Окна Комфорт', 'site_url' => 'okna-komfort.ru'], // тот же домен
['name' => 'Пластика Окон', 'site_url' => 'plastika.ru'],
]);
expect($unique)->toHaveCount(2);
expect($unique[0])->toHaveKey('dedup_key');
});