Files
portal/app/tests/Feature/Sales/AdAudienceFirmChannelModelTest.php
T
Дмитрий 80b85a7a02 feat(прогрев ф2): модель SalesAdAudienceFirmChannel + связь firmChannels на фирме
Фаза 2 Этап A, Task 2. Модель строки-канала (pgsql_supplier, касты
status/mode/warmed_times/warming_started_at, константа CHANNELS, связь firm()).
На SalesAdAudienceFirm — связь firmChannels() (hasMany) + помощник channel(code).

Связь названа firmChannels, а не channels: у фирмы уже есть старая колонка
channels (VARCHAR, страховка отката) — Eloquent при обращении $firm->channels
молча отдал бы старую строку вместо новых строк-каналов. Имя внутреннее,
на поведение не влияет. Помощник channel('yandex') читает через связь.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-22 14:48:06 +03:00

34 lines
1.2 KiB
PHP

<?php
declare(strict_types=1);
use App\Models\SalesAdAudienceFirm;
use App\Models\SalesAdAudienceFirmChannel;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Support\Carbon;
use Tests\Concerns\SharesSupplierPdo;
uses(DatabaseTransactions::class, SharesSupplierPdo::class);
it('создаёт канал через связь фирмы с верными кастами и хелпером channel()', function () {
$firm = SalesAdAudienceFirm::create(['firm_name' => 'Стоматология', 'firm_inn' => '7700000123']);
$channel = $firm->firmChannels()->create([
'channel' => 'yandex',
'status' => 'warming',
'mode' => 'funnel',
'warming_started_at' => now(),
'warmed_times' => 1,
]);
expect($channel)->toBeInstanceOf(SalesAdAudienceFirmChannel::class)
->and($channel->status)->toBeString()->toBe('warming')
->and($channel->mode)->toBeString()->toBe('funnel')
->and($channel->warmed_times)->toBeInt()->toBe(1)
->and($channel->warming_started_at)->toBeInstanceOf(Carbon::class);
$firm->refresh();
expect($firm->channel('yandex'))->not->toBeNull()
->and($firm->channel('yandex')->status)->toBe('warming');
});