mirror of
https://github.com/vrtmrz/obsidian-livesync.git
synced 2026-09-28 05:23:08 +00:00
Wait for stable upgrade fixtures to initialise
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
import { afterEach, describe, expect, it, vi } from "vitest";
|
||||
|
||||
const { evalObsidianJson } = vi.hoisted(() => ({
|
||||
evalObsidianJson: vi.fn(),
|
||||
}));
|
||||
|
||||
vi.mock("./cli.ts", () => ({ evalObsidianJson }));
|
||||
|
||||
import { prepareStableRemote } from "./upgradeWorkflow.ts";
|
||||
|
||||
describe("stable remote preparation", () => {
|
||||
afterEach(() => {
|
||||
vi.unstubAllEnvs();
|
||||
vi.clearAllMocks();
|
||||
});
|
||||
|
||||
it("waits for a readable Security Seed before marking the remote as resolved", async () => {
|
||||
vi.stubEnv("E2E_OBSIDIAN_REMOTE_READY_INTERVAL_MS", "0");
|
||||
vi.stubEnv("E2E_OBSIDIAN_REMOTE_READY_TIMEOUT_MS", "100");
|
||||
evalObsidianJson
|
||||
.mockResolvedValueOnce({ ok: true })
|
||||
.mockResolvedValueOnce(false)
|
||||
.mockResolvedValueOnce(true)
|
||||
.mockResolvedValueOnce({ ok: true });
|
||||
|
||||
await prepareStableRemote("obsidian-cli", {});
|
||||
|
||||
expect(evalObsidianJson).toHaveBeenCalledTimes(4);
|
||||
const scripts = evalObsidianJson.mock.calls.map(([, script]) => String(script));
|
||||
expect(scripts[0]).toContain("tryCreateRemoteDatabase");
|
||||
expect(scripts[0]).not.toContain("markRemoteResolved");
|
||||
expect(scripts[1]).toContain("ensurePBKDF2Salt");
|
||||
expect(scripts[2]).toContain("ensurePBKDF2Salt");
|
||||
expect(scripts[3]).toContain("markRemoteResolved");
|
||||
});
|
||||
});
|
||||
@@ -190,6 +190,43 @@ export async function prepareStableRemote(cliBinary: string, environment: NodeJS
|
||||
"const settings=core.services.setting.currentSettings();",
|
||||
"const replicator=core.services.replicator.getActiveReplicator();",
|
||||
"await replicator.tryCreateRemoteDatabase(settings);",
|
||||
"return JSON.stringify({ok:true});",
|
||||
"})()",
|
||||
].join(""),
|
||||
environment
|
||||
);
|
||||
|
||||
const timeoutMs = Number(process.env.E2E_OBSIDIAN_REMOTE_READY_TIMEOUT_MS ?? 15000);
|
||||
const intervalMs = Number(process.env.E2E_OBSIDIAN_REMOTE_READY_INTERVAL_MS ?? 250);
|
||||
const deadline = Date.now() + timeoutMs;
|
||||
let securitySeedReady = false;
|
||||
do {
|
||||
securitySeedReady = await evalObsidianJson<boolean>(
|
||||
cliBinary,
|
||||
[
|
||||
"(async()=>{",
|
||||
"const core=app.plugins.plugins['obsidian-livesync'].core;",
|
||||
"const settings=core.services.setting.currentSettings();",
|
||||
"const replicator=core.services.replicator.getActiveReplicator();",
|
||||
"return JSON.stringify(!!(await replicator.ensurePBKDF2Salt(settings,true,false)));",
|
||||
"})()",
|
||||
].join(""),
|
||||
environment
|
||||
);
|
||||
if (securitySeedReady) break;
|
||||
if (Date.now() < deadline) await new Promise((resolve) => setTimeout(resolve, intervalMs));
|
||||
} while (Date.now() < deadline);
|
||||
if (!securitySeedReady) {
|
||||
throw new Error(`Timed out waiting for the stable release Security Seed after ${timeoutMs}ms.`);
|
||||
}
|
||||
|
||||
await evalObsidianJson<unknown>(
|
||||
cliBinary,
|
||||
[
|
||||
"(async()=>{",
|
||||
"const core=app.plugins.plugins['obsidian-livesync'].core;",
|
||||
"const settings=core.services.setting.currentSettings();",
|
||||
"const replicator=core.services.replicator.getActiveReplicator();",
|
||||
"await replicator.markRemoteResolved(settings);",
|
||||
"return JSON.stringify({ok:true});",
|
||||
"})()",
|
||||
|
||||
Reference in New Issue
Block a user