Files
NianAIGC/tests/image-models.test.ts
2026-09-23 15:10:13 +08:00

57 lines
2.8 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { IMAGE_MODEL_OPTIONS, evolinkModelCapability, imageModelAfterHealth, imageModelFromJob, templateImageModel } from "@/lib/image-models";
import type { GenerationJob } from "@/lib/types";
function imageJob(overrides: Partial<GenerationJob>): GenerationJob {
return {
id: "job-1",
ownerId: "owner-1",
capability: "image.generate",
provider: "evolink",
reqKey: "",
status: "succeeded",
inputAssetIds: [],
inputUrls: [],
outputAssetIds: [],
requestPayload: {},
createdAt: "2026-01-01T00:00:00.000Z",
updatedAt: "2026-01-01T00:00:00.000Z",
...overrides
};
}
describe("EvoLink image model selection", () => {
it("uses the configured model when health loads and preserves a selection made while loading", () => {
expect(imageModelAfterHealth(IMAGE_MODEL_OPTIONS, "gpt-image-2.5-flare", "gpt-image-2", false)).toBe("gpt-image-2.5-flare");
expect(imageModelAfterHealth(IMAGE_MODEL_OPTIONS, "gpt-image-2.5-flare", "gpt-image-2.5-sunburst", true)).toBe("gpt-image-2.5-sunburst");
expect(imageModelAfterHealth([{ id: "custom-image" }], "custom-image", "gpt-image-2", false)).toBe("custom-image");
});
it("reads EvoLink defaults even when another image engine is primary", () => {
const capability = evolinkModelCapability({
engine: "jimeng",
reqKey: "jimeng-model",
evolink: { reqKey: "gpt-image-2.5-flare", models: [{ id: "gpt-image-2.5-flare", label: "Image 2.5 Flare" }] }
});
expect(capability?.reqKey).toBe("gpt-image-2.5-flare");
expect(imageModelAfterHealth(capability!.models!, capability?.reqKey, "gpt-image-2", false)).toBe("gpt-image-2.5-flare");
expect(evolinkModelCapability({ engine: "evolink", reqKey: "gpt-image-2.5-sunburst" })?.reqKey).toBe("gpt-image-2.5-sunburst");
});
it("uses the configured runtime default for older templates without a saved model", () => {
expect(templateImageModel(undefined, "gpt-image-2.5-flare")).toBe("gpt-image-2.5-flare");
expect(templateImageModel("gpt-image-2.5-sunburst", "gpt-image-2.5-flare")).toBe("gpt-image-2.5-sunburst");
});
it("shows the persisted Go model before request fallbacks", () => {
expect(imageModelFromJob(imageJob({
reqKey: "gpt-image-2.5-sunburst",
requestPayload: { model: "gpt-image-2.5-flare", input: { model: "gpt-image-2" } }
}))).toBe("gpt-image-2.5-sunburst");
expect(imageModelFromJob(imageJob({ requestPayload: { model: "gpt-image-2.5-flare" } }))).toBe("gpt-image-2.5-flare");
expect(imageModelFromJob(imageJob({ requestPayload: { input: { model: "gpt-image-2.5-flare" } } }))).toBe("gpt-image-2.5-flare");
expect(imageModelFromJob(imageJob({}))).toBe("gpt-image-2");
expect(imageModelFromJob(imageJob({ provider: "bailian", reqKey: "gpt-image-2.5-flare" }))).toBeUndefined();
});
});