39 lines
1.4 KiB
TypeScript
39 lines
1.4 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { DEFAULT_PREFS, parsePrefs, resolveRdTheme } from "../src/lib/readerPrefs";
|
|
|
|
describe("parsePrefs", () => {
|
|
it("returns defaults for null/garbage", () => {
|
|
expect(parsePrefs(null)).toEqual(DEFAULT_PREFS);
|
|
expect(parsePrefs("{oops")).toEqual(DEFAULT_PREFS);
|
|
});
|
|
it("merges partial legacy-free structures with defaults", () => {
|
|
const p = parsePrefs(JSON.stringify({ themeMode: "night", cbz: { mode: "page" } }));
|
|
expect(p.themeMode).toBe("night");
|
|
expect(p.cbz).toEqual({ ...DEFAULT_PREFS.cbz, mode: "page" });
|
|
expect(p.text).toEqual(DEFAULT_PREFS.text);
|
|
});
|
|
it("rejects out-of-range values back to defaults", () => {
|
|
const p = parsePrefs(
|
|
JSON.stringify({
|
|
text: { sizeIdx: 99, lineIdx: -1, margin: "huge" },
|
|
cbz: { prefetch: 7 },
|
|
epub: { sizeIdx: 2, lineIdx: 0, marginIdx: 9 },
|
|
}),
|
|
);
|
|
expect(p.text).toEqual(DEFAULT_PREFS.text);
|
|
expect(p.cbz.prefetch).toBe(DEFAULT_PREFS.cbz.prefetch);
|
|
expect(p.epub.marginIdx).toBe(DEFAULT_PREFS.epub.marginIdx);
|
|
});
|
|
});
|
|
|
|
describe("resolveRdTheme", () => {
|
|
it("auto follows global dark/light", () => {
|
|
expect(resolveRdTheme("auto", true)).toBe("night");
|
|
expect(resolveRdTheme("auto", false)).toBe("paper");
|
|
});
|
|
it("manual overrides global", () => {
|
|
expect(resolveRdTheme("sepia", true)).toBe("sepia");
|
|
expect(resolveRdTheme("night", false)).toBe("night");
|
|
});
|
|
});
|