import { describe, it, expect } from 'vitest'; import { mount } from '@vue/test-utils'; import { createVuetify } from 'vuetify'; import ActivityChart from '../../resources/js/components/charts/ActivityChart.vue'; describe('ActivityChart.vue', () => { const factory = (props?: Record) => mount(ActivityChart, { props, global: { plugins: [createVuetify()] }, }); it('монтируется с дефолтными props и содержит заголовок', () => { const wrapper = factory(); expect(wrapper.text()).toContain('Активность по дням'); }); it('содержит 3 tab-кнопки (Принято/Оплачено/Отказ)', () => { const wrapper = factory(); const text = wrapper.text(); expect(text).toContain('Принято'); expect(text).toContain('Оплачено'); expect(text).toContain('Отказ'); }); it('рендерит SVG с 7 точками (по числу дней)', () => { const wrapper = factory(); const circles = wrapper.findAll('svg circle'); expect(circles).toHaveLength(7); }); it('содержит подпись «сегодня» для последней метки x-оси', () => { const wrapper = factory(); const xLabels = wrapper.findAll('.chart-axis-x').map((n) => n.text()); expect(xLabels[xLabels.length - 1]).toBe('сегодня'); }); it('принимает кастомные points через props', () => { const wrapper = factory({ points: [10, 20, 30, 40, 50, 60, 70], max: 100 }); const circles = wrapper.findAll('svg circle'); expect(circles).toHaveLength(7); }); it('содержит легенду с 3 dot-индикаторами', () => { const wrapper = factory(); expect(wrapper.findAll('.ldot')).toHaveLength(3); }); });