import { describe, it, expect } from 'vitest'; import { mount } from '@vue/test-utils'; import { createVuetify } from 'vuetify'; import { createRouter, createMemoryHistory } from 'vue-router'; import AdminIncidentsView from '../../resources/js/views/admin/AdminIncidentsView.vue'; const mountView = async () => { const router = createRouter({ history: createMemoryHistory(), routes: [{ path: '/admin/incidents', component: AdminIncidentsView }], }); await router.push('/admin/incidents'); await router.isReady(); return mount(AdminIncidentsView, { global: { plugins: [createVuetify(), router] }, }); }; describe('AdminIncidentsView.vue', () => { it('монтируется и содержит заголовок «Инциденты»', async () => { const wrapper = await mountView(); expect(wrapper.text()).toContain('Инциденты'); }); it('содержит 3 stats: Открыто / Расследуется / РКН-уведомлений', async () => { const wrapper = await mountView(); const text = wrapper.text(); expect(text).toContain('Открыто'); expect(text).toContain('Расследуется'); expect(text).toContain('РКН-уведомлений'); }); it('содержит фильтр-toggle по статусам (5 значений)', async () => { const wrapper = await mountView(); const text = wrapper.text(); expect(text).toContain('Все'); expect(text).toContain('Открыты'); expect(text).toContain('Решены'); expect(text).toContain('Закрыты'); }); it('показывает PDN-breach с РКН pending chip', async () => { const wrapper = await mountView(); const text = wrapper.text(); expect(text).toContain('Утечка ПДн'); expect(text).toContain('РКН pending'); }); it('содержит incident_id в формате INC-YYYY-MMDD-NNNN', async () => { const wrapper = await mountView(); const text = wrapper.text(); expect(text).toContain('INC-2026-0507-0034'); expect(text).toContain('INC-2026-0506-0028'); }); });