37 lines
1.3 KiB
TypeScript
37 lines
1.3 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
|
|
import { CUSTOM_WIDGET_STARTER } from "@homarr/custom-widgets/core";
|
|
|
|
import { validateSubmissionContent } from "./workshop-schema";
|
|
|
|
const validWidget = CUSTOM_WIDGET_STARTER;
|
|
|
|
describe("validateSubmissionContent", () => {
|
|
it("accepts a valid homarr-custom-widget-v2 JSON", () => {
|
|
expect(validateSubmissionContent("customWidget", JSON.stringify(validWidget)).success).toBe(true);
|
|
});
|
|
|
|
it("rejects an old/unknown widget schema version", () => {
|
|
const result = validateSubmissionContent(
|
|
"customWidget",
|
|
JSON.stringify({ ...validWidget, $schema: "homarr-custom-widget-v1" }),
|
|
);
|
|
expect(result.success).toBe(false);
|
|
});
|
|
|
|
it("rejects widgets without a schema version", () => {
|
|
const { $schema: _schema, ...widgetWithoutSchema } = validWidget;
|
|
|
|
expect(validateSubmissionContent("customWidget", JSON.stringify(widgetWithoutSchema)).success).toBe(false);
|
|
});
|
|
|
|
it("rejects malformed widget JSON", () => {
|
|
expect(validateSubmissionContent("customWidget", "{ not json").success).toBe(false);
|
|
});
|
|
|
|
it("accepts non-empty CSS and rejects empty CSS", () => {
|
|
expect(validateSubmissionContent("customCss", ".card { color: red; }").success).toBe(true);
|
|
expect(validateSubmissionContent("customCss", " ").success).toBe(false);
|
|
});
|
|
});
|