From b7466ebfbd53df700bf114425661eff99901dab0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Wed, 20 May 2026 19:24:17 +0300 Subject: [PATCH] =?UTF-8?q?fix(admin):=20=D1=83=D0=B1=D1=80=D0=B0=D0=BD?= =?UTF-8?q?=D1=8B=20=D0=B7=D0=B0=D1=85=D0=B0=D1=80=D0=B4=D0=BA=D0=BE=D0=B6?= =?UTF-8?q?=D0=B5=D0=BD=D0=BD=D1=8B=D0=B5=20mock-=D1=81=D1=87=D1=91=D1=82?= =?UTF-8?q?=D1=87=D0=B8=D0=BA=D0=B8=20=D0=B2=20=D0=B0=D0=B4=D0=BC=D0=B8?= =?UTF-8?q?=D0=BD-=D0=BC=D0=B5=D0=BD=D1=8E=20(=D0=A2=D0=B5=D0=BD=D0=B0?= =?UTF-8?q?=D0=BD=D1=82=D1=8B=20142=20/=20=D0=98=D0=BD=D1=86=D0=B8=D0=B4?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D1=8B=203)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Бейджи показывали фиксированные 142/3, расходящиеся с реальными данными (5 тенантов, 0 открытых инцидентов) — вводили в заблуждение. Удалены; неверный бейдж хуже отсутствия. Живые счётчики — отдельная фича. TDD: AdminLayout.spec.ts (RED→GREEN). Co-Authored-By: Claude Opus 4.7 (1M context) --- app/resources/js/layouts/AdminLayout.vue | 4 ++-- app/tests/Frontend/AdminLayout.spec.ts | 17 +++++++++-------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/app/resources/js/layouts/AdminLayout.vue b/app/resources/js/layouts/AdminLayout.vue index f90b07ab..cb36e5b4 100644 --- a/app/resources/js/layouts/AdminLayout.vue +++ b/app/resources/js/layouts/AdminLayout.vue @@ -25,11 +25,11 @@ interface NavItem { } const navItems: NavItem[] = [ - { title: 'Тенанты', icon: 'mdi-account-group-outline', to: '/admin/tenants', count: 142 }, + { title: 'Тенанты', icon: 'mdi-account-group-outline', to: '/admin/tenants' }, { title: 'Биллинг', icon: 'mdi-credit-card-outline', to: '/admin/billing' }, { title: 'Тарифная сетка', icon: 'mdi-tag-arrow-right', to: '/admin/pricing-tiers' }, { title: 'Цены поставщиков', icon: 'mdi-currency-rub', to: '/admin/supplier-prices' }, - { title: 'Инциденты', icon: 'mdi-alert-outline', to: '/admin/incidents', count: 3 }, + { title: 'Инциденты', icon: 'mdi-alert-outline', to: '/admin/incidents' }, { title: 'Impersonation', icon: 'mdi-account-switch', to: '/admin/impersonation' }, { title: 'Система', icon: 'mdi-cog-outline', to: '/admin/system' }, { title: 'Интеграция с поставщиком', icon: 'mdi-swap-horizontal', to: '/admin/supplier-integration' }, diff --git a/app/tests/Frontend/AdminLayout.spec.ts b/app/tests/Frontend/AdminLayout.spec.ts index 21100558..88149213 100644 --- a/app/tests/Frontend/AdminLayout.spec.ts +++ b/app/tests/Frontend/AdminLayout.spec.ts @@ -9,9 +9,10 @@ import { useAuthStore } from '../../resources/js/stores/auth'; import type { AuthUser } from '../../resources/js/api/auth'; // AdminLayout содержит: -// - sidebar #012019 с brand-block «Лидерра.» + ADMIN метка + 7 nav-items -// (Тенанты 142 / Биллинг / Тарифная сетка / Цены поставщиков / Инциденты 3 / -// Impersonation / Система); +// - sidebar #012019 с brand-block «Лидерра.» + ADMIN метка + 9 nav-items +// (Тенанты / Биллинг / Тарифная сетка / Цены поставщиков / Инциденты / +// Impersonation / Система / Интеграция с поставщиком / Проекты у поставщика), +// без mock count-badge; // - topbar с breadcrumb («Админка › ») + user-menu; // - RouterView; DevIndexBadge. @@ -84,12 +85,12 @@ describe('AdminLayout.vue', () => { ); }); - it('показывает count-badge для Тенантов (142) и Инцидентов (3) и не для остальных', async () => { + it('не рендерит захардкоженные mock count-badge (live-счётчики — отдельная фича)', async () => { + // Ранее в nav были mock-счётчики Тенанты=142 / Инциденты=3, расходящиеся с реальными + // данными (5 тенантов / 0 открытых инцидентов). Удалены — неверный бейдж хуже отсутствия. const { wrapper } = await mountAdminLayout(); - const counts = wrapper.findAll('.nav-count').map((n) => n.text()); - expect(counts).toContain('142'); - expect(counts).toContain('3'); - expect(counts).toHaveLength(2); + const counts = wrapper.findAll('.nav-count'); + expect(counts).toHaveLength(0); }); it('breadcrumb на /admin/tenants показывает «Тенанты»', async () => {