104 lines
2.8 KiB
TypeScript
104 lines
2.8 KiB
TypeScript
import { expect, test } from "@playwright/test";
|
|
import {
|
|
removeVideoReferenceEdge,
|
|
resolveVideoReferenceSelectionRule,
|
|
resolveVideoReferenceToggleAction,
|
|
selectVideoReferenceImages,
|
|
toggleVideoReferenceEdge,
|
|
type VideoReferenceEdge,
|
|
} from "@/lib/canvas/video-reference-selection";
|
|
import { defaultVideoCanvasFunctionConfig } from "@/lib/video-canvas/config";
|
|
|
|
const imageToVideoEdge: VideoReferenceEdge = {
|
|
id: "edge-reference",
|
|
source: "image-1",
|
|
target: "video-1",
|
|
};
|
|
|
|
test.describe("video reference selection", () => {
|
|
test("adds an image-to-video edge and removes it on the second selection", () => {
|
|
const selected = toggleVideoReferenceEdge(
|
|
[],
|
|
"image-1",
|
|
"video-1",
|
|
() => imageToVideoEdge
|
|
);
|
|
|
|
expect(selected).toEqual([imageToVideoEdge]);
|
|
expect(
|
|
toggleVideoReferenceEdge(selected, "image-1", "video-1", () => ({
|
|
...imageToVideoEdge,
|
|
id: "unused-edge",
|
|
}))
|
|
).toEqual([]);
|
|
});
|
|
|
|
test("removes only the reference edge for the requested target video", () => {
|
|
const edges = [
|
|
imageToVideoEdge,
|
|
{ id: "edge-other-video", source: "image-1", target: "video-2" },
|
|
{ id: "edge-other-image", source: "image-2", target: "video-1" },
|
|
];
|
|
|
|
expect(removeVideoReferenceEdge(edges, "image-1", "video-1")).toEqual([
|
|
edges[1],
|
|
edges[2],
|
|
]);
|
|
});
|
|
|
|
test("matches the competitor model-specific reference behavior", () => {
|
|
const config = defaultVideoCanvasFunctionConfig.videoReferenceSelection;
|
|
|
|
expect(resolveVideoReferenceSelectionRule(config, "Seedance 2.0 VIP")).toEqual({
|
|
autoExit: false,
|
|
hideActionAtLimit: false,
|
|
maxImages: 9,
|
|
mode: "reference-images",
|
|
});
|
|
expect(
|
|
resolveVideoReferenceSelectionRule(
|
|
config,
|
|
"provider/seedance-1_5-pro",
|
|
),
|
|
).toEqual({
|
|
autoExit: true,
|
|
hideActionAtLimit: true,
|
|
maxImages: 1,
|
|
mode: "first-frame",
|
|
});
|
|
});
|
|
|
|
test("silently limits Seedance 2.0 references to nine while allowing removals", () => {
|
|
const references = Array.from({ length: 9 }, (_, index) => ({
|
|
id: `edge-${index + 1}`,
|
|
source: `image-${index + 1}`,
|
|
target: "video-1",
|
|
}));
|
|
|
|
expect(
|
|
resolveVideoReferenceToggleAction(
|
|
references,
|
|
"image-10",
|
|
"video-1",
|
|
9,
|
|
),
|
|
).toBe("limit");
|
|
expect(
|
|
resolveVideoReferenceToggleAction(
|
|
references,
|
|
"image-1",
|
|
"video-1",
|
|
9,
|
|
),
|
|
).toBe("remove");
|
|
|
|
const imageUrls = Array.from({ length: 12 }, (_, index) => `image-${index + 1}`);
|
|
expect(selectVideoReferenceImages(imageUrls, "reference-images", 9)).toEqual(
|
|
imageUrls.slice(0, 9),
|
|
);
|
|
expect(selectVideoReferenceImages(imageUrls, "first-frame", 9)).toEqual([
|
|
"image-1",
|
|
]);
|
|
});
|
|
});
|