2026-07-26 00:43:26 +03:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
declare(strict_types=1);
|
|
|
|
|
|
|
|
|
|
use App\Services\Advertising\AdImpressionPricing;
|
|
|
|
|
|
|
|
|
|
it('оценивает показы как аудитория × частота', function () {
|
2026-07-29 16:41:38 +03:00
|
|
|
$p = new AdImpressionPricing;
|
2026-07-26 00:43:26 +03:00
|
|
|
expect($p->impressionsForAudience(1630, 15))->toBe(24450);
|
|
|
|
|
expect($p->impressionsForAudience(0, 15))->toBe(0);
|
|
|
|
|
expect($p->impressionsForAudience(100, 1))->toBe(100);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('считает клиентскую сумму по 120 ₽ за 1000 показов, округляя ВВЕРХ до копейки', function () {
|
2026-07-29 16:41:38 +03:00
|
|
|
$p = new AdImpressionPricing;
|
2026-07-26 00:43:26 +03:00
|
|
|
expect($p->clientCostRub(24450, '120.00'))->toBe('2934.00');
|
|
|
|
|
expect($p->clientCostRub(1, '120.00'))->toBe('0.12');
|
|
|
|
|
expect($p->clientCostRub(7, '120.00'))->toBe('0.84');
|
|
|
|
|
expect($p->clientCostRub(0, '120.00'))->toBe('0.00');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('округляет неровную сумму вверх до копейки (клиент не недоплачивает)', function () {
|
2026-07-29 16:41:38 +03:00
|
|
|
$p = new AdImpressionPricing;
|
2026-07-26 00:43:26 +03:00
|
|
|
expect($p->clientCostRub(1, '125.00'))->toBe('0.13');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('считает маржу как списано клиенту минус расход Яндекса', function () {
|
2026-07-29 16:41:38 +03:00
|
|
|
$p = new AdImpressionPricing;
|
2026-07-26 00:43:26 +03:00
|
|
|
expect($p->marginRub('2934.00', '1956.00'))->toBe('978.00');
|
|
|
|
|
expect($p->marginRub('100.00', '100.00'))->toBe('0.00');
|
|
|
|
|
});
|