55 lines
2.3 KiB
TypeScript
55 lines
2.3 KiB
TypeScript
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
|
|
const exists = vi.fn();
|
|
vi.mock("@/lib/redis/client", () => ({
|
|
getRedisClient: async () => ({ exists }),
|
|
discordWorkerHeartbeatKey: () => "buzz:events:discord-worker:heartbeat",
|
|
}));
|
|
|
|
const { checkSlip2Go, checkDiscordBot, checkLunaris } = await import("./services");
|
|
const originalFetch = globalThis.fetch;
|
|
const originalUrl = process.env.SLIP2GO_VERIFY_URL;
|
|
const originalSecret = process.env.SLIP2GO_API_SECRET;
|
|
const fetchMock = vi.fn();
|
|
|
|
describe("external service checks", () => {
|
|
beforeEach(() => {
|
|
vi.clearAllMocks();
|
|
globalThis.fetch = fetchMock as unknown as typeof fetch;
|
|
process.env.SLIP2GO_VERIFY_URL = "https://slip2go.example.test/verify";
|
|
process.env.SLIP2GO_API_SECRET = "secret";
|
|
});
|
|
|
|
afterEach(() => {
|
|
globalThis.fetch = originalFetch;
|
|
if (originalUrl === undefined) delete process.env.SLIP2GO_VERIFY_URL;
|
|
else process.env.SLIP2GO_VERIFY_URL = originalUrl;
|
|
if (originalSecret === undefined) delete process.env.SLIP2GO_API_SECRET;
|
|
else process.env.SLIP2GO_API_SECRET = originalSecret;
|
|
});
|
|
|
|
it("checks Slip2Go reachability without submitting a slip", async () => {
|
|
fetchMock.mockResolvedValue(new Response(null, { status: 405 }));
|
|
await expect(checkSlip2Go(AbortSignal.timeout(1000))).resolves.toBeUndefined();
|
|
expect(fetchMock).toHaveBeenCalledWith(
|
|
new URL("https://slip2go.example.test/verify"),
|
|
expect.objectContaining({ method: "HEAD", cache: "no-store" }),
|
|
);
|
|
fetchMock.mockResolvedValue(new Response(null, { status: 503 }));
|
|
await expect(checkSlip2Go(AbortSignal.timeout(1000))).rejects.toThrow("503");
|
|
});
|
|
|
|
it("requires a valid Lunaris version response", async () => {
|
|
fetchMock.mockResolvedValueOnce(Response.json({ version: "7.0.54" }));
|
|
await expect(checkLunaris(AbortSignal.timeout(1000))).resolves.toBeUndefined();
|
|
fetchMock.mockResolvedValueOnce(Response.json({ version: "invalid" }));
|
|
await expect(checkLunaris(AbortSignal.timeout(1000))).rejects.toThrow();
|
|
});
|
|
|
|
it("requires a live Discord worker heartbeat", async () => {
|
|
exists.mockResolvedValueOnce(1).mockResolvedValueOnce(0);
|
|
await expect(checkDiscordBot()).resolves.toBeUndefined();
|
|
await expect(checkDiscordBot()).rejects.toThrow("heartbeat");
|
|
});
|
|
});
|