Spaces:
Paused
Paused
| 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(); | |
| }); | |
| }); | |