|
|
|
@ -714,11 +714,63 @@ describe("GenerationComposer", () => { |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
it("renders gateway image dimension options by schema name", () => { |
|
|
|
useWorkflowStore.setState({ |
|
|
|
nodes: [ |
|
|
|
imageNode("img-1", true, { |
|
|
|
selectedModel: { |
|
|
|
provider: "popiserver", |
|
|
|
modelId: "37", |
|
|
|
displayName: "Gateway Image", |
|
|
|
capabilities: ["text-to-image", "image-to-image"], |
|
|
|
}, |
|
|
|
parameterSchema: [ |
|
|
|
{ |
|
|
|
name: "ratio", |
|
|
|
type: "string", |
|
|
|
label: "Ratio", |
|
|
|
options: [ |
|
|
|
{ label: "16:9", value: "16:9" }, |
|
|
|
{ label: "9:16", value: "9:16" }, |
|
|
|
], |
|
|
|
default: "16:9", |
|
|
|
}, |
|
|
|
{ |
|
|
|
name: "resolution", |
|
|
|
type: "string", |
|
|
|
label: "Resolution", |
|
|
|
options: [ |
|
|
|
{ label: "720p", value: "720" }, |
|
|
|
{ label: "4k", value: "4k" }, |
|
|
|
], |
|
|
|
default: "720", |
|
|
|
}, |
|
|
|
], |
|
|
|
parameters: {}, |
|
|
|
}), |
|
|
|
], |
|
|
|
}); |
|
|
|
|
|
|
|
render(<GenerationComposer />); |
|
|
|
|
|
|
|
act(() => { |
|
|
|
fireEvent.change(screen.getByLabelText("Ratio"), { target: { value: "9:16" } }); |
|
|
|
fireEvent.change(screen.getByLabelText("Resolution"), { target: { value: "4k" } }); |
|
|
|
}); |
|
|
|
|
|
|
|
const data = useWorkflowStore.getState().nodes[0].data as NanoBananaNodeData; |
|
|
|
expect(data.parameters).toMatchObject({ |
|
|
|
ratio: "9:16", |
|
|
|
resolution: "4k", |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
it("does not show PopiServer task price estimates for token-billed models", async () => { |
|
|
|
const fetchMock = vi.fn(async (input: RequestInfo | URL) => { |
|
|
|
throw new Error(`Unexpected fetch: ${String(input)}`); |
|
|
|
}); |
|
|
|
vi.stubGlobal("fetch", fetchMock); |
|
|
|
|
|
|
|
useWorkflowStore.setState({ |
|
|
|
nodes: [ |
|
|
|
imageNode("img-1", true, { |
|
|
|
@ -918,6 +970,82 @@ describe("GenerationComposer", () => { |
|
|
|
expect(data.soundEnabled).toBe(false); |
|
|
|
}); |
|
|
|
|
|
|
|
it("renders gateway video dimension options with raw values", () => { |
|
|
|
useWorkflowStore.setState({ |
|
|
|
nodes: [ |
|
|
|
videoNode("vid-1", true, { |
|
|
|
selectedModel: { |
|
|
|
provider: "popiserver", |
|
|
|
modelId: "38", |
|
|
|
displayName: "Gateway Video", |
|
|
|
capabilities: ["text-to-video", "image-to-video"], |
|
|
|
}, |
|
|
|
parameterSchema: [ |
|
|
|
{ |
|
|
|
name: "ratio", |
|
|
|
type: "string", |
|
|
|
label: "Ratio", |
|
|
|
options: [ |
|
|
|
{ label: "16:9", value: "16:9" }, |
|
|
|
{ label: "9:16", value: "9:16" }, |
|
|
|
], |
|
|
|
default: "16:9", |
|
|
|
}, |
|
|
|
{ |
|
|
|
name: "videoRatio", |
|
|
|
type: "integer", |
|
|
|
label: "Video ratio", |
|
|
|
options: [ |
|
|
|
{ label: "10-10", value: 10 }, |
|
|
|
{ label: "20-20", value: 20 }, |
|
|
|
], |
|
|
|
default: 10, |
|
|
|
}, |
|
|
|
{ |
|
|
|
name: "resolution", |
|
|
|
type: "string", |
|
|
|
label: "Resolution", |
|
|
|
options: [ |
|
|
|
{ label: "720p", value: "720" }, |
|
|
|
{ label: "1024p", value: "1024" }, |
|
|
|
], |
|
|
|
default: "720", |
|
|
|
}, |
|
|
|
{ |
|
|
|
name: "duration", |
|
|
|
type: "integer", |
|
|
|
label: "Duration", |
|
|
|
options: [ |
|
|
|
{ label: "5", value: 5 }, |
|
|
|
{ label: "4", value: 4 }, |
|
|
|
], |
|
|
|
default: 5, |
|
|
|
}, |
|
|
|
], |
|
|
|
parameters: {}, |
|
|
|
}), |
|
|
|
], |
|
|
|
}); |
|
|
|
|
|
|
|
render(<GenerationComposer />); |
|
|
|
|
|
|
|
act(() => { |
|
|
|
fireEvent.change(screen.getByLabelText("Ratio"), { target: { value: "9:16" } }); |
|
|
|
fireEvent.change(screen.getByLabelText("Video ratio"), { target: { value: "20" } }); |
|
|
|
fireEvent.change(screen.getByLabelText("Resolution"), { target: { value: "1024" } }); |
|
|
|
fireEvent.change(screen.getByLabelText("Duration"), { target: { value: "4" } }); |
|
|
|
}); |
|
|
|
|
|
|
|
const data = useWorkflowStore.getState().nodes[0].data as GenerateVideoNodeData; |
|
|
|
expect(data.parameters).toEqual({ |
|
|
|
ratio: "9:16", |
|
|
|
videoRatio: 20, |
|
|
|
resolution: "1024", |
|
|
|
duration: 4, |
|
|
|
}); |
|
|
|
expect(data.durationSeconds).toBe(4); |
|
|
|
}); |
|
|
|
|
|
|
|
it("shows custom selected video duration in quick settings", () => { |
|
|
|
useWorkflowStore.setState({ |
|
|
|
nodes: [videoNode("vid-1", true, { durationSeconds: 6 })], |
|
|
|
|