create(); $c = AdCampaign::create([ 'tenant_id' => $tenant->id, 'name' => 'Ручной режим', 'mode' => AdCampaign::MODE_MANUAL, 'audience_days' => 10, 'snapshot_from' => '2026-07-01', 'snapshot_to' => '2026-07-20', 'run_days' => 14, 'use_uploaded_list' => false, 'weekly_budget_rub' => '2500.00', 'client_cpm_rub' => '135.50', ]); expect($c->mode)->toBe(AdCampaign::MODE_MANUAL) ->and($c->snapshot_from)->toBeInstanceOf(Carbon::class) ->and($c->snapshot_from->format('Y-m-d'))->toBe('2026-07-01') ->and($c->snapshot_to->format('Y-m-d'))->toBe('2026-07-20') ->and($c->run_days)->toBe(14) ->and($c->run_days)->toBeInt() ->and($c->client_cpm_rub)->toBe('135.50'); }); it('дефолтный режим кампании — auto', function () { $tenant = Tenant::factory()->create(); $c = AdCampaign::create([ 'tenant_id' => $tenant->id, 'name' => 'Авто по умолчанию', 'audience_days' => 10, 'use_uploaded_list' => false, 'weekly_budget_rub' => '2500.00', ]); expect($c->mode)->toBe(AdCampaign::MODE_AUTO); }); it('effectiveCpm() возвращает свою цену кампании, если она задана', function () { $tenant = Tenant::factory()->create(); $c = AdCampaign::create([ 'tenant_id' => $tenant->id, 'name' => 'Своя цена', 'audience_days' => 10, 'use_uploaded_list' => false, 'weekly_budget_rub' => '2500.00', 'client_cpm_rub' => '99.90', ]); expect($c->effectiveCpm())->toBe('99.90'); }); it('effectiveCpm() возвращает дефолт ad_settings, если своя цена NULL', function () { DB::table('ad_settings')->update(['client_cpm_rub' => '150.00']); $tenant = Tenant::factory()->create(); $c = AdCampaign::create([ 'tenant_id' => $tenant->id, 'name' => 'Без своей цены', 'audience_days' => 10, 'use_uploaded_list' => false, 'weekly_budget_rub' => '2500.00', ]); expect($c->client_cpm_rub)->toBeNull() ->and($c->effectiveCpm())->toBe('150.00'); });