Files
portal/app/tests/Unit/PlatformWarmingDeciderTest.php
T

37 lines
1.5 KiB
PHP

<?php
declare(strict_types=1);
use App\Models\SalesAdAudienceFirm;
use App\Models\SalesAdAudiencePlatform;
use App\Services\Sales\PlatformWarmingDecider;
use Carbon\CarbonImmutable;
use Tests\TestCase;
// Модели вне контейнера Laravel не могут выставить datetime-cast атрибут
// (setAttribute → fromDateTime → getConnection() падает без резолвера
// соединений — резолвер регистрируется только при загрузке приложения).
// Файл сам просит контейнер, не трогая общий tests/Pest.php.
uses(TestCase::class);
it('одна фирма: на площадке с большим сроком active, с меньшим — stopped(ready_for_manager)', function () {
$now = CarbonImmutable::parse('2026-07-22 12:00:00');
$firm = new SalesAdAudienceFirm(['firm_name' => 'X']);
$firm->warmup_started_at = \Illuminate\Support\Carbon::parse('2026-07-18 12:00:00'); // 4 дня назад
$decider = new PlatformWarmingDecider();
$long = new SalesAdAudiencePlatform(['platform' => 'yandex']);
$long->warmup_days = 5;
$short = new SalesAdAudiencePlatform(['platform' => 'vk']);
$short->warmup_days = 3;
expect($decider->decide($firm, $long, null, $now)['state'])->toBe('active');
$shortDecision = $decider->decide($firm, $short, null, $now);
expect($shortDecision['state'])->toBe('stopped');
expect($shortDecision['reason'])->toBe('ready_for_manager');
});