49 lines
1.8 KiB
PHP
49 lines
1.8 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
declare(strict_types=1);
|
||
|
|
|
||
|
|
use App\Models\SalesAdAudiencePhone;
|
||
|
|
use App\Models\SalesSmsCampaign;
|
||
|
|
use App\Models\SalesSmsMessage;
|
||
|
|
use App\Models\SalesSmsOptout;
|
||
|
|
use App\Models\SalesSmsSender;
|
||
|
|
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
||
|
|
use Tests\Concerns\SharesSupplierPdo;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* SharesSupplierPdo обязателен: модели sales_sms_* прибиты к pgsql_supplier
|
||
|
|
* (отдельный PDO), без шаринга DatabaseTransactions откатывал бы только
|
||
|
|
* соединение по умолчанию — записи текли бы из теста в тест.
|
||
|
|
*/
|
||
|
|
uses(DatabaseTransactions::class, SharesSupplierPdo::class);
|
||
|
|
|
||
|
|
it('все модели СМС живут на соединении поставщика', function () {
|
||
|
|
foreach ([SalesSmsSender::class, SalesSmsCampaign::class, SalesSmsMessage::class, SalesSmsOptout::class] as $class) {
|
||
|
|
expect((new $class)->getConnectionName())->toBe('pgsql_supplier');
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
it('связывает рассылку с её сообщениями', function () {
|
||
|
|
$campaign = SalesSmsCampaign::create([
|
||
|
|
'title' => 'Тест', 'body' => 'текст', 'created_by' => 1,
|
||
|
|
]);
|
||
|
|
|
||
|
|
SalesSmsMessage::create([
|
||
|
|
'campaign_id' => $campaign->id, 'phone' => '79990000001', 'status' => 'pending',
|
||
|
|
]);
|
||
|
|
|
||
|
|
expect($campaign->refresh()->messages)->toHaveCount(1);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('сохраняет оператора и тип у номера прогрева', function () {
|
||
|
|
$phone = SalesAdAudiencePhone::create([
|
||
|
|
'phone' => '79990000002',
|
||
|
|
'expires_at' => now()->addDays(30),
|
||
|
|
'operator' => 'ВымпелКом',
|
||
|
|
'phone_type' => 'mobile',
|
||
|
|
]);
|
||
|
|
|
||
|
|
expect($phone->refresh()->operator)->toBe('ВымпелКом')
|
||
|
|
->and($phone->phone_type)->toBe('mobile');
|
||
|
|
});
|