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<string, unknown>) =>
        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);
    });
});
