route.test.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import { describe, it, expect, vi, beforeEach } from "vitest";
  2. // 1) Mock for destroySession
  3. vi.mock("@/lib/auth/session", () => ({
  4. destroySession: vi.fn(),
  5. }));
  6. // 2) Import after mock
  7. import { destroySession } from "@/lib/auth/session";
  8. import { GET, dynamic } from "./route.js";
  9. describe("GET /api/auth/logout", () => {
  10. beforeEach(() => {
  11. vi.clearAllMocks();
  12. });
  13. it('exports dynamic="force-dynamic" (RHL-006)', () => {
  14. expect(dynamic).toBe("force-dynamic");
  15. });
  16. it("calls destroySession and returns ok: true", async () => {
  17. const response = await GET();
  18. const json = await response.json();
  19. expect(destroySession).toHaveBeenCalledTimes(1);
  20. expect(response.status).toBe(200);
  21. expect(json).toEqual({ ok: true });
  22. });
  23. it("returns 500 when destroySession throws an error", async () => {
  24. destroySession.mockImplementation(() => {
  25. throw new Error("boom");
  26. });
  27. const response = await GET();
  28. const body = await response.json();
  29. expect(destroySession).toHaveBeenCalledTimes(1);
  30. expect(response.status).toBe(500);
  31. expect(body).toEqual({
  32. error: {
  33. message: "Internal server error",
  34. code: "INTERNAL_SERVER_ERROR",
  35. },
  36. });
  37. });
  38. });