Files
portal/app/tests/Frontend/ActivityChart.spec.ts
T

49 lines
1.9 KiB
TypeScript
Raw Normal View History

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);
});
});