import { expect } from "https://code.thunderk.net/typescript/devtools/raw/1.2.2/testing.ts"; import { getAvailablePort } from "https://deno.land/x/port@1.0.0/mod.ts"; import { KeyValueStorage, MemoryStorage } from "./basic.ts"; import { startRestServer } from "./server.ts"; export { describe, expect, it, } from "https://code.thunderk.net/typescript/devtools/raw/1.2.2/testing.ts"; /** * Basic high-level test suite for any kind storage */ export async function basicCheck(storage: KeyValueStorage): Promise { expect(await storage.get("test")).toBe(null); await storage.set("test", "val"); expect(await storage.get("test")).toBe("val"); expect(await storage.get("notest")).toBe(null); await storage.set("test", null); expect(await storage.get("test")).toBe(null); } /** * Temporarily disable localStorage (constructor will throw error), * for the duration of the callback */ export async function disableLocalStorage( body: () => Promise, ): Promise { const ns = window as any; const removed = ns["localStorage"]; delete ns["localStorage"]; try { await body(); } finally { ns["localStorage"] = removed; } } /** * Run a temporary test server, with memory storage */ export async function runTestServer( body: (url: string) => Promise, ): Promise { const port = await getAvailablePort({ port: { start: 3000, end: 30000 } }); if (!port) { throw new Error("No port available for test server"); } const app = await startRestServer(port, new MemoryStorage()); try { await body(`http://localhost:${port}`); } finally { await app.close(); } }