mirror of
https://github.com/vrtmrz/obsidian-livesync.git
synced 2026-08-26 05:17:06 +00:00
Why: - Large downloaded batches can outlive the finite remote operation and be suspended before every document reaches the Vault. - The v1.0 activity contract requires local application to remain distinct from remote-operation reporting. Changes: - Add an Obsidian-owned local application activity boundary which reuses Wake Lock policy without incrementing remote activity. - Retain one boundary through queue processing and the final recovery snapshot, releasing and reacquiring it around suspension. - Log final snapshot failures, preserve processing results, and cover the lifecycle with focused tests and documentation.
36 lines
1.5 KiB
TypeScript
36 lines
1.5 KiB
TypeScript
import { promiseWithResolvers } from "octagonal-wheels/promises";
|
|
import { describe, expect, it, vi } from "vitest";
|
|
import { ObsidianReplicatorService } from "./ObsidianServices";
|
|
|
|
function handler() {
|
|
return { addHandler: vi.fn() };
|
|
}
|
|
|
|
describe("ObsidianReplicatorService", () => {
|
|
it("tracks local application activity without extending remote activity", async () => {
|
|
const activity = promiseWithResolvers<void>();
|
|
const service = new ObsidianReplicatorService({ events: {}, translate: String } as never, {
|
|
settingService: { onRealiseSetting: handler() },
|
|
appLifecycleService: { onSuspending: handler(), getUnresolvedMessages: handler() },
|
|
databaseEventService: {
|
|
onResetDatabase: handler(),
|
|
onDatabaseInitialisation: handler(),
|
|
onDatabaseInitialised: handler(),
|
|
onDatabaseHasReady: handler(),
|
|
},
|
|
activityRunner: { run: vi.fn(async (task: () => Promise<void>) => await task()) },
|
|
} as never);
|
|
|
|
const running = service.runBoundedLocalApplicationActivity(() => activity.promise);
|
|
|
|
expect(service.boundedLocalApplicationActivityCount.value).toBe(1);
|
|
expect(service.boundedRemoteActivityCount.value).toBe(0);
|
|
|
|
activity.resolve();
|
|
await running;
|
|
|
|
expect(service.boundedLocalApplicationActivityCount.value).toBe(0);
|
|
expect(service.boundedRemoteActivityCount.value).toBe(0);
|
|
});
|
|
});
|