2025-10-25 16:48:43 +08:00
|
|
|
import "cross-fetch/polyfill";
|
|
|
|
|
import { vi } from "vitest";
|
|
|
|
|
import { server } from "./server";
|
|
|
|
|
|
|
|
|
|
const TAURI_ENDPOINT = "http://tauri.local";
|
|
|
|
|
|
|
|
|
|
vi.mock("@tauri-apps/api/core", () => ({
|
|
|
|
|
invoke: async (command: string, payload: Record<string, unknown> = {}) => {
|
|
|
|
|
const response = await fetch(`${TAURI_ENDPOINT}/${command}`, {
|
|
|
|
|
method: "POST",
|
|
|
|
|
headers: {
|
|
|
|
|
"Content-Type": "application/json",
|
|
|
|
|
},
|
|
|
|
|
body: JSON.stringify(payload ?? {}),
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (!response.ok) {
|
|
|
|
|
const text = await response.text();
|
|
|
|
|
throw new Error(text || `Invoke failed for ${command}`);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const text = await response.text();
|
|
|
|
|
if (!text) return undefined;
|
|
|
|
|
try {
|
|
|
|
|
return JSON.parse(text);
|
|
|
|
|
} catch {
|
|
|
|
|
return text;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
}));
|
|
|
|
|
|
2025-11-21 11:12:06 +08:00
|
|
|
const listeners = new Map<string, Set<(event: { payload: unknown }) => void>>();
|
2025-10-25 16:48:43 +08:00
|
|
|
|
|
|
|
|
const ensureListenerSet = (event: string) => {
|
|
|
|
|
if (!listeners.has(event)) {
|
|
|
|
|
listeners.set(event, new Set());
|
|
|
|
|
}
|
|
|
|
|
return listeners.get(event)!;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const emitTauriEvent = (event: string, payload: unknown) => {
|
|
|
|
|
const handlers = listeners.get(event);
|
|
|
|
|
handlers?.forEach((handler) => handler({ payload }));
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
vi.mock("@tauri-apps/api/event", () => ({
|
2025-11-21 11:12:06 +08:00
|
|
|
listen: async (
|
|
|
|
|
event: string,
|
|
|
|
|
handler: (event: { payload: unknown }) => void,
|
|
|
|
|
) => {
|
2025-10-25 16:48:43 +08:00
|
|
|
const set = ensureListenerSet(event);
|
|
|
|
|
set.add(handler);
|
|
|
|
|
return () => {
|
|
|
|
|
set.delete(handler);
|
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
|
}));
|
|
|
|
|
|
|
|
|
|
// Ensure the MSW server is referenced so tree shaking doesn't remove imports
|
|
|
|
|
void server;
|
|
|
|
|
|
2025-10-25 19:59:31 +08:00
|
|
|
vi.mock("@tauri-apps/api/path", () => ({
|
|
|
|
|
homeDir: async () => "/home/mock",
|
|
|
|
|
join: async (...segments: string[]) => segments.join("/"),
|
|
|
|
|
}));
|