stardew-tracker/tests/test_sync.js

31 lines
1.2 KiB
JavaScript
Raw Normal View History

const assert = require("node:assert/strict");
const sync = require("../static/sync.js");
// A second client advances the shared revision while this client is saving.
// The in-flight local value must not be replaced by the older server value.
const local = { "crop-parsnip": true, "fish-eel": false };
const remoteWhileSaving = {
revision: 6,
checks: { "crop-parsnip": false, "fish-eel": true }
};
const merged = sync.mergeSnapshot(local, new Set(["crop-parsnip"]), 5, remoteWhileSaving);
assert.equal(merged.applied, true);
assert.equal(merged.checks["crop-parsnip"], true);
assert.equal(merged.checks["fish-eel"], true);
// A response already superseded by a later write must never roll the client back.
const stale = sync.mergeSnapshot(merged.checks, new Set(), 7, remoteWhileSaving);
assert.equal(stale.applied, false);
assert.equal(stale.revision, 7);
// The write response is authoritative for its own item even after an interleaved poll.
const confirmed = sync.confirmWrite(merged.checks, 6, {
itemId: "crop-parsnip",
checked: true,
revision: 7
});
assert.equal(confirmed.checks["crop-parsnip"], true);
assert.equal(confirmed.revision, 7);
console.log("sync race tests passed");