55 lines
2.5 KiB
PHP
55 lines
2.5 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
declare(strict_types=1);
|
||
|
|
|
||
|
|
use App\Models\SalesAdAudiencePhone;
|
||
|
|
use App\Services\Sales\AdAudienceIntake;
|
||
|
|
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
||
|
|
use Tests\Concerns\SharesSupplierPdo;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Task 11: оператор номера доезжает из «Поиска клиентов» в прогрев.
|
||
|
|
*
|
||
|
|
* Оператор и тип уже определены и ОПЛАЧЕНЫ ДаДате на стороне поисковика
|
||
|
|
* (phonecheck.py → provider/kind). Терялись они ровно на передаче: pick_ad_phones()
|
||
|
|
* отдавал голые строки. Без оператора маршрутизация СМС не может выбрать дешёвый канал.
|
||
|
|
*
|
||
|
|
* Приём обязан понимать ОБА формата разом: новый (словарь с оператором) и старый
|
||
|
|
* (голая строка). Python-служба переезжает не мгновенно — ломать приём нельзя.
|
||
|
|
*
|
||
|
|
* SharesSupplierPdo обязателен: SalesAdAudiencePhone прибит к pgsql_supplier
|
||
|
|
* (отдельный PDO), без шаринга DatabaseTransactions откатывал бы только соединение
|
||
|
|
* по умолчанию — записи текли бы из теста в тест и второй прогон падал бы на
|
||
|
|
* SQLSTATE[23505]. ПДн: только фиктивные номера 7999000000X.
|
||
|
|
*/
|
||
|
|
uses(DatabaseTransactions::class, SharesSupplierPdo::class);
|
||
|
|
|
||
|
|
it('сохраняет оператора, пришедшего из поиска клиентов', function () {
|
||
|
|
(new AdAudienceIntake)->ingest([[
|
||
|
|
'firm_name' => 'ООО Ромашка',
|
||
|
|
'firm_inn' => '7700000001',
|
||
|
|
'phones' => [
|
||
|
|
['phone' => '79990000001', 'operator' => 'ВымпелКом', 'phone_type' => 'mobile'],
|
||
|
|
],
|
||
|
|
]]);
|
||
|
|
|
||
|
|
$row = SalesAdAudiencePhone::where('phone', '79990000001')->first();
|
||
|
|
|
||
|
|
expect($row)->not->toBeNull()
|
||
|
|
->and($row->operator)->toBe('ВымпелКом')
|
||
|
|
->and($row->phone_type)->toBe('mobile');
|
||
|
|
});
|
||
|
|
|
||
|
|
it('принимает и старый формат — голый список номеров', function () {
|
||
|
|
(new AdAudienceIntake)->ingest([[
|
||
|
|
'firm_name' => 'ООО Старая',
|
||
|
|
'firm_inn' => '7700000002',
|
||
|
|
'phones' => ['79990000002'],
|
||
|
|
]]);
|
||
|
|
|
||
|
|
$row = SalesAdAudiencePhone::where('phone', '79990000002')->first();
|
||
|
|
|
||
|
|
expect($row)->not->toBeNull()
|
||
|
|
->and($row->operator)->toBeNull();
|
||
|
|
});
|