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,20 +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, mockPost, mockPut } = vi.hoisted(() => ({
|
||||
mockGet: vi.fn(),
|
||||
mockPost: vi.fn(),
|
||||
mockPut: vi.fn(),
|
||||
}));
|
||||
vi.mock("@/api/client.js", () => ({
|
||||
default: { get: mockGet, post: mockPost, put: mockPut },
|
||||
}));
|
||||
|
||||
import { useAllMapDataStore } from "@/stores/allMapData";
|
||||
|
||||
describe("allMapDataStore", () => {
|
||||
@@ -27,7 +21,7 @@ describe("allMapDataStore", () => {
|
||||
beforeEach(() => {
|
||||
setActivePinia(createPinia());
|
||||
store = useAllMapDataStore();
|
||||
vi.clearAllMocks();
|
||||
document.cookie = "luciaToken=fake-test-token";
|
||||
});
|
||||
|
||||
it("has correct default state", () => {
|
||||
@@ -45,11 +39,17 @@ describe("allMapDataStore", () => {
|
||||
stats: { cases: 10 },
|
||||
insights: {},
|
||||
};
|
||||
mockGet.mockResolvedValue({ data: mockData });
|
||||
server.use(
|
||||
http.get("/api/logs/:id/discover", ({ request }) => {
|
||||
captureRequest("GET", new URL(request.url).pathname);
|
||||
return HttpResponse.json(mockData);
|
||||
}),
|
||||
);
|
||||
|
||||
await store.getAllMapData();
|
||||
|
||||
expect(mockGet).toHaveBeenCalledWith("/api/logs/1/discover");
|
||||
const reqs = findRequest("GET", "/api/logs/1/discover");
|
||||
expect(reqs).toHaveLength(1);
|
||||
expect(store.allProcessMap).toEqual({ nodes: [] });
|
||||
expect(store.allStats).toEqual({ cases: 10 });
|
||||
});
|
||||
@@ -57,40 +57,52 @@ describe("allMapDataStore", () => {
|
||||
it("fetches temp filter discover data when set", async () => {
|
||||
store.logId = 1;
|
||||
store.tempFilterId = 5;
|
||||
mockGet.mockResolvedValue({
|
||||
data: {
|
||||
process_map: {},
|
||||
bpmn: {},
|
||||
stats: {},
|
||||
insights: {},
|
||||
},
|
||||
});
|
||||
server.use(
|
||||
http.get("/api/temp-filters/:id/discover", ({ request }) => {
|
||||
captureRequest("GET", new URL(request.url).pathname);
|
||||
return HttpResponse.json({
|
||||
process_map: {},
|
||||
bpmn: {},
|
||||
stats: {},
|
||||
insights: {},
|
||||
});
|
||||
}),
|
||||
);
|
||||
|
||||
await store.getAllMapData();
|
||||
|
||||
expect(mockGet).toHaveBeenCalledWith("/api/temp-filters/5/discover");
|
||||
const reqs = findRequest("GET", "/api/temp-filters/5/discover");
|
||||
expect(reqs).toHaveLength(1);
|
||||
});
|
||||
|
||||
it("fetches created filter discover data", async () => {
|
||||
store.logId = 1;
|
||||
store.createFilterId = 3;
|
||||
mockGet.mockResolvedValue({
|
||||
data: {
|
||||
process_map: {},
|
||||
bpmn: {},
|
||||
stats: {},
|
||||
insights: {},
|
||||
},
|
||||
});
|
||||
server.use(
|
||||
http.get("/api/filters/:id/discover", ({ request }) => {
|
||||
captureRequest("GET", new URL(request.url).pathname);
|
||||
return HttpResponse.json({
|
||||
process_map: {},
|
||||
bpmn: {},
|
||||
stats: {},
|
||||
insights: {},
|
||||
});
|
||||
}),
|
||||
);
|
||||
|
||||
await store.getAllMapData();
|
||||
|
||||
expect(mockGet).toHaveBeenCalledWith("/api/filters/3/discover");
|
||||
const reqs = findRequest("GET", "/api/filters/3/discover");
|
||||
expect(reqs).toHaveLength(1);
|
||||
});
|
||||
|
||||
it("does not throw on API failure", async () => {
|
||||
store.logId = 1;
|
||||
mockGet.mockRejectedValue(new Error("fail"));
|
||||
server.use(
|
||||
http.get("/api/logs/:id/discover", () =>
|
||||
new HttpResponse(null, { status: 500 }),
|
||||
),
|
||||
);
|
||||
|
||||
await expect(store.getAllMapData()).resolves.not.toThrow();
|
||||
});
|
||||
@@ -112,11 +124,18 @@ describe("allMapDataStore", () => {
|
||||
trace: [],
|
||||
attrs: [],
|
||||
};
|
||||
mockGet.mockResolvedValue({ data: mockData });
|
||||
server.use(
|
||||
http.get("/api/filters/params", ({ request }) => {
|
||||
const url = new URL(request.url);
|
||||
captureRequest("GET", url.pathname + url.search);
|
||||
return HttpResponse.json(mockData);
|
||||
}),
|
||||
);
|
||||
|
||||
await store.getFilterParams();
|
||||
|
||||
expect(mockGet).toHaveBeenCalledWith("/api/filters/params?log_id=1");
|
||||
const reqs = findRequest("GET", "/api/filters/params?log_id=1");
|
||||
expect(reqs).toHaveLength(1);
|
||||
expect(store.allFilterTask).toEqual(["A", "B"]);
|
||||
// Check that min_base and max_base are stored
|
||||
expect(store.allFilterTimeframe.x_axis.min_base).toBe(
|
||||
@@ -129,16 +148,20 @@ describe("allMapDataStore", () => {
|
||||
it("posts rule data and stores result", async () => {
|
||||
store.logId = 1;
|
||||
store.postRuleData = [{ type: "task" }];
|
||||
mockPost.mockResolvedValue({
|
||||
data: { result: true },
|
||||
});
|
||||
server.use(
|
||||
http.post("/api/filters/has-result", async ({ request }) => {
|
||||
const url = new URL(request.url);
|
||||
const body = await request.json();
|
||||
captureRequest("POST", url.pathname + url.search, body);
|
||||
return HttpResponse.json({ result: true });
|
||||
}),
|
||||
);
|
||||
|
||||
await store.checkHasResult();
|
||||
|
||||
expect(mockPost).toHaveBeenCalledWith(
|
||||
"/api/filters/has-result?log_id=1",
|
||||
[{ type: "task" }],
|
||||
);
|
||||
const reqs = findRequest("POST", "/api/filters/has-result?log_id=1");
|
||||
expect(reqs).toHaveLength(1);
|
||||
expect(reqs[0].body).toEqual([{ type: "task" }]);
|
||||
expect(store.hasResultRule).toBe(true);
|
||||
});
|
||||
});
|
||||
@@ -147,7 +170,11 @@ describe("allMapDataStore", () => {
|
||||
it("creates temp filter and stores id", async () => {
|
||||
store.logId = 1;
|
||||
store.postRuleData = [];
|
||||
mockPost.mockResolvedValue({ data: { id: 77 } });
|
||||
server.use(
|
||||
http.post("/api/temp-filters", () =>
|
||||
HttpResponse.json({ id: 77 }),
|
||||
),
|
||||
);
|
||||
|
||||
await store.addTempFilterId();
|
||||
|
||||
@@ -160,11 +187,20 @@ describe("allMapDataStore", () => {
|
||||
store.logId = 1;
|
||||
store.tempFilterId = 77;
|
||||
store.postRuleData = [{ type: "rule" }];
|
||||
mockPost.mockResolvedValue({ data: { id: 88 } });
|
||||
server.use(
|
||||
http.post("/api/filters", async ({ request }) => {
|
||||
const url = new URL(request.url);
|
||||
const body = await request.json();
|
||||
captureRequest("POST", url.pathname + url.search, body);
|
||||
return HttpResponse.json({ id: 88 });
|
||||
}),
|
||||
);
|
||||
|
||||
await store.addFilterId("myFilter");
|
||||
|
||||
expect(mockPost).toHaveBeenCalledWith("/api/filters?log_id=1", {
|
||||
const reqs = findRequest("POST", "/api/filters?log_id=1");
|
||||
expect(reqs).toHaveLength(1);
|
||||
expect(reqs[0].body).toEqual({
|
||||
name: "myFilter",
|
||||
rules: [{ type: "rule" }],
|
||||
});
|
||||
@@ -178,13 +214,19 @@ describe("allMapDataStore", () => {
|
||||
store.createFilterId = 88;
|
||||
store.tempFilterId = 77;
|
||||
store.postRuleData = [{ type: "updated" }];
|
||||
mockPut.mockResolvedValue({ status: 200 });
|
||||
server.use(
|
||||
http.put("/api/filters/:id", async ({ request, params }) => {
|
||||
const body = await request.json();
|
||||
captureRequest("PUT", `/api/filters/${params.id}`, body);
|
||||
return new HttpResponse(null, { status: 200 });
|
||||
}),
|
||||
);
|
||||
|
||||
await store.updateFilter();
|
||||
|
||||
expect(mockPut).toHaveBeenCalledWith("/api/filters/88", [
|
||||
{ type: "updated" },
|
||||
]);
|
||||
const reqs = findRequest("PUT", "/api/filters/88");
|
||||
expect(reqs).toHaveLength(1);
|
||||
expect(reqs[0].body).toEqual([{ type: "updated" }]);
|
||||
expect(store.isUpdateFilter).toBe(true);
|
||||
expect(store.tempFilterId).toBeNull();
|
||||
});
|
||||
@@ -194,7 +236,11 @@ describe("allMapDataStore", () => {
|
||||
it("does not crash when baseLogId is falsy", async () => {
|
||||
store.logId = 1;
|
||||
store.baseLogId = null;
|
||||
mockGet.mockResolvedValue({ data: [{ id: 1 }] });
|
||||
server.use(
|
||||
http.get("/api/logs/:id/traces", () =>
|
||||
HttpResponse.json([{ id: 1 }]),
|
||||
),
|
||||
);
|
||||
|
||||
await store.getAllTrace();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user