Files
lucia-frontend/tests/stores/performance.test.js
2026-03-06 18:57:58 +08:00

90 lines
2.5 KiB
JavaScript

// The Lucia project.
// Copyright 2026-2026 DSP, inc. All rights reserved.
// Authors:
// imacat.yang@dsp.im (imacat), 2026/03/05
import { describe, it, expect, beforeEach, vi } from 'vitest';
import { setActivePinia, createPinia } from 'pinia';
vi.mock('@/module/apiError.js', () => ({
default: vi.fn(),
}));
const { mockGet } = vi.hoisted(() => ({ mockGet: vi.fn() }));
vi.mock('@/api/client.js', () => ({
default: { get: mockGet },
}));
import { usePerformanceStore } from '@/stores/performance';
describe('performanceStore', () => {
let store;
beforeEach(() => {
setActivePinia(createPinia());
store = usePerformanceStore();
vi.clearAllMocks();
});
it('has correct default state', () => {
expect(store.allPerformanceData).toBeNull();
expect(store.freqChartData).toBeNull();
});
it('performanceData getter returns allPerformanceData', () => {
store.allPerformanceData = { time: {}, freq: {} };
expect(store.performanceData).toEqual({ time: {}, freq: {} });
});
describe('getPerformance', () => {
it('fetches log performance data', async () => {
const mockData = { time: { charts: [] }, freq: { charts: [] } };
mockGet.mockResolvedValue({ data: mockData });
await store.getPerformance('log', 1);
expect(mockGet).toHaveBeenCalledWith(
'/api/logs/1/performance',
);
expect(store.allPerformanceData).toEqual(mockData);
});
it('fetches filter performance data', async () => {
mockGet.mockResolvedValue({ data: { time: {} } });
await store.getPerformance('filter', 5);
expect(mockGet).toHaveBeenCalledWith(
'/api/filters/5/performance',
);
});
it('does not throw on API failure', async () => {
mockGet.mockRejectedValue(new Error('Network error'));
// Should not throw - apiError handles it
await expect(store.getPerformance('log', 1))
.resolves.not.toThrow();
expect(store.allPerformanceData).toBeNull();
});
});
it('setFreqChartData sets data', () => {
const data = { labels: [], datasets: [] };
store.setFreqChartData(data);
expect(store.freqChartData).toEqual(data);
});
it('setFreqChartOptions sets options', () => {
const opts = { responsive: true };
store.setFreqChartOptions(opts);
expect(store.freqChartOptions).toEqual(opts);
});
it('setFreqChartXData sets x data', () => {
const xData = { minX: 0, maxX: 100 };
store.setFreqChartXData(xData);
expect(store.freqChartXData).toEqual(xData);
});
});