estimate(size: 1630, frequency: 15); expect($est['size'])->toBe(1630) ->and($est['frequency'])->toBe(15) ->and($est['impressions'])->toBe(24450) ->and($est['cpm_rub'])->toBe('120.00') ->and($est['cost_rub'])->toBe('2934.00') ->and($est['min'])->toBe(100) ->and($est['enough'])->toBeTrue(); }); it('помечает enough=false при аудитории меньше 100', function () { $svc = app(CampaignEstimateService::class); $est = $svc->estimate(size: 50, frequency: 10); expect($est['enough'])->toBeFalse()->and($est['impressions'])->toBe(500); }); it('уважает изменённую цену client_cpm_rub', function () { DB::table('ad_settings')->update(['client_cpm_rub' => '200.00']); $svc = app(CampaignEstimateService::class); $est = $svc->estimate(size: 1000, frequency: 10); expect($est['cpm_rub'])->toBe('200.00')->and($est['cost_rub'])->toBe('2000.00'); });