28 lines
1.4 KiB
JavaScript
28 lines
1.4 KiB
JavaScript
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);
|
||
|
|
});
|