create(['organization_name' => 'Окна Москва']); $campaign = AdCampaign::create([ 'tenant_id' => $tenant->id, 'name' => 'Кампания', 'status' => AdCampaign::STATUS_REJECTED, 'audience_days' => 10, 'budget_rub' => '500.00', ]); $banner = AdCampaignBanner::create([ 'tenant_id' => $tenant->id, 'campaign_id' => $campaign->id, 'width' => 300, 'height' => 250, 'bytes' => 1000, 'included' => true, 'path' => "ad-banners/{$tenant->id}/{$campaign->id}/300x250.jpg", 'yandex_ad_id' => 17787055204, ]); $job = AdCreativeJob::create([ 'tenant_id' => $tenant->id, 'campaign_id' => $campaign->id, 'kind' => $kind, 'status' => $status, 'yandex_ad_id' => $banner->yandex_ad_id, 'failure_reason' => 'разметка не совпала: окна BannerStatusCell.Popup нет', 'finished_at' => now(), ]); return [$tenant, $campaign, $job]; } test('в списке ждёт разбора видно кампанию, где разведка сорвалась', function () { [$tenant, $campaign] = stuckSetup(AdCreativeJob::STATUS_FAILED); $r = $this->getJson('/api/admin/advertising/robot-stuck'); $r->assertStatus(200); $row = collect($r->json('data'))->firstWhere('campaign_id', $campaign->id); expect($row)->not->toBeNull() ->and($row['tenant_name'])->toBe('Окна Москва') ->and($row['failure_reason'])->toContain('разметка не совпала') ->and((int) $row['yandex_ad_id'])->toBe(17787055204); }); /** Удачная разведка разбора не ждёт — она уже всё рассказала клиенту в переписке. */ test('удачная разведка в список ждёт разбора не попадает', function () { [, $campaign] = stuckSetup(AdCreativeJob::STATUS_DONE); $r = $this->getJson('/api/admin/advertising/robot-stuck'); expect(collect($r->json('data'))->firstWhere('campaign_id', $campaign->id))->toBeNull(); }); /** * Сорванная ЗАЛИВКА картинок — тоже сбой робота, и владельцу её видеть надо: кампания * стоит и не запускается. Список один на все виды заданий. */ test('сорванная заливка картинок в списке тоже видна', function () { [, $campaign] = stuckSetup(AdCreativeJob::STATUS_FAILED, AdCreativeJob::KIND_UPLOAD); $r = $this->getJson('/api/admin/advertising/robot-stuck'); expect(collect($r->json('data'))->firstWhere('campaign_id', $campaign->id))->not->toBeNull(); });