Files
portal/app/tests/Feature/Sales/RubricCanonicalizerTest.php
T

57 lines
2.2 KiB
PHP

<?php
declare(strict_types=1);
use App\Models\SalesAdAudienceFirm;
use App\Models\SalesProspect;
use App\Models\SalesUser;
use App\Services\Sales\RubricCanonicalizer;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Tests\Concerns\SharesSupplierPdo;
// SharesSupplierPdo: без него записи в pgsql_supplier (фирмы прогрева) НЕ откатываются
// и остаются в общей тестовой базе — соседние тесты потом считают чужие строки.
uses(DatabaseTransactions::class, SharesSupplierPdo::class);
function rc_user(): SalesUser
{
return SalesUser::create([
'name' => 'U '.uniqid(), 'email' => 'rc'.uniqid().'@s.local',
'password' => bcrypt('secret'), 'role' => 'manager', 'is_active' => true,
]);
}
test('совпал ключ — берём уже существующее написание', function () {
SalesProspect::factory()->for(rc_user(), 'salesUser')->create(['rubric' => 'Окна']);
$c = app(RubricCanonicalizer::class);
expect($c->canonical('окна'))->toBe('Окна')
->and($c->canonical(' ОКНА '))->toBe('Окна');
});
test('ключ не совпал — сохраняем как есть, только подчистив пробелы', function () {
SalesProspect::factory()->for(rc_user(), 'salesUser')->create(['rubric' => 'Окна']);
$c = app(RubricCanonicalizer::class);
expect($c->canonical(' Пластиковые окна '))->toBe('Пластиковые окна');
});
test('ниша из прогрева тоже считается существующей', function () {
SalesAdAudienceFirm::create([
'firm_name' => 'Ф', 'firm_inn' => '7700'.random_int(100000, 999999),
'rubric' => 'Частные стоматологии',
]);
expect(app(RubricCanonicalizer::class)->canonical('частные стоматологии'))
->toBe('Частные стоматологии');
});
test('пустая ниша даёт null', function () {
$c = app(RubricCanonicalizer::class);
expect($c->canonical(null))->toBeNull()
->and($c->canonical(' '))->toBeNull();
});