Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions src/auth/session-store.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import assert from "node:assert/strict";
import { describe, it, vi } from "vitest";
import { loadSession } from "./session-store.js";

vi.mock("node:fs/promises", async (importOriginal) => {
const mod = await importOriginal<typeof import("node:fs/promises")>();
return {
...mod,
readFile: vi.fn(mod.readFile),
};
});

import { readFile } from "node:fs/promises";
import { sessionFilePath } from "../config/paths.js";

describe("loadSession", () => {
it("returns null when the session file is missing (ENOENT)", async () => {
vi.mocked(readFile).mockRejectedValueOnce(
Object.assign(new Error("File not found"), { code: "ENOENT" }),
);

const session = await loadSession();
assert.equal(session, null);
});

it("throws non-ENOENT errors when reading the session file fails", async () => {
vi.mocked(readFile).mockRejectedValueOnce(
Object.assign(new Error("Permission denied"), { code: "EACCES" }),
);

await assert.rejects(loadSession(), /Permission denied/);
});

it("returns the parsed session when the file exists and is valid", async () => {
const fakeSession = {
browserbaseSessionId: "fake-id",
publicationUrl: "https://example.substack.com",
createdAt: "2023-01-01T00:00:00.000Z",
updatedAt: "2023-01-01T00:00:00.000Z",
};
vi.mocked(readFile).mockResolvedValueOnce(JSON.stringify(fakeSession));

const session = await loadSession();
assert.deepEqual(session, fakeSession);
});
});
Loading