Files
portal/app/tests/Feature/Sales/AdAudiencePlatformsMigrationTest.php
T
Дмитрий c6d9d24e4d feat(прогрев): таблица sales_ad_audience_platforms + модель площадки
Основа для разделения экрана "Реклама на кандидатов" на три
самостоятельные площадки (Яндекс/ВК/Телеграм). Новая таблица —
строка настроек на площадку (рубильник, порог запуска, синхронизация,
статус); колонки sales_ad_audience_state не удаляются — страховка
отката, как и channels в v8.80.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-21 10:50:48 +03:00

38 lines
1.6 KiB
PHP

<?php
declare(strict_types=1);
use App\Models\SalesAdAudiencePlatform;
use App\Models\SalesAdAudienceState;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Support\Facades\DB;
use Tests\Concerns\SharesSupplierPdo;
uses(DatabaseTransactions::class, SharesSupplierPdo::class);
it('создаёт три строки площадок с верными порогами', function () {
$rows = SalesAdAudiencePlatform::query()->pluck('min_phones', 'platform');
expect($rows)->toHaveKeys(['yandex', 'vk', 'mts'])
->and($rows['yandex'])->toBe(100)
->and($rows['vk'])->toBe(2000)
->and($rows['mts'])->toBe(5000);
});
it('переносит рубильник и сегмент Яндекса из state в строку yandex', function () {
SalesAdAudienceState::current()->update(['enabled' => true, 'yandex_segment_id' => 58034825]);
DB::connection('pgsql_supplier')->table('sales_ad_audience_platforms')->where('platform', 'yandex')->delete();
DB::connection('pgsql_supplier')->statement(<<<'SQL'
INSERT INTO sales_ad_audience_platforms
(platform, enabled, min_phones, external_id, last_synced_at, last_error, status, updated_at)
SELECT 'yandex', COALESCE(s.enabled, false), 100, s.yandex_segment_id, s.last_synced_at, s.last_error, 'ok', now()
FROM sales_ad_audience_state s WHERE s.id = true
ON CONFLICT (platform) DO NOTHING
SQL);
$yandex = SalesAdAudiencePlatform::forCode('yandex');
expect($yandex->enabled)->toBeTrue()
->and($yandex->external_id)->toBe(58034825);
});