mirror of
https://github.com/vrtmrz/obsidian-livesync.git
synced 2026-08-26 21:37:05 +00:00
110 lines
3.5 KiB
TypeScript
110 lines
3.5 KiB
TypeScript
import { describe, expect, it, vi } from "vitest";
|
|
import {
|
|
runConfiguredStartupLifecycle,
|
|
runStartupEntryLifecycle,
|
|
type ConfiguredStartupLifecycleRuntime,
|
|
} from "./configuredStartupLifecycle";
|
|
|
|
function createRuntime(): ConfiguredStartupLifecycleRuntime & { events: string[] } {
|
|
const events: string[] = [];
|
|
return {
|
|
events,
|
|
databaseReady: true,
|
|
reportDatabaseNotReady: vi.fn(() => events.push("database-not-ready")),
|
|
hasCompromisedChunks: vi.fn(async () => {
|
|
events.push("compromised-chunks");
|
|
return true;
|
|
}),
|
|
hasIncompleteDocuments: vi.fn(async () => {
|
|
events.push("incomplete-documents");
|
|
return true;
|
|
}),
|
|
waitForCompatibilityReview: vi.fn(async () => {}),
|
|
runDoctor: vi.fn(async () => {
|
|
events.push("doctor");
|
|
return true;
|
|
}),
|
|
migrateBulkSend: vi.fn(async () => {
|
|
events.push("bulk-send");
|
|
}),
|
|
};
|
|
}
|
|
|
|
describe("runConfiguredStartupLifecycle", () => {
|
|
it("runs configured checks in order before allowing initialisation", async () => {
|
|
const runtime = createRuntime();
|
|
|
|
await expect(runConfiguredStartupLifecycle(runtime)).resolves.toBe(true);
|
|
|
|
expect(runtime.events).toEqual(["compromised-chunks", "incomplete-documents", "doctor", "bulk-send"]);
|
|
});
|
|
|
|
it("keeps Config Doctor behind the initial compatibility review", async () => {
|
|
const runtime = createRuntime();
|
|
Object.assign(runtime, {
|
|
waitForCompatibilityReview: vi.fn(async () => {
|
|
runtime.events.push("compatibility-review");
|
|
}),
|
|
});
|
|
|
|
await expect(runConfiguredStartupLifecycle(runtime)).resolves.toBe(true);
|
|
|
|
expect(runtime.events).toEqual([
|
|
"compromised-chunks",
|
|
"incomplete-documents",
|
|
"compatibility-review",
|
|
"doctor",
|
|
"bulk-send",
|
|
]);
|
|
});
|
|
|
|
it("stops before onboarding or checks when the database is unavailable", async () => {
|
|
const runtime = createRuntime();
|
|
runtime.databaseReady = false;
|
|
|
|
await expect(runConfiguredStartupLifecycle(runtime)).resolves.toBe(false);
|
|
|
|
expect(runtime.events).toEqual(["database-not-ready"]);
|
|
});
|
|
|
|
it("stops the configured sequence at the first failed check", async () => {
|
|
const runtime = createRuntime();
|
|
vi.mocked(runtime.hasIncompleteDocuments).mockImplementation(async () => {
|
|
runtime.events.push("incomplete-documents");
|
|
return false;
|
|
});
|
|
|
|
await expect(runConfiguredStartupLifecycle(runtime)).resolves.toBe(false);
|
|
|
|
expect(runtime.events).toEqual(["compromised-chunks", "incomplete-documents"]);
|
|
});
|
|
});
|
|
|
|
describe("runStartupEntryLifecycle", () => {
|
|
it("offers onboarding and stops before database initialisation on an unconfigured Vault", () => {
|
|
const inviteToOnboarding = vi.fn();
|
|
|
|
expect(
|
|
runStartupEntryLifecycle({
|
|
configured: false,
|
|
inviteToOnboarding,
|
|
})
|
|
).toBe(false);
|
|
|
|
expect(inviteToOnboarding).toHaveBeenCalledOnce();
|
|
});
|
|
|
|
it("allows a configured Vault to continue to database initialisation", () => {
|
|
const inviteToOnboarding = vi.fn();
|
|
|
|
expect(
|
|
runStartupEntryLifecycle({
|
|
configured: true,
|
|
inviteToOnboarding,
|
|
})
|
|
).toBe(true);
|
|
|
|
expect(inviteToOnboarding).not.toHaveBeenCalled();
|
|
});
|
|
});
|