77498df63b
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
44 lines
1.9 KiB
PHP
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');
|
|
});
|