mirror of
https://github.com/vrtmrz/obsidian-livesync.git
synced 2026-07-23 04:52:58 +00:00
Use Commonlib for self-hosted setup tools
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
import { decodeSettingsFromSetupURI } from "npm:@vrtmrz/livesync-commonlib@0.1.0-rc.4/compat/API/processSetting";
|
||||
import { DEFAULT_SETTINGS } from "npm:@vrtmrz/livesync-commonlib@0.1.0-rc.4/settings";
|
||||
|
||||
function assert(condition: unknown, message: string): asserts condition {
|
||||
if (!condition) throw new Error(message);
|
||||
}
|
||||
|
||||
Deno.test("generates a current self-hosted Setup URI through the published Commonlib contract", async () => {
|
||||
const scriptPath = new URL("./generate_setupuri.ts", import.meta.url);
|
||||
const command = new Deno.Command(Deno.execPath(), {
|
||||
args: ["run", "-A", scriptPath.pathname],
|
||||
env: {
|
||||
hostname: "https://couch.example.test",
|
||||
username: "alice",
|
||||
password: "couch-secret",
|
||||
database: "notes",
|
||||
passphrase: "vault-secret",
|
||||
uri_passphrase: "setup-secret",
|
||||
},
|
||||
stdout: "piped",
|
||||
stderr: "piped",
|
||||
});
|
||||
|
||||
const result = await command.output();
|
||||
const stdout = new TextDecoder().decode(result.stdout);
|
||||
const stderr = new TextDecoder().decode(result.stderr);
|
||||
assert(result.success, `generator failed:\n${stdout}\n${stderr}`);
|
||||
|
||||
const setupURI = stdout.match(/obsidian:\/\/setuplivesync\?settings=\S+/)
|
||||
?.[0];
|
||||
assert(setupURI, `generator did not print a Setup URI:\n${stdout}`);
|
||||
|
||||
const decoded = await decodeSettingsFromSetupURI(setupURI, "setup-secret");
|
||||
assert(decoded, "Commonlib could not decode the generated Setup URI");
|
||||
const effectiveSettings = { ...DEFAULT_SETTINGS, ...decoded };
|
||||
assert(
|
||||
effectiveSettings.customChunkSize === 60,
|
||||
"the Setup URI did not use the current self-hosted chunk-size recommendation",
|
||||
);
|
||||
assert(
|
||||
effectiveSettings.chunkSplitterVersion === "v3-rabin-karp",
|
||||
"the Setup URI did not use the current chunk splitter",
|
||||
);
|
||||
assert(
|
||||
effectiveSettings.E2EEAlgorithm === "v2",
|
||||
"the Setup URI did not use the current E2EE algorithm",
|
||||
);
|
||||
assert(
|
||||
!Object.hasOwn(decoded, "doNotUseFixedRevisionForChunks"),
|
||||
"the Setup URI serialised the obsolete fixed-revision compatibility setting",
|
||||
);
|
||||
|
||||
const profiles = Object.values(decoded.remoteConfigurations ?? {});
|
||||
assert(
|
||||
profiles.length === 1,
|
||||
"the Setup URI did not contain exactly one CouchDB remote profile",
|
||||
);
|
||||
assert(
|
||||
decoded.activeConfigurationId === profiles[0].id,
|
||||
"the CouchDB remote profile was not selected",
|
||||
);
|
||||
assert(
|
||||
profiles[0].uri.startsWith("sls+https://"),
|
||||
"the selected remote profile was not a CouchDB connection URI",
|
||||
);
|
||||
});
|
||||
Reference in New Issue
Block a user