Spaces:
Paused
Paused
File size: 2,364 Bytes
91ee702 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
vi.mock("../../config.js", () => ({
getConfig: vi.fn(() => ({
session: { ttl_minutes: 1, cleanup_interval_minutes: 1 },
})),
}));
import {
createSession,
validateSession,
deleteSession,
getSessionCount,
startSessionCleanup,
stopSessionCleanup,
_resetForTest,
} from "../dashboard-session.js";
beforeEach(() => {
_resetForTest();
});
afterEach(() => {
stopSessionCleanup();
_resetForTest();
});
describe("dashboard-session", () => {
it("createSession returns a session with id", () => {
const session = createSession();
expect(session.id).toBeTruthy();
expect(typeof session.id).toBe("string");
expect(session.expiresAt).toBeGreaterThan(Date.now());
});
it("validateSession returns true for valid session", () => {
const session = createSession();
expect(validateSession(session.id)).toBe(true);
});
it("validateSession returns false for nonexistent session", () => {
expect(validateSession("nonexistent")).toBe(false);
});
it("validateSession returns false for expired session", () => {
const session = createSession();
// Manually expire it
vi.spyOn(Date, "now").mockReturnValue(session.expiresAt + 1);
expect(validateSession(session.id)).toBe(false);
vi.restoreAllMocks();
});
it("deleteSession invalidates the session", () => {
const session = createSession();
expect(validateSession(session.id)).toBe(true);
deleteSession(session.id);
expect(validateSession(session.id)).toBe(false);
});
it("getSessionCount tracks correctly", () => {
expect(getSessionCount()).toBe(0);
createSession();
createSession();
expect(getSessionCount()).toBe(2);
});
it("cleanup removes expired sessions", () => {
vi.useFakeTimers();
const baseTime = Date.now();
const s1 = createSession();
const s2 = createSession();
expect(getSessionCount()).toBe(2);
// Expire both sessions (ttl_minutes=1 → 60_000ms)
vi.setSystemTime(baseTime + 60_001);
// Start cleanup and advance to trigger interval (cleanup_interval_minutes=1 → 60_000ms)
startSessionCleanup();
vi.advanceTimersByTime(60_001);
expect(validateSession(s1.id)).toBe(false);
expect(validateSession(s2.id)).toBe(false);
vi.useRealTimers();
});
});
|