Files
obsidian-livesync/src/features/ConfigSync/customisationSyncPathOperations.unit.spec.ts
T

91 lines
3.7 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
createCustomisationSyncPathOperations,
type CustomisationSyncPathOperationsDependencies,
} from "./customisationSyncPathOperations.ts";
type PathState = {
configDir: string;
useV2: boolean;
usePluginEtc: boolean;
deviceAndVaultName: string;
};
function createOperations(state: PathState) {
const dependencies: CustomisationSyncPathOperationsDependencies = {
getConfigDir: () => state.configDir,
getUseV2: () => state.useV2,
getUsePluginEtc: () => state.usePluginEtc,
getDeviceAndVaultName: () => state.deviceAndVaultName,
};
return createCustomisationSyncPathOperations(dependencies);
}
describe("Customisation Sync path operations", () => {
it("reads category and target settings through live getters", () => {
const state: PathState = {
configDir: ".obsidian",
useV2: true,
usePluginEtc: true,
deviceAndVaultName: "device-a",
};
const operations = createOperations(state);
const extraPluginFile = ".obsidian/plugins/example/settings.json";
expect(operations.getFileCategory(extraPluginFile)).toBe("PLUGIN_ETC");
expect(operations.isTargetPath(extraPluginFile)).toBe(true);
state.useV2 = false;
expect(operations.getFileCategory(extraPluginFile)).toBe("");
expect(operations.isTargetPath(extraPluginFile)).toBe(false);
state.useV2 = true;
state.usePluginEtc = false;
expect(operations.getFileCategory(extraPluginFile)).toBe("");
state.configDir = ".config";
expect(operations.isTargetPath(extraPluginFile)).toBe(false);
expect(operations.isTargetPath(".config/plugins/example/settings.json")).toBe(false);
});
it("derives V1, V2, and device-prefix paths from the current term and settings", () => {
const state: PathState = {
configDir: ".obsidian",
useV2: true,
usePluginEtc: true,
deviceAndVaultName: "device-a",
};
const operations = createOperations(state);
const path = ".obsidian/plugins/example/main.js";
expect(operations.filenameToUnifiedKey(path)).toBe("ix:device-a/PLUGIN_MAIN/example.md");
expect(operations.filenameWithUnifiedKey(path)).toBe("ix:device-a/PLUGIN_MAIN/example%main.js");
expect(operations.unifiedKeyPrefixOfTerminal()).toBe("ix:device-a/");
state.deviceAndVaultName = "device-b";
expect(operations.filenameToUnifiedKey(path)).toBe("ix:device-b/PLUGIN_MAIN/example.md");
expect(operations.filenameWithUnifiedKey(path)).toBe("ix:device-b/PLUGIN_MAIN/example%main.js");
expect(operations.unifiedKeyPrefixOfTerminal()).toBe("ix:device-b/");
});
it("keeps the existing override fallback semantics", () => {
const state: PathState = {
configDir: ".obsidian",
useV2: true,
usePluginEtc: true,
deviceAndVaultName: "device-a",
};
const operations = createOperations(state);
const path = ".obsidian/app.json";
expect(operations.filenameToUnifiedKey(path, "device-b")).toBe("ix:device-b/CONFIG/app.json.md");
expect(operations.filenameWithUnifiedKey(path, "device-b")).toBe("ix:device-b/CONFIG/app.json%app.json");
expect(operations.unifiedKeyPrefixOfTerminal("device-b")).toBe("ix:device-b/");
expect(operations.filenameToUnifiedKey(path, "")).toBe("ix:device-a/CONFIG/app.json.md");
expect(operations.filenameWithUnifiedKey(path, "")).toBe("ix:device-a/CONFIG/app.json%app.json");
expect(operations.unifiedKeyPrefixOfTerminal("")).toBe("ix:device-a/");
});
});