fbbe49dac6
- config yandex_direct.spend_limit_guard_multiplier — бэкстоп от перерасхода, не клиентская цена - миграция ad_campaigns.yandex_creative_id nullable + точечный GRANT UPDATE админ-роли с гардом - модель AdCampaign: yandex_creative_id в fillable и casts integer - тесты: config-набор и миграция зелёные, реклама-набор не сломан - CHANGELOG схемы v9.01; план Части 4 и findings контракта медийного API Директа Часть B «мотор» ещё впереди: медийные методы клиента, переписанный запускатор, контроллер. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
20 lines
741 B
PHP
20 lines
741 B
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use App\Models\AdCampaign;
|
|
use Illuminate\Support\Facades\Schema;
|
|
|
|
it('добавляет yandex_creative_id в ad_campaigns как nullable', function () {
|
|
expect(Schema::hasColumn('ad_campaigns', 'yandex_creative_id'))->toBeTrue();
|
|
});
|
|
|
|
it('модель AdCampaign позволяет задать и прочитать yandex_creative_id как integer', function () {
|
|
$campaign = new AdCampaign();
|
|
$campaign->fill(['yandex_creative_id' => '123456789']);
|
|
|
|
expect($campaign->yandex_creative_id)->toBe(123456789)
|
|
->and($campaign->getCasts()['yandex_creative_id'] ?? null)->toBe('integer')
|
|
->and(in_array('yandex_creative_id', $campaign->getFillable(), true))->toBeTrue();
|
|
});
|