61 lines
2.7 KiB
PHP
61 lines
2.7 KiB
PHP
|
|
<?php
|
|||
|
|
|
|||
|
|
declare(strict_types=1);
|
|||
|
|
|
|||
|
|
use Illuminate\Database\QueryException;
|
|||
|
|
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
|||
|
|
use Illuminate\Support\Facades\DB;
|
|||
|
|
use Tests\Concerns\SharesSupplierPdo;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* SharesSupplierPdo обязателен: таблицы sales_* сидят на отдельном соединении
|
|||
|
|
* pgsql_supplier, и без шаринга PDO откат отменял бы только соединение по
|
|||
|
|
* умолчанию — вставленные кампании копились бы от прогона к прогону.
|
|||
|
|
*
|
|||
|
|
* Здесь это до поры незаметно (уникальность по (campaign_id, phone), а номер
|
|||
|
|
* кампании каждый раз новый), но осадок реален и рванёт при первой же проверке
|
|||
|
|
* вида «в таблице ровно N строк».
|
|||
|
|
*/
|
|||
|
|
uses(DatabaseTransactions::class, SharesSupplierPdo::class);
|
|||
|
|
|
|||
|
|
it('создаёт четыре таблицы СМС на соединении поставщика', function () {
|
|||
|
|
$db = DB::connection('pgsql_supplier');
|
|||
|
|
|
|||
|
|
foreach (['sales_sms_senders', 'sales_sms_campaigns', 'sales_sms_messages', 'sales_sms_optouts'] as $table) {
|
|||
|
|
expect($db->getSchemaBuilder()->hasTable($table))->toBeTrue("нет таблицы {$table}");
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
it('заводит tenant_id во всех таблицах СМС — задел под клиентов', function () {
|
|||
|
|
$db = DB::connection('pgsql_supplier')->getSchemaBuilder();
|
|||
|
|
|
|||
|
|
foreach (['sales_sms_senders', 'sales_sms_campaigns', 'sales_sms_optouts'] as $table) {
|
|||
|
|
expect($db->hasColumn($table, 'tenant_id'))->toBeTrue("нет tenant_id в {$table}");
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
it('добавляет оператора и тип номера в таблицу номеров прогрева', function () {
|
|||
|
|
$db = DB::connection('pgsql_supplier')->getSchemaBuilder();
|
|||
|
|
|
|||
|
|
expect($db->hasColumn('sales_ad_audience_phones', 'operator'))->toBeTrue();
|
|||
|
|
expect($db->hasColumn('sales_ad_audience_phones', 'phone_type'))->toBeTrue();
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
it('запрещает два одинаковых номера внутри одной рассылки', function () {
|
|||
|
|
$db = DB::connection('pgsql_supplier');
|
|||
|
|
|
|||
|
|
$campaignId = $db->table('sales_sms_campaigns')->insertGetId([
|
|||
|
|
'title' => 'Проверка', 'body' => 'текст', 'status' => 'draft', 'created_by' => 1,
|
|||
|
|
]);
|
|||
|
|
|
|||
|
|
$row = [
|
|||
|
|
'campaign_id' => $campaignId, 'phone' => '79990000001',
|
|||
|
|
'status' => 'pending', 'segments' => 1, 'cost_kopecks' => 0,
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
$db->table('sales_sms_messages')->insert($row);
|
|||
|
|
|
|||
|
|
expect(fn () => $db->table('sales_sms_messages')->insert($row))
|
|||
|
|
->toThrow(QueryException::class);
|
|||
|
|
});
|