87 lines
3.1 KiB
PHP
87 lines
3.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use App\Models\SalesProspect;
|
|
use App\Models\SalesUser;
|
|
use App\Services\Sales\ProspectRubricBackfill;
|
|
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
|
|
|
uses(DatabaseTransactions::class);
|
|
|
|
function prb_user(): SalesUser
|
|
{
|
|
return SalesUser::create([
|
|
'name' => 'U '.uniqid(), 'email' => 'prb'.uniqid().'@s.local',
|
|
'password' => bcrypt('secret'), 'role' => 'manager', 'is_active' => true,
|
|
]);
|
|
}
|
|
|
|
test('находит по ИНН', function () {
|
|
$p = SalesProspect::factory()->for(prb_user(), 'salesUser')
|
|
->create(['inn' => '7705123456', 'rubric' => null]);
|
|
|
|
$res = app(ProspectRubricBackfill::class)->apply([
|
|
['rubric' => 'Окна', 'inn' => '7705123456'],
|
|
]);
|
|
|
|
expect($p->fresh()->rubric)->toBe('Окна')
|
|
->and($res['filled'])->toBe(1);
|
|
});
|
|
|
|
test('находит по сайту, не глядя на схему, www и путь', function () {
|
|
$p = SalesProspect::factory()->for(prb_user(), 'salesUser')
|
|
->create(['inn' => null, 'site' => 'https://WWW.Okoniks.ru/about', 'rubric' => null]);
|
|
|
|
app(ProspectRubricBackfill::class)->apply([
|
|
['rubric' => 'Окна', 'site' => 'okoniks.ru'],
|
|
]);
|
|
|
|
expect($p->fresh()->rubric)->toBe('Окна');
|
|
});
|
|
|
|
test('находит по названию и городу', function () {
|
|
$p = SalesProspect::factory()->for(prb_user(), 'salesUser')
|
|
->create(['inn' => null, 'site' => null, 'firm_name' => 'ООО «Оконикс»', 'city' => 'Мытищи', 'rubric' => null]);
|
|
|
|
app(ProspectRubricBackfill::class)->apply([
|
|
['rubric' => 'Окна', 'firm_name' => 'ООО Оконикс', 'city' => 'мытищи'],
|
|
]);
|
|
|
|
expect($p->fresh()->rubric)->toBe('Окна');
|
|
});
|
|
|
|
test('уже проставленную нишу не трогает', function () {
|
|
$p = SalesProspect::factory()->for(prb_user(), 'salesUser')
|
|
->create(['inn' => '7705999999', 'rubric' => 'Кровля']);
|
|
|
|
$res = app(ProspectRubricBackfill::class)->apply([
|
|
['rubric' => 'Окна', 'inn' => '7705999999'],
|
|
]);
|
|
|
|
expect($p->fresh()->rubric)->toBe('Кровля')
|
|
->and($res['filled'])->toBe(0)
|
|
->and($res['not_found'])->toBe(1);
|
|
});
|
|
|
|
test('одна фирма у двух менеджеров — ниша обеим', function () {
|
|
$a = SalesProspect::factory()->for(prb_user(), 'salesUser')->create(['inn' => '7705777777', 'rubric' => null]);
|
|
$b = SalesProspect::factory()->for(prb_user(), 'salesUser')->create(['inn' => '7705777777', 'rubric' => null]);
|
|
|
|
$res = app(ProspectRubricBackfill::class)->apply([
|
|
['rubric' => 'Окна', 'inn' => '7705777777'],
|
|
]);
|
|
|
|
expect($a->fresh()->rubric)->toBe('Окна')
|
|
->and($b->fresh()->rubric)->toBe('Окна')
|
|
->and($res['filled'])->toBe(2);
|
|
});
|
|
|
|
test('ничего не совпало — считаем непроставленным', function () {
|
|
$res = app(ProspectRubricBackfill::class)->apply([
|
|
['rubric' => 'Окна', 'inn' => '9999999999'],
|
|
]);
|
|
|
|
expect($res['filled'])->toBe(0)->and($res['not_found'])->toBe(1);
|
|
});
|