85 lines
2.5 KiB
JavaScript
85 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);
|
|
});
|
|
});
|