49 lines
1.9 KiB
TypeScript
49 lines
1.9 KiB
TypeScript
|
|
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);
|
||
|
|
});
|
||
|
|
});
|