2026-07-26 00:43:26 +03:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
declare(strict_types=1);
|
|
|
|
|
|
|
|
|
|
use App\Models\AdCampaign;
|
|
|
|
|
use App\Models\Tenant;
|
2026-08-02 01:15:44 +03:00
|
|
|
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
2026-07-26 00:43:26 +03:00
|
|
|
use Illuminate\Support\Facades\Schema;
|
|
|
|
|
|
2026-08-02 01:15:44 +03:00
|
|
|
// Откат после теста. Без него записи файла остаются в базе и роняют ЧУЖИЕ тесты:
|
|
|
|
|
// 01.08.2026 девятнадцать чужих проводок уронили денежную проверку приёмника МТС.
|
|
|
|
|
uses(DatabaseTransactions::class);
|
|
|
|
|
|
2026-07-26 00:43:26 +03:00
|
|
|
it('добавляет поля модели «за показы» в ad_campaigns', function () {
|
|
|
|
|
foreach ([
|
|
|
|
|
'frequency', 'frequency_period_days', 'estimated_impressions',
|
|
|
|
|
'paid_impressions', 'delivered_impressions', 'budget_rub',
|
|
|
|
|
'yandex_cost_rub', 'charged_client_rub',
|
|
|
|
|
] as $col) {
|
|
|
|
|
expect(Schema::hasColumn('ad_campaigns', $col))->toBeTrue("нет колонки {$col}");
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('позволяет создать кампанию БЕЗ weekly_budget_rub (клик-поле больше не обязательно)', function () {
|
|
|
|
|
$tenant = Tenant::factory()->create();
|
|
|
|
|
$c = AdCampaign::create([
|
|
|
|
|
'tenant_id' => $tenant->id,
|
|
|
|
|
'name' => 'Прогрев за показы',
|
|
|
|
|
'audience_days' => 30,
|
|
|
|
|
'use_uploaded_list' => true,
|
|
|
|
|
'frequency' => 15,
|
|
|
|
|
'estimated_impressions' => 24450,
|
|
|
|
|
'paid_impressions' => 24450,
|
|
|
|
|
'budget_rub' => '2934.00',
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
expect($c->status)->toBe(AdCampaign::STATUS_DRAFT)
|
|
|
|
|
->and($c->weekly_budget_rub)->toBeNull()
|
|
|
|
|
->and($c->frequency)->toBe(15)
|
|
|
|
|
->and($c->estimated_impressions)->toBe(24450)
|
|
|
|
|
->and($c->delivered_impressions)->toBe(0)
|
|
|
|
|
->and($c->budget_rub)->toBe('2934.00');
|
|
|
|
|
});
|