mirror of
https://github.com/vrtmrz/obsidian-livesync.git
synced 2026-08-26 05:17:06 +00:00
108 lines
3.8 KiB
TypeScript
108 lines
3.8 KiB
TypeScript
import { describe, expect, it, vi } from "vitest";
|
|
|
|
vi.mock("@/modules/features/SetupManager.ts", () => ({
|
|
SetupManager: class SetupManager {},
|
|
}));
|
|
vi.mock("@/deps.ts", () => ({}));
|
|
vi.mock("@/common/utils.ts", () => ({
|
|
isValidPath: () => true,
|
|
}));
|
|
|
|
import { ModuleMigration } from "./ModuleMigration.ts";
|
|
|
|
async function* noDocuments() {
|
|
return;
|
|
}
|
|
|
|
async function* failedDocumentScan() {
|
|
throw new Error("scan failed");
|
|
}
|
|
|
|
function createMigration(
|
|
findAllNormalDocs: typeof noDocuments | typeof failedDocumentScan = noDocuments,
|
|
settings = { sendChunksBulk: false, sendChunksBulkMaxSize: 1 }
|
|
) {
|
|
const noticeGroups = {
|
|
setItem: vi.fn(),
|
|
finish: vi.fn(() => true),
|
|
};
|
|
const services = {
|
|
API: {
|
|
addLog: vi.fn(),
|
|
addCommand: vi.fn(),
|
|
registerWindow: vi.fn(),
|
|
addRibbonIcon: vi.fn(),
|
|
registerProtocolHandler: vi.fn(),
|
|
},
|
|
context: { noticeGroups },
|
|
setting: { saveSettingData: vi.fn(async () => undefined) },
|
|
vault: { isTargetFile: vi.fn(async () => true) },
|
|
path: { getPath: vi.fn() },
|
|
};
|
|
const core = {
|
|
_services: services,
|
|
services,
|
|
kvDB: {
|
|
get: vi.fn(async () => false),
|
|
set: vi.fn(async () => undefined),
|
|
},
|
|
localDatabase: { findAllNormalDocs },
|
|
storageAccess: {},
|
|
settings,
|
|
};
|
|
return {
|
|
migration: new ModuleMigration(core as never),
|
|
noticeGroups,
|
|
saveSettingData: services.setting.saveSettingData,
|
|
};
|
|
}
|
|
|
|
describe("ModuleMigration obsolete-setting migration", () => {
|
|
it("persists the removal of an enabled automatic bulk chunk pre-send setting", async () => {
|
|
const settings = { sendChunksBulk: true, sendChunksBulkMaxSize: 16 };
|
|
const { migration, saveSettingData } = createMigration(noDocuments, settings);
|
|
|
|
await migration.migrateDisableBulkSend();
|
|
|
|
expect(settings).toEqual({ sendChunksBulk: false, sendChunksBulkMaxSize: 1 });
|
|
expect(saveSettingData).toHaveBeenCalledOnce();
|
|
});
|
|
|
|
it("does not persist an already disabled automatic bulk chunk pre-send setting", async () => {
|
|
const settings = { sendChunksBulk: false, sendChunksBulkMaxSize: 16 };
|
|
const { migration, saveSettingData } = createMigration(noDocuments, settings);
|
|
|
|
await migration.migrateDisableBulkSend();
|
|
|
|
expect(settings).toEqual({ sendChunksBulk: false, sendChunksBulkMaxSize: 16 });
|
|
expect(saveSettingData).not.toHaveBeenCalled();
|
|
});
|
|
});
|
|
|
|
describe("ModuleMigration incomplete-document notice", () => {
|
|
it("keeps the check and its result in one persistent named group", async () => {
|
|
const { migration, noticeGroups } = createMigration();
|
|
|
|
await expect(migration.hasIncompleteDocs()).resolves.toBe(true);
|
|
|
|
expect(noticeGroups.setItem).toHaveBeenNthCalledWith(1, "startup-integrity-check", "checking", {
|
|
message: "Checking for incomplete documents...",
|
|
});
|
|
expect(noticeGroups.setItem).toHaveBeenNthCalledWith(2, "startup-integrity-check", "result", {
|
|
message: "No size mismatches found",
|
|
});
|
|
expect(noticeGroups.finish).toHaveBeenCalledWith("startup-integrity-check");
|
|
});
|
|
|
|
it("finishes the group with a failure result when the scan throws", async () => {
|
|
const { migration, noticeGroups } = createMigration(failedDocumentScan);
|
|
|
|
await expect(migration.hasIncompleteDocs()).rejects.toThrow("scan failed");
|
|
|
|
expect(noticeGroups.setItem).toHaveBeenLastCalledWith("startup-integrity-check", "result", {
|
|
message: "The incomplete document check could not be completed.",
|
|
});
|
|
expect(noticeGroups.finish).toHaveBeenCalledWith("startup-integrity-check");
|
|
});
|
|
});
|