import { assert, assertEquals } from "../test_deps.ts"; import { CollabServer } from "./collab.ts"; Deno.test("Collab server", async () => { const collabServer = new CollabServer(null as any); console.log("Client 1 joins page 1"); assertEquals(collabServer.updatePresence("client1", "page1"), {}); assertEquals(collabServer.pages.size, 1); assertEquals(collabServer.updatePresence("client1", "page2"), {}); assertEquals(collabServer.pages.size, 1); console.log("Client 2 joins to page 2, collab id created, but not exposed"); assertEquals( collabServer.updatePresence("client2", "page2").collabId, undefined, ); assert( collabServer.updatePresence("client1", "page2").collabId !== undefined, ); console.log("Client 2 moves to page 1, collab id destroyed"); assertEquals(collabServer.updatePresence("client2", "page1"), {}); assertEquals(collabServer.updatePresence("client1", "page2"), {}); assertEquals(collabServer.pages.get("page2")!.collabId, undefined); assertEquals(collabServer.pages.get("page1")!.collabId, undefined); console.log("Going to cleanup, which should have no effect"); collabServer.cleanup(50); assertEquals(collabServer.pages.size, 2); collabServer.updatePresence("client2", "page2"); console.log("Going to sleep 20ms"); await sleep(20); console.log("Then client 1 pings, but client 2 does not"); collabServer.updatePresence("client1", "page2"); await sleep(20); console.log("Going to cleanup, which should clean client 2"); collabServer.cleanup(35); assertEquals(collabServer.pages.get("page2")!.collabId, undefined); assertEquals(collabServer.clients.size, 1); console.log(collabServer); }); function sleep(ms: number) { return new Promise((resolve) => setTimeout(resolve, ms)); }