| import { describe, expect, it } from "vitest"; |
| import { |
| DEFAULT_DIFFS_PLUGIN_SECURITY, |
| DEFAULT_DIFFS_TOOL_DEFAULTS, |
| resolveDiffImageRenderOptions, |
| resolveDiffsPluginDefaults, |
| resolveDiffsPluginSecurity, |
| } from "./config.js"; |
|
|
| const FULL_DEFAULTS = { |
| fontFamily: "JetBrains Mono", |
| fontSize: 17, |
| lineSpacing: 1.8, |
| layout: "split", |
| showLineNumbers: false, |
| diffIndicators: "classic", |
| wordWrap: false, |
| background: false, |
| theme: "light", |
| fileFormat: "pdf", |
| fileQuality: "hq", |
| fileScale: 2.6, |
| fileMaxWidth: 1280, |
| mode: "file", |
| } as const; |
|
|
| describe("resolveDiffsPluginDefaults", () => { |
| it("returns built-in defaults when config is missing", () => { |
| expect(resolveDiffsPluginDefaults(undefined)).toEqual(DEFAULT_DIFFS_TOOL_DEFAULTS); |
| }); |
|
|
| it("applies configured defaults from plugin config", () => { |
| expect( |
| resolveDiffsPluginDefaults({ |
| defaults: FULL_DEFAULTS, |
| }), |
| ).toEqual(FULL_DEFAULTS); |
| }); |
|
|
| it("clamps and falls back for invalid line spacing and indicators", () => { |
| expect( |
| resolveDiffsPluginDefaults({ |
| defaults: { |
| lineSpacing: -5, |
| diffIndicators: "unknown", |
| }, |
| }), |
| ).toMatchObject({ |
| lineSpacing: 1, |
| diffIndicators: "bars", |
| }); |
|
|
| expect( |
| resolveDiffsPluginDefaults({ |
| defaults: { |
| lineSpacing: 9, |
| }, |
| }), |
| ).toMatchObject({ |
| lineSpacing: 3, |
| }); |
|
|
| expect( |
| resolveDiffsPluginDefaults({ |
| defaults: { |
| lineSpacing: Number.NaN, |
| }, |
| }), |
| ).toMatchObject({ |
| lineSpacing: DEFAULT_DIFFS_TOOL_DEFAULTS.lineSpacing, |
| }); |
| }); |
|
|
| it("derives file defaults from quality preset and clamps explicit overrides", () => { |
| expect( |
| resolveDiffsPluginDefaults({ |
| defaults: { |
| fileQuality: "print", |
| }, |
| }), |
| ).toMatchObject({ |
| fileQuality: "print", |
| fileScale: 3, |
| fileMaxWidth: 1400, |
| }); |
|
|
| expect( |
| resolveDiffsPluginDefaults({ |
| defaults: { |
| fileQuality: "hq", |
| fileScale: 99, |
| fileMaxWidth: 99999, |
| }, |
| }), |
| ).toMatchObject({ |
| fileQuality: "hq", |
| fileScale: 4, |
| fileMaxWidth: 2400, |
| }); |
| }); |
|
|
| it("falls back to png for invalid file format defaults", () => { |
| expect( |
| resolveDiffsPluginDefaults({ |
| defaults: { |
| fileFormat: "invalid" as "png", |
| }, |
| }), |
| ).toMatchObject({ |
| fileFormat: "png", |
| }); |
| }); |
|
|
| it("resolves file render format from defaults and explicit overrides", () => { |
| const defaults = resolveDiffsPluginDefaults({ |
| defaults: { |
| fileFormat: "pdf", |
| }, |
| }); |
|
|
| expect(resolveDiffImageRenderOptions({ defaults }).format).toBe("pdf"); |
| expect(resolveDiffImageRenderOptions({ defaults, fileFormat: "png" }).format).toBe("png"); |
| expect(resolveDiffImageRenderOptions({ defaults, format: "png" }).format).toBe("png"); |
| }); |
|
|
| it("accepts format as a config alias for fileFormat", () => { |
| expect( |
| resolveDiffsPluginDefaults({ |
| defaults: { |
| format: "pdf", |
| }, |
| }), |
| ).toMatchObject({ |
| fileFormat: "pdf", |
| }); |
| }); |
|
|
| it("accepts image* config aliases for backward compatibility", () => { |
| expect( |
| resolveDiffsPluginDefaults({ |
| defaults: { |
| imageFormat: "pdf", |
| imageQuality: "hq", |
| imageScale: 2.2, |
| imageMaxWidth: 1024, |
| }, |
| }), |
| ).toMatchObject({ |
| fileFormat: "pdf", |
| fileQuality: "hq", |
| fileScale: 2.2, |
| fileMaxWidth: 1024, |
| }); |
| }); |
| }); |
|
|
| describe("resolveDiffsPluginSecurity", () => { |
| it("defaults to local-only viewer access", () => { |
| expect(resolveDiffsPluginSecurity(undefined)).toEqual(DEFAULT_DIFFS_PLUGIN_SECURITY); |
| }); |
|
|
| it("allows opt-in remote viewer access", () => { |
| expect(resolveDiffsPluginSecurity({ security: { allowRemoteViewer: true } })).toEqual({ |
| allowRemoteViewer: true, |
| }); |
| }); |
| }); |
|
|