Files
Netcatty/domain/syncStrategy.test.ts
陈大猫 463dd4464f [codex] add cloud sync strategies (#1171)
* feat: add cloud sync strategies

* chore: clarify cloud sync strategy options

* chore: keep selected sync strategy concise

* fix: sync cloud-wins payload to remaining providers

* fix: apply cloud sync strategy during startup

* fix: retry partial startup cloud syncs
2026-06-01 17:07:07 +08:00

57 lines
1.6 KiB
TypeScript

import test from "node:test";
import assert from "node:assert/strict";
import {
DEFAULT_CLOUD_SYNC_STRATEGY,
normalizeCloudSyncStrategy,
resolveCloudSyncConflictAction,
} from "./syncStrategy.ts";
test("normalizeCloudSyncStrategy falls back to smart merge for unknown values", () => {
assert.equal(normalizeCloudSyncStrategy("preferCloud"), "preferCloud");
assert.equal(normalizeCloudSyncStrategy("preferLocal"), "preferLocal");
assert.equal(normalizeCloudSyncStrategy("smartMerge"), "smartMerge");
assert.equal(normalizeCloudSyncStrategy("downloadOnly"), DEFAULT_CLOUD_SYNC_STRATEGY);
assert.equal(normalizeCloudSyncStrategy(undefined), DEFAULT_CLOUD_SYNC_STRATEGY);
});
test("resolveCloudSyncConflictAction keeps current merge behavior by default", () => {
assert.equal(
resolveCloudSyncConflictAction("smartMerge", {
hasConflict: true,
hasRemoteFile: true,
}),
"smart-merge",
);
});
test("resolveCloudSyncConflictAction lets cloud data win when requested", () => {
assert.equal(
resolveCloudSyncConflictAction("preferCloud", {
hasConflict: true,
hasRemoteFile: true,
}),
"download-remote",
);
});
test("resolveCloudSyncConflictAction lets local data win when requested", () => {
assert.equal(
resolveCloudSyncConflictAction("preferLocal", {
hasConflict: true,
hasRemoteFile: true,
}),
"upload-local",
);
});
test("resolveCloudSyncConflictAction uploads normally when no remote conflict exists", () => {
assert.equal(
resolveCloudSyncConflictAction("preferCloud", {
hasConflict: false,
hasRemoteFile: true,
}),
"upload-local",
);
});