Rebase pending Automerge field edits
This commit is contained in:
@@ -11,6 +11,7 @@ import {
|
||||
loadAutomergeFieldDoc,
|
||||
materializeAutomergeFieldValue,
|
||||
mergeAutomergeFieldValues,
|
||||
reconcileAutomergeFieldDocs,
|
||||
saveAutomergeFieldDoc,
|
||||
} from "../src/crdt-automerge.js";
|
||||
|
||||
@@ -105,6 +106,32 @@ test("Automerge change application is idempotent", () => {
|
||||
assert.deepEqual(twice.materialized, { count: 1 });
|
||||
});
|
||||
|
||||
test("Automerge changes retain remote history while local writes are pending", () => {
|
||||
const stored = createAutomergeFieldValue({ local: false, remote: false }, type);
|
||||
const base = loadAutomergeFieldDoc(stored, type);
|
||||
const local = Automerge.change(
|
||||
Automerge.clone(base, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"),
|
||||
(doc) => {
|
||||
(doc.value as { local: boolean }).local = true;
|
||||
},
|
||||
);
|
||||
const remote = Automerge.change(
|
||||
Automerge.clone(base, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"),
|
||||
(doc) => {
|
||||
(doc.value as { remote: boolean }).remote = true;
|
||||
},
|
||||
);
|
||||
const rebased = reconcileAutomergeFieldDocs(remote, local);
|
||||
const update = createAutomergeFieldChanges(remote, rebased, type);
|
||||
const result = mergeAutomergeFieldValues({
|
||||
existing: saveAutomergeFieldDoc(remote, type),
|
||||
incoming: update,
|
||||
type,
|
||||
});
|
||||
|
||||
assert.deepEqual(result.materialized, { local: true, remote: true });
|
||||
});
|
||||
|
||||
test("Automerge change batches reject malformed framing", () => {
|
||||
const stored = createAutomergeFieldValue({ count: 0 }, type);
|
||||
assert.throws(
|
||||
|
||||
Reference in New Issue
Block a user