c6d9d24e4d
Основа для разделения экрана "Реклама на кандидатов" на три самостоятельные площадки (Яндекс/ВК/Телеграм). Новая таблица — строка настроек на площадку (рубильник, порог запуска, синхронизация, статус); колонки sales_ad_audience_state не удаляются — страховка отката, как и channels в v8.80. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
38 lines
1.6 KiB
PHP
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);
|
|
});
|