Files
portal/app/tests/Feature/Advertising/AdCreativeJobModelTest.php
T
Дмитрий 9234a9c2bc feat реклама показы: очередь заданий робота-грузчика, служебный канал и постановка при запуске
Портал ставит роботу задание, когда у баннеров ещё нет номеров креативов: вместо
ошибки клиент видит «готовим картинки», кампания остаётся черновиком, деньги не
морозятся. Робот берёт задания строго по одному — иначе слепки креативов до и
после перемешаются, и опознать их будет нельзя.

Канал робота закрыт своим сервис-токеном, внесён в исключения проверки CSRF и
отдаёт файл только того задания, которое сейчас в работе. Постановка задания
стоит внутри проверки рубильника Директа — при выключенном рубильнике портал в
Яндекс не ходит.

Права на новую таблицу выданы роли crm_admin_user: канал идёт через посредник
admin-db, подменяющий подключение. Нумератор выдан crm_app_user — он единственный
вставляет строки. Журнал схемы — запись v9.06.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 17:13:02 +03:00

35 lines
986 B
PHP

<?php
declare(strict_types=1);
use App\Models\AdCampaign;
use App\Models\AdCreativeJob;
use App\Models\Tenant;
use Illuminate\Foundation\Testing\DatabaseTransactions;
uses(DatabaseTransactions::class);
it('creates a queued creative job for a campaign', function () {
$tenant = Tenant::factory()->create();
$campaign = AdCampaign::create([
'tenant_id' => $tenant->id,
'name' => 'C',
'mode' => AdCampaign::MODE_MANUAL,
'audience_days' => 10,
'client_cpm_rub' => '120.00',
]);
$job = AdCreativeJob::create([
'tenant_id' => $tenant->id,
'campaign_id' => $campaign->id,
'status' => AdCreativeJob::STATUS_QUEUED,
'snapshot_before' => [111 => [300, 250]],
]);
$fresh = $job->fresh();
expect($fresh->status)->toBe('queued')
->and($fresh->attempts)->toBe(0)
->and($fresh->snapshot_before)->toBe(['111' => [300, 250]])
->and($fresh->failure_reason)->toBeNull();
});