mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-02-07 08:30:06 +00:00
122 lines
3.8 KiB
TypeScript
122 lines
3.8 KiB
TypeScript
import { parseComfyWorkflow } from "../../src/types/comfyWorkflow";
|
|
import { defaultGraph } from "../../src/scripts/defaultGraph";
|
|
import fs from "fs";
|
|
|
|
const WORKFLOW_DIR = "tests-ui/workflows";
|
|
|
|
describe("parseComfyWorkflow", () => {
|
|
it("parses valid workflow", async () => {
|
|
fs.readdirSync(WORKFLOW_DIR).forEach(async (file) => {
|
|
if (file.endsWith(".json")) {
|
|
const data = fs.readFileSync(`${WORKFLOW_DIR}/${file}`, "utf-8");
|
|
await expect(parseComfyWorkflow(data)).resolves.not.toThrow();
|
|
}
|
|
});
|
|
});
|
|
|
|
it("workflow.nodes", async () => {
|
|
const workflow = JSON.parse(JSON.stringify(defaultGraph));
|
|
workflow.nodes = undefined;
|
|
await expect(
|
|
parseComfyWorkflow(JSON.stringify(workflow))
|
|
).rejects.toThrow();
|
|
|
|
workflow.nodes = null;
|
|
await expect(
|
|
parseComfyWorkflow(JSON.stringify(workflow))
|
|
).rejects.toThrow();
|
|
|
|
workflow.nodes = [];
|
|
await expect(
|
|
parseComfyWorkflow(JSON.stringify(workflow))
|
|
).resolves.not.toThrow();
|
|
});
|
|
|
|
it("workflow.version", async () => {
|
|
const workflow = JSON.parse(JSON.stringify(defaultGraph));
|
|
workflow.version = undefined;
|
|
await expect(
|
|
parseComfyWorkflow(JSON.stringify(workflow))
|
|
).rejects.toThrow();
|
|
|
|
workflow.version = "1.0.1"; // Invalid format.
|
|
await expect(
|
|
parseComfyWorkflow(JSON.stringify(workflow))
|
|
).rejects.toThrow();
|
|
|
|
workflow.version = 1;
|
|
await expect(
|
|
parseComfyWorkflow(JSON.stringify(workflow))
|
|
).resolves.not.toThrow();
|
|
});
|
|
|
|
it("workflow.extra", async () => {
|
|
const workflow = JSON.parse(JSON.stringify(defaultGraph));
|
|
workflow.extra = undefined;
|
|
await expect(
|
|
parseComfyWorkflow(JSON.stringify(workflow))
|
|
).resolves.not.toThrow();
|
|
|
|
workflow.extra = null;
|
|
await expect(
|
|
parseComfyWorkflow(JSON.stringify(workflow))
|
|
).resolves.not.toThrow();
|
|
|
|
workflow.extra = {};
|
|
await expect(
|
|
parseComfyWorkflow(JSON.stringify(workflow))
|
|
).resolves.not.toThrow();
|
|
|
|
workflow.extra = { foo: "bar" }; // Should accept extra fields.
|
|
await expect(
|
|
parseComfyWorkflow(JSON.stringify(workflow))
|
|
).resolves.not.toThrow();
|
|
});
|
|
|
|
it("workflow.nodes.pos", async () => {
|
|
const workflow = JSON.parse(JSON.stringify(defaultGraph));
|
|
workflow.nodes[0].pos = [1, 2, 3];
|
|
await expect(
|
|
parseComfyWorkflow(JSON.stringify(workflow))
|
|
).rejects.toThrow();
|
|
|
|
workflow.nodes[0].pos = [1, 2];
|
|
await expect(
|
|
parseComfyWorkflow(JSON.stringify(workflow))
|
|
).resolves.not.toThrow();
|
|
|
|
// Should automatically transform the legacy format object to array.
|
|
workflow.nodes[0].pos = { "0": 3, "1": 4 };
|
|
let parsedWorkflow = await parseComfyWorkflow(JSON.stringify(workflow));
|
|
expect(parsedWorkflow.nodes[0].pos).toEqual([3, 4]);
|
|
|
|
workflow.nodes[0].pos = { 0: 3, 1: 4 };
|
|
parsedWorkflow = await parseComfyWorkflow(JSON.stringify(workflow));
|
|
expect(parsedWorkflow.nodes[0].pos).toEqual([3, 4]);
|
|
});
|
|
|
|
it("workflow.nodes.widget_values", async () => {
|
|
const workflow = JSON.parse(JSON.stringify(defaultGraph));
|
|
workflow.nodes[0].widgets_values = ["foo", "bar"];
|
|
await expect(
|
|
parseComfyWorkflow(JSON.stringify(workflow))
|
|
).resolves.not.toThrow();
|
|
|
|
workflow.nodes[0].widgets_values = "foo";
|
|
await expect(
|
|
parseComfyWorkflow(JSON.stringify(workflow))
|
|
).rejects.toThrow();
|
|
|
|
workflow.nodes[0].widgets_values = undefined;
|
|
await expect(
|
|
parseComfyWorkflow(JSON.stringify(workflow))
|
|
).resolves.not.toThrow();
|
|
|
|
// The object format of widgets_values is used by VHS nodes to perform
|
|
// dynamic widgets display.
|
|
workflow.nodes[0].widgets_values = { foo: "bar" };
|
|
const parsedWorkflow = await parseComfyWorkflow(JSON.stringify(workflow));
|
|
expect(parsedWorkflow.nodes[0].widgets_values).toEqual({ foo: "bar" });
|
|
});
|
|
});
|