Migrate Vitest store tests from vi.mock to MSW request handlers
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -5,16 +5,14 @@
|
||||
|
||||
import { describe, it, expect, beforeEach, vi } from "vitest";
|
||||
import { setActivePinia, createPinia } from "pinia";
|
||||
import { http, HttpResponse } from "msw";
|
||||
import { server } from "@/mocks/node.js";
|
||||
import { findRequest, captureRequest } from "@/mocks/request-log.js";
|
||||
|
||||
vi.mock("@/module/apiError.js", () => ({
|
||||
default: vi.fn(),
|
||||
}));
|
||||
|
||||
const { mockGet } = vi.hoisted(() => ({ mockGet: vi.fn() }));
|
||||
vi.mock("@/api/client.js", () => ({
|
||||
default: { get: mockGet },
|
||||
}));
|
||||
|
||||
import { useCompareStore } from "@/stores/compare";
|
||||
|
||||
describe("compareStore", () => {
|
||||
@@ -23,7 +21,7 @@ describe("compareStore", () => {
|
||||
beforeEach(() => {
|
||||
setActivePinia(createPinia());
|
||||
store = useCompareStore();
|
||||
vi.clearAllMocks();
|
||||
document.cookie = "luciaToken=fake-test-token";
|
||||
});
|
||||
|
||||
it("has correct default state", () => {
|
||||
@@ -39,17 +37,26 @@ describe("compareStore", () => {
|
||||
it("fetches compare data with encoded params", async () => {
|
||||
const params = [{ type: "log", id: 1 }];
|
||||
const mockData = { time: {}, freq: {} };
|
||||
mockGet.mockResolvedValue({ data: mockData });
|
||||
server.use(
|
||||
http.get("/api/compare", ({ request }) => {
|
||||
captureRequest("GET", new URL(request.url).pathname
|
||||
+ new URL(request.url).search);
|
||||
return HttpResponse.json(mockData);
|
||||
}),
|
||||
);
|
||||
|
||||
await store.getCompare(params);
|
||||
|
||||
const encoded = encodeURIComponent(JSON.stringify(params));
|
||||
expect(mockGet).toHaveBeenCalledWith(`/api/compare?datasets=${encoded}`);
|
||||
const reqs = findRequest("GET", `/api/compare?datasets=${encoded}`);
|
||||
expect(reqs).toHaveLength(1);
|
||||
expect(store.allCompareDashboardData).toEqual(mockData);
|
||||
});
|
||||
|
||||
it("does not throw on API failure", async () => {
|
||||
mockGet.mockRejectedValue(new Error("fail"));
|
||||
server.use(
|
||||
http.get("/api/compare", () => new HttpResponse(null, { status: 500 })),
|
||||
);
|
||||
|
||||
await expect(store.getCompare([])).resolves.not.toThrow();
|
||||
});
|
||||
@@ -57,43 +64,54 @@ describe("compareStore", () => {
|
||||
|
||||
describe("getStateData", () => {
|
||||
it("fetches log discover stats", async () => {
|
||||
mockGet.mockResolvedValue({
|
||||
data: { stats: { cases: 100 } },
|
||||
});
|
||||
server.use(
|
||||
http.get("/api/logs/:id/discover", ({ request }) => {
|
||||
captureRequest("GET", new URL(request.url).pathname);
|
||||
return HttpResponse.json({ stats: { cases: 100 } });
|
||||
}),
|
||||
);
|
||||
|
||||
const result = await store.getStateData("log", 1);
|
||||
|
||||
expect(mockGet).toHaveBeenCalledWith("/api/logs/1/discover");
|
||||
const reqs = findRequest("GET", "/api/logs/1/discover");
|
||||
expect(reqs).toHaveLength(1);
|
||||
expect(result).toEqual({ cases: 100 });
|
||||
});
|
||||
|
||||
it("fetches filter discover stats", async () => {
|
||||
mockGet.mockResolvedValue({
|
||||
data: { stats: { cases: 50 } },
|
||||
});
|
||||
server.use(
|
||||
http.get("/api/filters/:id/discover", ({ request }) => {
|
||||
captureRequest("GET", new URL(request.url).pathname);
|
||||
return HttpResponse.json({ stats: { cases: 50 } });
|
||||
}),
|
||||
);
|
||||
|
||||
const result = await store.getStateData("filter", 3);
|
||||
|
||||
expect(mockGet).toHaveBeenCalledWith("/api/filters/3/discover");
|
||||
const reqs = findRequest("GET", "/api/filters/3/discover");
|
||||
expect(reqs).toHaveLength(1);
|
||||
expect(result).toEqual({ cases: 50 });
|
||||
});
|
||||
|
||||
it("returns null for unknown type", async () => {
|
||||
const result = await store.getStateData("unknown", 1);
|
||||
|
||||
expect(mockGet).not.toHaveBeenCalled();
|
||||
const reqs = findRequest("GET", /\/api\//);
|
||||
expect(reqs).toHaveLength(0);
|
||||
expect(result).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
describe("getFileName", () => {
|
||||
it("finds file name by id", async () => {
|
||||
mockGet.mockResolvedValue({
|
||||
data: [
|
||||
{ id: 1, name: "file1.csv" },
|
||||
{ id: 2, name: "file2.csv" },
|
||||
],
|
||||
});
|
||||
server.use(
|
||||
http.get("/api/files", () =>
|
||||
HttpResponse.json([
|
||||
{ id: 1, name: "file1.csv" },
|
||||
{ id: 2, name: "file2.csv" },
|
||||
]),
|
||||
),
|
||||
);
|
||||
|
||||
const result = await store.getFileName(1);
|
||||
|
||||
@@ -101,9 +119,11 @@ describe("compareStore", () => {
|
||||
});
|
||||
|
||||
it("returns empty string for non-existent id", async () => {
|
||||
mockGet.mockResolvedValue({
|
||||
data: [{ id: 1, name: "file1.csv" }],
|
||||
});
|
||||
server.use(
|
||||
http.get("/api/files", () =>
|
||||
HttpResponse.json([{ id: 1, name: "file1.csv" }]),
|
||||
),
|
||||
);
|
||||
|
||||
const result = await store.getFileName(99);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user