80b85a7a02
Фаза 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>
34 lines
1.2 KiB
PHP
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');
|
|
});
|