mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-12 07:20:45 +00:00
refactor(extensions): reuse shared helper primitives
This commit is contained in:
@@ -7,6 +7,23 @@ import {
|
||||
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);
|
||||
@@ -15,39 +32,9 @@ describe("resolveDiffsPluginDefaults", () => {
|
||||
it("applies configured defaults from plugin config", () => {
|
||||
expect(
|
||||
resolveDiffsPluginDefaults({
|
||||
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",
|
||||
},
|
||||
defaults: FULL_DEFAULTS,
|
||||
}),
|
||||
).toEqual({
|
||||
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",
|
||||
});
|
||||
).toEqual(FULL_DEFAULTS);
|
||||
});
|
||||
|
||||
it("clamps and falls back for invalid line spacing and indicators", () => {
|
||||
|
||||
@@ -95,23 +95,11 @@ describe("diffs tool", () => {
|
||||
});
|
||||
|
||||
it("renders PDF output when fileFormat is pdf", async () => {
|
||||
const screenshotter = {
|
||||
screenshotHtml: vi.fn(
|
||||
async ({
|
||||
outputPath,
|
||||
image,
|
||||
}: {
|
||||
outputPath: string;
|
||||
image: { format: string; qualityPreset: string; scale: number; maxWidth: number };
|
||||
}) => {
|
||||
expect(image.format).toBe("pdf");
|
||||
expect(outputPath).toMatch(/preview\.pdf$/);
|
||||
await fs.mkdir(path.dirname(outputPath), { recursive: true });
|
||||
await fs.writeFile(outputPath, Buffer.from("%PDF-1.7"));
|
||||
return outputPath;
|
||||
},
|
||||
),
|
||||
};
|
||||
const screenshotter = createPdfScreenshotter({
|
||||
assertOutputPath: (outputPath) => {
|
||||
expect(outputPath).toMatch(/preview\.pdf$/);
|
||||
},
|
||||
});
|
||||
|
||||
const tool = createDiffsTool({
|
||||
api: createApi(),
|
||||
@@ -208,22 +196,7 @@ describe("diffs tool", () => {
|
||||
});
|
||||
|
||||
it("accepts deprecated format alias for fileFormat", async () => {
|
||||
const screenshotter = {
|
||||
screenshotHtml: vi.fn(
|
||||
async ({
|
||||
outputPath,
|
||||
image,
|
||||
}: {
|
||||
outputPath: string;
|
||||
image: { format: string; qualityPreset: string; scale: number; maxWidth: number };
|
||||
}) => {
|
||||
expect(image.format).toBe("pdf");
|
||||
await fs.mkdir(path.dirname(outputPath), { recursive: true });
|
||||
await fs.writeFile(outputPath, Buffer.from("%PDF-1.7"));
|
||||
return outputPath;
|
||||
},
|
||||
),
|
||||
};
|
||||
const screenshotter = createPdfScreenshotter();
|
||||
|
||||
const tool = createDiffsTool({
|
||||
api: createApi(),
|
||||
@@ -492,6 +465,23 @@ function createPngScreenshotter(
|
||||
};
|
||||
}
|
||||
|
||||
function createPdfScreenshotter(
|
||||
params: {
|
||||
assertOutputPath?: (outputPath: string) => void;
|
||||
} = {},
|
||||
): DiffScreenshotter {
|
||||
const screenshotHtml: DiffScreenshotter["screenshotHtml"] = vi.fn(
|
||||
async ({ outputPath, image }: { outputPath: string; image: DiffRenderOptions["image"] }) => {
|
||||
expect(image.format).toBe("pdf");
|
||||
params.assertOutputPath?.(outputPath);
|
||||
await fs.mkdir(path.dirname(outputPath), { recursive: true });
|
||||
await fs.writeFile(outputPath, Buffer.from("%PDF-1.7"));
|
||||
return outputPath;
|
||||
},
|
||||
);
|
||||
return { screenshotHtml };
|
||||
}
|
||||
|
||||
function readTextContent(result: unknown, index: number): string {
|
||||
const content = (result as { content?: Array<{ type?: string; text?: string }> } | undefined)
|
||||
?.content;
|
||||
|
||||
Reference in New Issue
Block a user