import { describe, it, expect, beforeEach } from 'vitest'; import { mount, flushPromises } from '@vue/test-utils'; import { createPinia, setActivePinia } from 'pinia'; import { createVuetify } from 'vuetify'; import { createMemoryHistory, createRouter } from 'vue-router'; import DealsView from '../../resources/js/views/DealsView.vue'; function setup() { setActivePinia(createPinia()); const router = createRouter({ history: createMemoryHistory(), routes: [{ path: '/deals', component: DealsView }] }); router.push('/deals'); return mount(DealsView, { global: { plugins: [router, createVuetify()], stubs: { RouterLink: true, VDataTable: true }, }, }); } describe('DealsView — redesigned', () => { beforeEach(() => localStorage.clear()); it('renders filterbar with at least 3 FilterChips', async () => { const w = setup(); await flushPromises(); const chips = w.findAll('.ld-filter-chip'); expect(chips.length).toBeGreaterThanOrEqual(3); }); it('renders DensityToggle in filterbar', async () => { const w = setup(); await flushPromises(); expect(w.find('.ld-density-toggle').exists()).toBe(true); }); it('row uses StatusPill component for status column', async () => { const w = setup(); await flushPromises(); // After data load — at least one ld-status-pill should be present // (если stub VDataTable — test проверяет наличие компонента в template, не в render) expect(w.html()).toMatch(/ld-status-pill|StatusPill/); }); it('applies ld-hover-lift utility class to table container or row wrapper', async () => { const w = setup(); await flushPromises(); expect(w.html()).toMatch(/ld-hover-lift|hover-lift/); }); it('applies ld-stagger-row class to deal rows (motion #2)', async () => { const w = setup(); await flushPromises(); expect(w.html()).toMatch(/ld-stagger-row/); }); });