import test from "node:test"; import assert from "node:assert/strict"; import {relationshipMap, relationshipList, relationshipSet} from "../dist/index.js"; import {referenceFromWire} from "../dist/references.js"; test("relationship helpers preserve handles and require explicit collection revisions", async () => { let current = {revision: 0n, entries: []}, serial = 0; const port = {collection: async () => ({revision: current.revision, entries: current.entries.map((entry) => ({...entry}))}), replace: async (entries, revision) => { assert.equal(revision, current.revision); current = {revision: revision + 1n, entries: entries.map((entry) => ({...entry, edgeId: entry.edgeId ?? `edge:${++serial}`}))}; return port.collection(); }}; const a = referenceFromWire("obj:a"), b = referenceFromWire("obj:b"); const map = relationshipMap(port); await map.set("a1", a, 0n); assert.equal((await map.get("a1")).value.equals(a), true); await assert.rejects(() => map.set("b1", b, 0n), /STALE_COLLECTION/); await map.delete("a1", 1n); const list = relationshipList(port); const inserted = await list.insert(0, a, 2n); await list.insert(1, b, 3n); const moved = await list.move(inserted.entries[0].edgeId, 1, 4n); assert.equal(moved.entries[1].target.equals(a), true); const set = relationshipSet(port); const unchanged = await set.add(referenceFromWire("obj:a"), 5n); assert.equal(unchanged.revision, 5n); });