Spaces:
Running
Running
| import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; | |
| const mockFetch = vi.fn(); | |
| vi.stubGlobal("fetch", mockFetch); | |
| vi.mock("./logEntries", () => ({ | |
| addLogEntry: vi.fn(), | |
| })); | |
| vi.stubGlobal("VITE_ACCESS_KEY_TIMEOUT_HOURS", 24); | |
| describe("Access Key Module", () => { | |
| beforeEach(() => { | |
| vi.clearAllMocks(); | |
| localStorage.clear(); | |
| }); | |
| afterEach(() => { | |
| vi.restoreAllMocks(); | |
| localStorage.clear(); | |
| }); | |
| describe("validateAccessKey", () => { | |
| it("should return true for valid access key", async () => { | |
| const { validateAccessKey } = await import("./accessKey"); | |
| mockFetch.mockResolvedValue({ | |
| ok: true, | |
| json: vi.fn().mockResolvedValue({ valid: true }), | |
| }); | |
| const result = await validateAccessKey("test-key-123"); | |
| expect(result).toBe(true); | |
| expect(mockFetch).toHaveBeenCalled(); | |
| }); | |
| it("should return false for invalid access key", async () => { | |
| const { validateAccessKey } = await import("./accessKey"); | |
| mockFetch.mockResolvedValue({ | |
| ok: true, | |
| json: vi.fn().mockResolvedValue({ valid: false }), | |
| }); | |
| const result = await validateAccessKey("invalid-key"); | |
| expect(result).toBe(false); | |
| }); | |
| it("should return false on network error", async () => { | |
| const { validateAccessKey } = await import("./accessKey"); | |
| mockFetch.mockRejectedValue(new Error("Network error")); | |
| const result = await validateAccessKey("test-key"); | |
| expect(result).toBe(false); | |
| }); | |
| it("should return false when response is not ok", async () => { | |
| const { validateAccessKey } = await import("./accessKey"); | |
| mockFetch.mockResolvedValue({ | |
| ok: false, | |
| status: 401, | |
| }); | |
| const result = await validateAccessKey("test-key"); | |
| expect(result).toBe(false); | |
| }); | |
| }); | |
| describe("verifyStoredAccessKey", () => { | |
| it("should return true when stored key is valid", async () => { | |
| const { verifyStoredAccessKey } = await import("./accessKey"); | |
| mockFetch.mockResolvedValue({ | |
| ok: true, | |
| json: vi.fn().mockResolvedValue({ valid: true }), | |
| }); | |
| localStorage.setItem( | |
| "accessKeyHash", | |
| JSON.stringify({ hash: "test-hash", timestamp: Date.now() }), | |
| ); | |
| const result = await verifyStoredAccessKey(); | |
| expect(result).toBe(true); | |
| }); | |
| it("should return false when no key is stored", async () => { | |
| const { verifyStoredAccessKey } = await import("./accessKey"); | |
| const result = await verifyStoredAccessKey(); | |
| expect(result).toBe(false); | |
| }); | |
| it("should return false when stored key is invalid", async () => { | |
| const { verifyStoredAccessKey } = await import("./accessKey"); | |
| mockFetch.mockResolvedValue({ | |
| ok: true, | |
| json: vi.fn().mockResolvedValue({ valid: false }), | |
| }); | |
| localStorage.setItem( | |
| "accessKeyHash", | |
| JSON.stringify({ hash: "invalid-hash", timestamp: Date.now() }), | |
| ); | |
| const result = await verifyStoredAccessKey(); | |
| expect(result).toBe(false); | |
| }); | |
| it("should return false when stored key is expired", async () => { | |
| const { verifyStoredAccessKey } = await import("./accessKey"); | |
| const expiredTimestamp = Date.now() - 25 * 60 * 60 * 1000; | |
| localStorage.setItem( | |
| "accessKeyHash", | |
| JSON.stringify({ hash: "old-hash", timestamp: expiredTimestamp }), | |
| ); | |
| const result = await verifyStoredAccessKey(); | |
| expect(result).toBe(false); | |
| }); | |
| }); | |
| }); | |