import { expect, test } from "bun:test"; import { getStoreForTest, setStoreResolver } from "../src/store-bridge.ts"; function fakeStore(initial: { count: number }) { let state = { ...initial }; const listeners = new Set<() => void>(); return { snapshot: () => Object.freeze({ ...state }), subscribe(listener: () => void) { listeners.add(listener); return () => listeners.delete(listener); }, actions: { increment: () => { state = { count: state.count + 1 }; for (const listener of [...listeners]) listener(); }, }, }; } test("resolves a registered store and caches its snapshot", () => { const store = fakeStore({ count: 0 }); setStoreResolver((name) => (name === "counter" ? store : undefined), ["counter"]); const bound = getStoreForTest<{ count: number }>("counter"); expect(bound.getSnapshot()).toBe(bound.getSnapshot()); bound.store.actions.increment!(); expect(bound.getSnapshot().count).toBe(1); setStoreResolver(null); }); test("throws a helpful error for an unknown store name", () => { setStoreResolver( (name) => (name === "counter" ? fakeStore({ count: 0 }) : undefined), ["counter"], ); expect(() => getStoreForTest("typo")).toThrow(/Unknown WRNexus store "typo"/); expect(() => getStoreForTest("typo")).toThrow(/counter/); setStoreResolver(null); }); test("throws when no resolver has been registered yet", () => { setStoreResolver(null); expect(() => getStoreForTest("counter")).toThrow(/before the island runtime registered/); });