f30c6612c0
По сверке прод-данных с реальностью (часть чисел вводила в заблуждение): - Финансы: +периоды 60 и 90 дней (крупные пополнения старше 30д теперь видны). - Здоровье: «инциденты» больше не считают авто-лог ошибок джоб (summary 'Автоматически:%') — раньше копилось 975 и держало красный ложно. Теперь: open_incidents = только реальные; добавлен job_errors_24h (повторяющиеся ошибки джоб за сутки) в подсистему queues. - Лиды: убраны обманчивый «% доставки» (это было «обработано», не доставлено) и «нераспределённые по менеджерам» (менеджеры не используются). Добавлено «получено от поставщика сегодня»; доставлено = реально созданные сегодня сделки. - Заказ: показаны дата снимка и полная картина (всего активных заказов / Σ лимита у поставщика) — сверка по снимку больше не выглядит занижено. Тесты: admin-срез 87 зелёных, unit 3/3, фронт 10/10. stan 0, pint/eslint/ type-check/build чисто. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
33 lines
1.2 KiB
PHP
33 lines
1.2 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
uses(DatabaseTransactions::class);
|
|
|
|
it('GET /api/admin/dashboard/supply возвращает группы и итоги', function () {
|
|
// supplier_projects не партиционирован — сеем напрямую. project_routing_snapshots
|
|
// партиционирована по дате → в тесте не сеем (контракт ответа проверяем; формула
|
|
// покрыта unit-тестом SupplyReconciliation).
|
|
DB::table('supplier_projects')->insert([
|
|
'platform' => 'B1', 'signal_type' => 'site', 'unique_key' => 'demo-x.ru',
|
|
'current_limit' => 50, 'sync_status' => 'ok',
|
|
'created_at' => now(), 'updated_at' => now(),
|
|
]);
|
|
|
|
$res = $this->getJson('/api/admin/dashboard/supply');
|
|
|
|
$res->assertOk();
|
|
$res->assertJsonStructure([
|
|
'snapshot_date',
|
|
'light',
|
|
'totals' => ['demand', 'formula', 'ordered', 'mismatches'],
|
|
'total_orders',
|
|
'total_limit',
|
|
'groups',
|
|
]);
|
|
expect($res->json('light'))->toBeIn(['green', 'red']);
|
|
});
|