mirror of
https://github.com/vrtmrz/obsidian-livesync.git
synced 2026-07-23 04:52:58 +00:00
55 lines
1.9 KiB
TypeScript
55 lines
1.9 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import {
|
|
assertCouchDbCheckpointContinuity,
|
|
assertJournalCheckpointLoaded,
|
|
assertNoJournalReplay,
|
|
type JournalCheckpointSnapshot,
|
|
} from "./upgradeContinuity.ts";
|
|
|
|
const journalCheckpoint: JournalCheckpointSnapshot = {
|
|
remoteKey: "remote-a",
|
|
lastLocalSeq: 42,
|
|
journalEpoch: "2:salt",
|
|
knownIDs: ["known-a"],
|
|
sentIDs: ["sent-a"],
|
|
receivedFiles: ["100-docs.jsonl.gz"],
|
|
sentFiles: ["101-docs.jsonl.gz"],
|
|
};
|
|
|
|
describe("upgrade synchronisation continuity assertions", () => {
|
|
it("rejects a fresh CouchDB checkpoint lineage even when final documents could still converge", () => {
|
|
expect(() =>
|
|
assertCouchDbCheckpointContinuity(
|
|
[{ id: "_local/original", lastSequence: 42 }],
|
|
[{ id: "_local/replacement", lastSequence: 42 }]
|
|
)
|
|
).toThrow("checkpoint identity changed");
|
|
});
|
|
|
|
it("rejects an Object Storage checkpoint which was reset to its initial state", () => {
|
|
expect(() =>
|
|
assertJournalCheckpointLoaded(journalCheckpoint, {
|
|
remoteKey: journalCheckpoint.remoteKey,
|
|
lastLocalSeq: 0,
|
|
journalEpoch: "",
|
|
knownIDs: [],
|
|
sentIDs: [],
|
|
receivedFiles: [],
|
|
sentFiles: [],
|
|
})
|
|
).toThrow(/lastLocalSeq regressed|history was lost/u);
|
|
});
|
|
|
|
it("rejects hidden Object Storage replay during an otherwise unchanged sync", () => {
|
|
expect(() =>
|
|
assertNoJournalReplay(
|
|
journalCheckpoint,
|
|
journalCheckpoint,
|
|
[{ key: "101-docs.jsonl.gz", size: 10, etag: "etag" }],
|
|
[{ key: "101-docs.jsonl.gz", size: 10, etag: "etag" }],
|
|
{ downloadedJournalKeys: ["101-docs.jsonl.gz"], uploadedJournalKeys: [] }
|
|
)
|
|
).toThrow("downloaded previously processed journals");
|
|
});
|
|
});
|