👁️
5
fork

Configure Feed

Select the types of activity you want to include in your feed.

testing between server and client worker logic!

+40 -22
+38 -20
src/lib/__tests__/card-data-provider.test.ts
··· 14 14 15 15 const PUBLIC_DIR = join(process.cwd(), "public"); 16 16 17 + // Mock cards-worker-client to use real worker code without Comlink/Worker 18 + vi.mock("../cards-worker-client", () => { 19 + // biome-ignore lint/suspicious/noExplicitAny: mock needs to accept any worker instance 20 + let workerInstance: any = null; 21 + 22 + return { 23 + initializeWorker: async () => { 24 + // @ts-expect-error very evil testing only import... 25 + const { __CardsWorkerForTestingOnly } = await import( 26 + "../../workers/cards.worker" 27 + ); 28 + workerInstance = new __CardsWorkerForTestingOnly(); 29 + await workerInstance.initialize(); 30 + }, 31 + getCardsWorker: () => 32 + new Proxy(workerInstance, { 33 + get(target, prop) { 34 + const value = target[prop]; 35 + if (typeof value === "function") { 36 + // biome-ignore lint/suspicious/noExplicitAny: proxy needs to handle any function signature 37 + return async (...args: any[]) => { 38 + const result = await value.apply(target, args); 39 + return structuredClone(result); 40 + }; 41 + } 42 + return value; 43 + }, 44 + }), 45 + }; 46 + }); 47 + 17 48 // Known test IDs from our dataset (using first sample card - Forest from Bloomburrow) 18 49 const TEST_CARD_ID = asScryfallId("0000419b-0bba-4488-8f7a-6194544ce91e"); 19 50 const TEST_CARD_ORACLE = asOracleId("b34bb2dc-c1af-4d77-b0b3-a0fb342a5fc6"); ··· 76 107 ]; 77 108 78 109 describe("CardDataProvider contract", () => { 79 - let clientProvider: ClientCardProvider | undefined; 110 + let clientProvider: ClientCardProvider; 80 111 let serverProvider: ServerCardProvider; 81 112 82 113 beforeAll(async () => { 83 - // Mock fetch to serve files from filesystem for worker 114 + // Mock fetch to serve cards.json from filesystem 84 115 vi.stubGlobal( 85 116 "fetch", 86 117 vi.fn(async (input: RequestInfo | URL) => { 87 118 const url = typeof input === "string" ? input : input.toString(); 88 119 89 - // Only intercept /data/ requests 90 120 if (url.startsWith("/data/")) { 91 121 const filePath = join(PUBLIC_DIR, url); 92 - console.log(filePath) 93 - 94 122 try { 95 123 const content = await readFile(filePath, "utf-8"); 96 124 return new Response(content, { 97 - // ok: true, 98 125 status: 200, 99 126 headers: { "Content-Type": "application/json" }, 100 127 }); 101 - } catch { 102 - return new Response(null, { status: 404 }); 103 - } 128 + } catch {} 104 129 } 105 130 106 - // For non-/data/ requests, return a 404 107 131 return new Response(null, { status: 404 }); 108 132 }), 109 133 ); 110 134 111 135 serverProvider = new ServerCardProvider(); 112 - console.log("new") 113 136 clientProvider = new ClientCardProvider(); 114 - console.log("init") 115 137 await clientProvider.initialize(); 116 - console.log("init done") 117 - }, 90_000); 138 + }); 118 139 119 140 describe.each([ 120 141 ["ServerCardProvider", () => serverProvider], 121 - // TODO: Unskip when ClientCardProvider works in tests 122 - // ["ClientCardProvider", () => clientProvider], 142 + ["ClientCardProvider", () => clientProvider], 123 143 ])("%s", (_name, getProvider) => { 124 144 let provider: CardDataProvider; 125 145 ··· 231 251 }); 232 252 }); 233 253 234 - // TODO: Unskip when ClientCardProvider works in tests 235 - describe.skip("Cross-provider consistency", () => { 254 + describe("Cross-provider consistency", () => { 236 255 it("returns identical card data", async () => { 237 256 const [clientCard, serverCard] = await Promise.all([ 238 257 clientProvider.getCardById(TEST_CARD_ID), ··· 307 326 ); 308 327 }); 309 328 310 - // TODO: Unskip when ClientCardProvider works in tests 311 - describe.skip("ClientCardProvider specific", () => { 329 + describe("ClientCardProvider specific", () => { 312 330 it("supports searchCards", async () => { 313 331 expect(clientProvider.searchCards).toBeDefined(); 314 332
+1
src/workers/cards.worker.ts
··· 218 218 } 219 219 220 220 export type { CardsWorkerAPI }; 221 + export { CardsWorker as __CardsWorkerForTestingOnly };
+1 -2
vitest.config.ts
··· 12 12 test: { 13 13 environment: "jsdom", 14 14 globals: true, 15 - setupFiles: ["@vitest/web-worker"], 16 - exclude: [...configDefaults.exclude, '**/.direnv/**'] 15 + exclude: [...configDefaults.exclude, "**/.direnv/**"], 17 16 }, 18 17 });