|
|
|
@ -1692,7 +1692,7 @@ describe("GenerationComposer", () => { |
|
|
|
}); |
|
|
|
render(<GenerationComposer />); |
|
|
|
|
|
|
|
fireEvent.click(screen.getByText("First/last frame")); |
|
|
|
fireEvent.click(screen.getByText("首尾帧")); |
|
|
|
|
|
|
|
await waitFor(() => { |
|
|
|
const data = useWorkflowStore.getState().nodes[3].data as GenerateVideoNodeData; |
|
|
|
@ -1714,7 +1714,7 @@ describe("GenerationComposer", () => { |
|
|
|
}); |
|
|
|
render(<GenerationComposer />); |
|
|
|
|
|
|
|
fireEvent.click(screen.getByText("Image to video")); |
|
|
|
fireEvent.click(screen.getByText("图生视频")); |
|
|
|
|
|
|
|
await waitFor(() => { |
|
|
|
const data = useWorkflowStore.getState().nodes[1].data as GenerateVideoNodeData; |
|
|
|
@ -1738,7 +1738,38 @@ describe("GenerationComposer", () => { |
|
|
|
}); |
|
|
|
render(<GenerationComposer />); |
|
|
|
|
|
|
|
fireEvent.click(screen.getByText("Image to video")); |
|
|
|
fireEvent.click(screen.getByText("图生视频")); |
|
|
|
|
|
|
|
await waitFor(() => { |
|
|
|
const data = useWorkflowStore.getState().nodes[2].data as GenerateVideoNodeData; |
|
|
|
expect(data.parameters?.subType).toBe(203); |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
it("does not allow image-to-video when video material is connected", async () => { |
|
|
|
useWorkflowStore.setState({ |
|
|
|
nodes: [ |
|
|
|
imageNode("img-a", false, { outputImage: "https://static.popi.art/a.jpg" }), |
|
|
|
videoNode("source-video", false, { outputVideo: "https://static.popi.art/source.mp4" }), |
|
|
|
videoNode("vid-1", true, { |
|
|
|
parameters: { subType: 203 }, |
|
|
|
}), |
|
|
|
], |
|
|
|
edges: [ |
|
|
|
imageEdge("img-a", "vid-1", 0), |
|
|
|
{ |
|
|
|
id: "edge-source-video-vid-1-output-input", |
|
|
|
source: "source-video", |
|
|
|
sourceHandle: "output", |
|
|
|
target: "vid-1", |
|
|
|
targetHandle: "input", |
|
|
|
data: { createdAt: 1 }, |
|
|
|
} as WorkflowEdge, |
|
|
|
], |
|
|
|
}); |
|
|
|
render(<GenerationComposer />); |
|
|
|
|
|
|
|
fireEvent.click(screen.getByText("图生视频")); |
|
|
|
|
|
|
|
await waitFor(() => { |
|
|
|
const data = useWorkflowStore.getState().nodes[2].data as GenerateVideoNodeData; |
|
|
|
@ -1768,6 +1799,37 @@ describe("GenerationComposer", () => { |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
it("falls back from first/last frame when audio material is connected", async () => { |
|
|
|
useWorkflowStore.setState({ |
|
|
|
nodes: [ |
|
|
|
imageNode("img-a", false, { outputImage: "https://static.popi.art/a.jpg" }), |
|
|
|
imageNode("img-b", false, { outputImage: "https://static.popi.art/b.jpg" }), |
|
|
|
audioNode("source-audio", false, { outputAudio: "https://static.popi.art/source.mp3" }), |
|
|
|
videoNode("vid-1", true, { |
|
|
|
parameters: { subType: 204 }, |
|
|
|
}), |
|
|
|
], |
|
|
|
edges: [ |
|
|
|
imageEdge("img-a", "vid-1", 0), |
|
|
|
imageEdge("img-b", "vid-1", 1), |
|
|
|
{ |
|
|
|
id: "edge-source-audio-vid-1-output-input", |
|
|
|
source: "source-audio", |
|
|
|
sourceHandle: "output", |
|
|
|
target: "vid-1", |
|
|
|
targetHandle: "input", |
|
|
|
data: { createdAt: 2 }, |
|
|
|
} as WorkflowEdge, |
|
|
|
], |
|
|
|
}); |
|
|
|
render(<GenerationComposer />); |
|
|
|
|
|
|
|
await waitFor(() => { |
|
|
|
const data = useWorkflowStore.getState().nodes[3].data as GenerateVideoNodeData; |
|
|
|
expect(data.parameters?.subType).toBe(203); |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
it("labels two first/last frame images without changing their reference order", async () => { |
|
|
|
useWorkflowStore.setState({ |
|
|
|
nodes: [ |
|
|
|
@ -1785,10 +1847,10 @@ describe("GenerationComposer", () => { |
|
|
|
}); |
|
|
|
render(<GenerationComposer />); |
|
|
|
|
|
|
|
expect(screen.getByText("First")).toBeInTheDocument(); |
|
|
|
expect(screen.getByText("Last")).toBeInTheDocument(); |
|
|
|
expect(screen.getByText("首帧")).toBeInTheDocument(); |
|
|
|
expect(screen.getByText("尾帧")).toBeInTheDocument(); |
|
|
|
|
|
|
|
fireEvent.click(screen.getByLabelText("Generate")); |
|
|
|
fireEvent.click(screen.getByLabelText(/Generate|生成/)); |
|
|
|
|
|
|
|
await waitFor(() => { |
|
|
|
expect(useWorkflowStore.getState().regenerateNode).toHaveBeenCalledWith("vid-1"); |
|
|
|
@ -1799,13 +1861,13 @@ describe("GenerationComposer", () => { |
|
|
|
id: 1, |
|
|
|
type: "image", |
|
|
|
url: "https://static.popi.art/first.jpg", |
|
|
|
name: "@图1", |
|
|
|
name: "图1", |
|
|
|
}, |
|
|
|
{ |
|
|
|
id: 2, |
|
|
|
type: "image", |
|
|
|
url: "https://static.popi.art/last.jpg", |
|
|
|
name: "@图2", |
|
|
|
name: "图2", |
|
|
|
}, |
|
|
|
]); |
|
|
|
}); |
|
|
|
|