// Tests for handlers.ts // These tests use mock Call objects import assert from "node:assert/strict"; import { describe, it } from "node:test"; import type { Request as ExpressRequest } from "express"; import { Session } from "./diachron/auth/types"; import { contentTypes } from "./diachron/content-types"; import { multiHandler } from "./handlers"; import { httpCodes } from "./diachron/http-codes"; import type { Call } from "./diachron/types"; import { anonymousUser } from "./diachron/user"; // Helper to create a minimal mock Call function createMockCall(overrides: Partial = {}): Call { const defaultSession = new Session(null, anonymousUser); return { pattern: "/test", path: "/test", method: "GET", parameters: {}, request: {} as ExpressRequest, user: anonymousUser, session: defaultSession, ...overrides, }; } describe("handlers", () => { describe("multiHandler", () => { it("returns OK status", async () => { const call = createMockCall({ method: "GET" }); const result = await multiHandler(call); assert.equal(result.code, httpCodes.success.OK); }); it("returns text/plain content type", async () => { const call = createMockCall(); const result = await multiHandler(call); assert.equal(result.contentType, contentTypes.text.plain); }); it("includes method in result", async () => { const call = createMockCall({ method: "POST" }); const result = await multiHandler(call); assert.ok(result.result.includes("POST")); }); it("includes a random number in result", async () => { const call = createMockCall(); const result = await multiHandler(call); // Result format: "that was GET (0.123456789)" assert.match(result.result, /that was \w+ \(\d+\.?\d*\)/); }); it("works with different HTTP methods", async () => { const methods = ["GET", "POST", "PUT", "PATCH", "DELETE"] as const; for (const method of methods) { const call = createMockCall({ method }); const result = await multiHandler(call); assert.ok(result.result.includes(method)); } }); }); });