mirror of
https://github.com/vrtmrz/obsidian-livesync.git
synced 2026-07-31 17:01:23 +00:00
111 lines
4.1 KiB
TypeScript
111 lines
4.1 KiB
TypeScript
import { describe, expect, it, vi } from "vitest";
|
|
import { DEFAULT_SETTINGS } from "@vrtmrz/livesync-commonlib/compat/common/types";
|
|
import { ensureLocalDatabaseMaintenancePrerequisites } from "./maintenancePrerequisites";
|
|
|
|
function createPrerequisites(settingsOverride: Partial<typeof DEFAULT_SETTINGS> = {}) {
|
|
const askSelectStringDialogue = vi.fn(
|
|
async (
|
|
_message: string,
|
|
_buttons: readonly ["Apply and continue", "Cancel"],
|
|
_options: { title: string; defaultAction: "Cancel" }
|
|
): Promise<"Apply and continue" | "Cancel" | false | undefined> => "Apply and continue"
|
|
);
|
|
const applyPartial = vi.fn(async () => undefined);
|
|
const settings = {
|
|
...DEFAULT_SETTINGS,
|
|
doNotUseFixedRevisionForChunks: false,
|
|
readChunksOnline: true,
|
|
...settingsOverride,
|
|
};
|
|
|
|
return { settings, askSelectStringDialogue, applyPartial };
|
|
}
|
|
|
|
describe("LocalDatabaseMaintenance prerequisites", () => {
|
|
it("asks to disable on-demand chunk fetching before maintenance actions", async () => {
|
|
const { settings, askSelectStringDialogue, applyPartial } = createPrerequisites();
|
|
|
|
const result = await ensureLocalDatabaseMaintenancePrerequisites({
|
|
operationName: "Garbage Collection",
|
|
settings: {
|
|
readChunksOnline: settings.readChunksOnline,
|
|
},
|
|
askSelectStringDialogue,
|
|
applyPartial,
|
|
});
|
|
|
|
expect(result).toBe(true);
|
|
expect(askSelectStringDialogue).toHaveBeenCalledWith(
|
|
expect.stringContaining("Garbage Collection requires the following settings"),
|
|
["Apply and continue", "Cancel"],
|
|
{
|
|
title: "Garbage Collection prerequisites",
|
|
defaultAction: "Cancel",
|
|
}
|
|
);
|
|
expect(applyPartial).toHaveBeenCalledWith(
|
|
{
|
|
readChunksOnline: false,
|
|
},
|
|
true
|
|
);
|
|
expect(vi.mocked(askSelectStringDialogue).mock.calls[0]?.[0]).not.toContain("Compute revisions for chunks");
|
|
});
|
|
|
|
it("cancels maintenance actions when prerequisite changes are rejected", async () => {
|
|
const { settings, askSelectStringDialogue, applyPartial } = createPrerequisites();
|
|
askSelectStringDialogue.mockResolvedValueOnce("Cancel");
|
|
|
|
const result = await ensureLocalDatabaseMaintenancePrerequisites({
|
|
operationName: "Garbage Collection",
|
|
settings: {
|
|
readChunksOnline: settings.readChunksOnline,
|
|
},
|
|
askSelectStringDialogue,
|
|
applyPartial,
|
|
});
|
|
|
|
expect(result).toBe(false);
|
|
expect(applyPartial).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it("continues without asking when prerequisite settings already match", async () => {
|
|
const { settings, askSelectStringDialogue, applyPartial } = createPrerequisites({
|
|
doNotUseFixedRevisionForChunks: true,
|
|
readChunksOnline: false,
|
|
});
|
|
|
|
const result = await ensureLocalDatabaseMaintenancePrerequisites({
|
|
operationName: "Garbage Collection",
|
|
settings: {
|
|
readChunksOnline: settings.readChunksOnline,
|
|
},
|
|
askSelectStringDialogue,
|
|
applyPartial,
|
|
});
|
|
|
|
expect(askSelectStringDialogue).not.toHaveBeenCalled();
|
|
expect(applyPartial).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it("does not treat the obsolete fixed-revision key as a maintenance prerequisite", async () => {
|
|
const { settings, askSelectStringDialogue, applyPartial } = createPrerequisites({
|
|
doNotUseFixedRevisionForChunks: false,
|
|
readChunksOnline: false,
|
|
});
|
|
|
|
const result = await ensureLocalDatabaseMaintenancePrerequisites({
|
|
operationName: "Garbage Collection",
|
|
settings: {
|
|
readChunksOnline: settings.readChunksOnline,
|
|
},
|
|
askSelectStringDialogue,
|
|
applyPartial,
|
|
});
|
|
|
|
expect(result).toBe(true);
|
|
expect(askSelectStringDialogue).not.toHaveBeenCalled();
|
|
expect(applyPartial).not.toHaveBeenCalled();
|
|
});
|
|
});
|