Wait for active CouchDB replication in feature-change E2E

This commit is contained in:
vorotamoroz
2026-09-29 07:03:46 +00:00
parent 9e388c2044
commit 5d7d3db63c
@@ -33,6 +33,9 @@ type FeatureState = {
version: number | null; version: number | null;
features: string[]; features: string[];
hasActiveReplicator: boolean; hasActiveReplicator: boolean;
syncStatus: string | null;
continuousTaskActive: boolean;
liveSync: boolean;
}; };
async function readFeatureState(cliBinary: string, env: NodeJS.ProcessEnv): Promise<FeatureState> { async function readFeatureState(cliBinary: string, env: NodeJS.ProcessEnv): Promise<FeatureState> {
@@ -43,10 +46,14 @@ async function readFeatureState(cliBinary: string, env: NodeJS.ProcessEnv): Prom
"const core=app.plugins.plugins['obsidian-livesync'].core;", "const core=app.plugins.plugins['obsidian-livesync'].core;",
`const id=${JSON.stringify(VERSIONING_DOCID)};`, `const id=${JSON.stringify(VERSIONING_DOCID)};`,
"const info=await core.localDatabase.getRaw(id).catch(()=>null);", "const info=await core.localDatabase.getRaw(id).catch(()=>null);",
"const replicator=core.services.replicator.getActiveReplicator();",
"return JSON.stringify({", "return JSON.stringify({",
"version:typeof info?.version==='number'?info.version:null,", "version:typeof info?.version==='number'?info.version:null,",
"features:Array.isArray(info?.used_features)?info.used_features:[],", "features:Array.isArray(info?.used_features)?info.used_features:[],",
"hasActiveReplicator:!!core.services.replicator.getActiveReplicator(),", "hasActiveReplicator:!!replicator,",
"syncStatus:replicator?.syncStatus??null,",
"continuousTaskActive:!!replicator?.continuousTask,",
"liveSync:core.settings.liveSync,",
"});", "});",
"})()", "})()",
].join(""), ].join(""),
@@ -135,7 +142,12 @@ async function main(): Promise<void> {
); );
if (start.status !== "completed") if (start.status !== "completed")
throw new Error(`Continuous replication did not start: ${JSON.stringify(start)}`); throw new Error(`Continuous replication did not start: ${JSON.stringify(start)}`);
await waitForState(cli.binary, session.cliEnv, (state) => state.hasActiveReplicator, "an active Replicator"); await waitForState(
cli.binary,
session.cliEnv,
(state) => state.hasActiveReplicator && state.continuousTaskActive && state.syncStatus === "PAUSED",
"a caught-up continuous Replicator"
);
await putCouchDbDocument(couchDb, dbName, { await putCouchDbDocument(couchDb, dbName, {
...initialVersion, ...initialVersion,