From 5438dfde3dfa512695021b3b93371089ded8242d Mon Sep 17 00:00:00 2001 From: dcruzeneil2 <247271309+dcruzeneil2@users.noreply.github.com> Date: Mon, 3 Aug 2026 19:37:41 +0000 Subject: [PATCH] Add logout button to docs page --- app/docs/route.test.ts | 32 +++++++++++++++++++++++++ app/docs/route.ts | 4 +++- app/logout/route.test.ts | 50 ++++++++++++++++++++++++++++++++++++++++ app/logout/route.ts | 22 ++++++++++++++++++ lib/auth/session.ts | 5 ++++ 5 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 app/docs/route.test.ts create mode 100644 app/logout/route.test.ts create mode 100644 app/logout/route.ts diff --git a/app/docs/route.test.ts b/app/docs/route.test.ts new file mode 100644 index 0000000..e849edc --- /dev/null +++ b/app/docs/route.test.ts @@ -0,0 +1,32 @@ +import { beforeEach, describe, expect, it, vi } from "vitest"; + +const mocks = vi.hoisted(() => ({ + getSession: vi.fn(), + listDocs: vi.fn(), + listSharedDocs: vi.fn(), +})); + +vi.mock("@/lib/auth/session", () => ({ getSession: mocks.getSession })); +vi.mock("@/lib/docs/store", () => ({ + listDocs: mocks.listDocs, + listSharedDocs: mocks.listSharedDocs, +})); +vi.mock("@/lib/db", () => ({ query: vi.fn() })); + +import { GET } from "@/app/docs/route"; + +describe("GET /docs", () => { + beforeEach(() => { + mocks.getSession.mockResolvedValue({ id: 1, email: "user@example.com", user_id: 1 }); + mocks.listDocs.mockResolvedValue([]); + mocks.listSharedDocs.mockResolvedValue([]); + }); + + it("shows a logout button for the current session", async () => { + const res = await GET(new Request("https://justhtml.sh/docs")); + const html = await res.text(); + + expect(html).toContain('