test: 引入 Vitest 测试骨架并抽出颜色/比例纯函数模块
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
import { describe, it, expect } from "vitest";
|
||||
import { resolveHappyHorseRequestModel, HAPPY_HORSE_UI_MODEL, HAPPY_HORSE_T2V_MODEL, HAPPY_HORSE_I2V_MODEL, HAPPY_HORSE_R2V_MODEL } from "./happyHorseRouting";
|
||||
import { resolveViduRequestModel, VIDU_UI_MODEL, VIDU_T2V_MODEL, VIDU_I2V_MODEL } from "./viduRouting";
|
||||
import { resolvePixverseRequestModel, PIXVERSE_UI_MODEL, PIXVERSE_T2V_MODEL, PIXVERSE_I2V_MODEL, PIXVERSE_KF2V_MODEL } from "./pixverseRouting";
|
||||
|
||||
type ResolveFn = (input: { model: string; referenceUrls?: string[]; imageReferenceCount?: number }) => string;
|
||||
|
||||
// 三家路由在参考图数量上的分支差异是回归测试重点。
|
||||
// HappyHorse: 0->t2v, 1->i2v, >=2->r2v
|
||||
// Vidu: 0->t2v, >=1->i2v (无 r2v)
|
||||
// Pixverse: 0->t2v, 1->i2v, >=2->kf2v
|
||||
describe.each([
|
||||
{ name: "HappyHorse", resolve: resolveHappyHorseRequestModel, ui: HAPPY_HORSE_UI_MODEL, t2v: HAPPY_HORSE_T2V_MODEL, i2v: HAPPY_HORSE_I2V_MODEL, third: HAPPY_HORSE_R2V_MODEL },
|
||||
{ name: "Vidu", resolve: resolveViduRequestModel, ui: VIDU_UI_MODEL, t2v: VIDU_T2V_MODEL, i2v: VIDU_I2V_MODEL, third: null },
|
||||
{ name: "Pixverse", resolve: resolvePixverseRequestModel, ui: PIXVERSE_UI_MODEL, t2v: PIXVERSE_T2V_MODEL, i2v: PIXVERSE_I2V_MODEL, third: PIXVERSE_KF2V_MODEL },
|
||||
] as Array<{ name: string; resolve: ResolveFn; ui: string; t2v: string; i2v: string; third: string | null }>)(
|
||||
"$name routing by imageReferenceCount",
|
||||
({ resolve, ui, t2v, i2v, third }) => {
|
||||
it("returns the input model unchanged when it is not this provider", () => {
|
||||
expect(resolve({ model: "some-other-model" })).toBe("some-other-model");
|
||||
});
|
||||
|
||||
it("routes 0 reference images to t2v", () => {
|
||||
expect(resolve({ model: ui, imageReferenceCount: 0 })).toBe(t2v);
|
||||
});
|
||||
|
||||
it("routes 1 reference image to i2v", () => {
|
||||
expect(resolve({ model: ui, imageReferenceCount: 1 })).toBe(i2v);
|
||||
});
|
||||
|
||||
if (third) {
|
||||
it("routes >=2 reference images to the third model", () => {
|
||||
expect(resolve({ model: ui, imageReferenceCount: 2 })).toBe(third);
|
||||
expect(resolve({ model: ui, imageReferenceCount: 5 })).toBe(third);
|
||||
});
|
||||
} else {
|
||||
it("routes >=1 reference images to i2v (no third model for this provider)", () => {
|
||||
expect(resolve({ model: ui, imageReferenceCount: 2 })).toBe(i2v);
|
||||
expect(resolve({ model: ui, imageReferenceCount: 5 })).toBe(i2v);
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
describe("reference count fallback (referenceUrls when imageReferenceCount omitted)", () => {
|
||||
it("HappyHorse counts non-empty urls", () => {
|
||||
expect(
|
||||
resolveHappyHorseRequestModel({
|
||||
model: HAPPY_HORSE_UI_MODEL,
|
||||
referenceUrls: ["", " ", "https://example.com/a.png"],
|
||||
}),
|
||||
).toBe(HAPPY_HORSE_I2V_MODEL);
|
||||
});
|
||||
|
||||
it("Vidu falls back to 0 when all urls are empty/whitespace", () => {
|
||||
expect(
|
||||
resolveViduRequestModel({
|
||||
model: VIDU_UI_MODEL,
|
||||
referenceUrls: ["", " "],
|
||||
}),
|
||||
).toBe(VIDU_T2V_MODEL);
|
||||
});
|
||||
|
||||
it("Pixverse counts two non-empty urls as kf2v", () => {
|
||||
expect(
|
||||
resolvePixverseRequestModel({
|
||||
model: PIXVERSE_UI_MODEL,
|
||||
referenceUrls: ["https://a.png", "https://b.png"],
|
||||
}),
|
||||
).toBe(PIXVERSE_KF2V_MODEL);
|
||||
});
|
||||
|
||||
it("imageReferenceCount takes precedence over referenceUrls length", () => {
|
||||
// Even though referenceUrls has 3 entries, explicit count of 0 wins.
|
||||
expect(
|
||||
resolveHappyHorseRequestModel({
|
||||
model: HAPPY_HORSE_UI_MODEL,
|
||||
referenceUrls: ["a", "b", "c"],
|
||||
imageReferenceCount: 0,
|
||||
}),
|
||||
).toBe(HAPPY_HORSE_T2V_MODEL);
|
||||
});
|
||||
|
||||
it("handles undefined referenceUrls with undefined count", () => {
|
||||
expect(resolveViduRequestModel({ model: VIDU_UI_MODEL })).toBe(VIDU_T2V_MODEL);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user