56 lines
1.5 KiB
TypeScript
56 lines
1.5 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { parseViewerPayloadJson } from "./viewer-payload.js";
|
|
|
|
function buildValidPayload(): Record<string, unknown> {
|
|
return {
|
|
prerenderedHTML: "<div>ok</div>",
|
|
langs: ["text"],
|
|
oldFile: {
|
|
name: "README.md",
|
|
contents: "before",
|
|
},
|
|
newFile: {
|
|
name: "README.md",
|
|
contents: "after",
|
|
},
|
|
options: {
|
|
theme: {
|
|
light: "pierre-light",
|
|
dark: "pierre-dark",
|
|
},
|
|
diffStyle: "unified",
|
|
diffIndicators: "bars",
|
|
disableLineNumbers: false,
|
|
expandUnchanged: false,
|
|
themeType: "dark",
|
|
backgroundEnabled: true,
|
|
overflow: "wrap",
|
|
unsafeCSS: ":host{}",
|
|
},
|
|
};
|
|
}
|
|
|
|
describe("parseViewerPayloadJson", () => {
|
|
it("accepts valid payload JSON", () => {
|
|
const parsed = parseViewerPayloadJson(JSON.stringify(buildValidPayload()));
|
|
expect(parsed.options.diffStyle).toBe("unified");
|
|
expect(parsed.options.diffIndicators).toBe("bars");
|
|
});
|
|
|
|
it("rejects payloads with invalid shape", () => {
|
|
const broken = buildValidPayload();
|
|
broken.options = {
|
|
...(broken.options as Record<string, unknown>),
|
|
diffIndicators: "invalid",
|
|
};
|
|
|
|
expect(() => parseViewerPayloadJson(JSON.stringify(broken))).toThrow(
|
|
"Diff payload has invalid shape.",
|
|
);
|
|
});
|
|
|
|
it("rejects invalid JSON", () => {
|
|
expect(() => parseViewerPayloadJson("{not-json")).toThrow("Diff payload is not valid JSON.");
|
|
});
|
|
});
|