59 lines
1.8 KiB
TypeScript
59 lines
1.8 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import {
|
|
buildJimengPayload,
|
|
buildJimengQueryPayload,
|
|
getJimengCapabilities,
|
|
getVisibleImageCapabilities
|
|
} from "@/lib/jimeng/capabilities";
|
|
|
|
describe("Jimeng capability matrix", () => {
|
|
it("only exposes the three supported image capabilities", () => {
|
|
const capabilities = getJimengCapabilities();
|
|
expect(Object.keys(capabilities)).toEqual([
|
|
"image.generate",
|
|
"image.inpaint",
|
|
"image.upscale"
|
|
]);
|
|
expect(getVisibleImageCapabilities().map((capability) => capability.id)).toEqual([
|
|
"image.generate",
|
|
"image.inpaint",
|
|
"image.upscale"
|
|
]);
|
|
});
|
|
|
|
it("builds payloads for image generation 4.6", () => {
|
|
const payload = buildJimengPayload("image.generate", "jimeng_seedream46_cvtob", {
|
|
prompt: "商品海报",
|
|
imageUrls: ["https://example.com/ref.png"],
|
|
width: 2048,
|
|
height: 2048,
|
|
force_single: true,
|
|
scale: 50
|
|
});
|
|
expect(payload).toMatchObject({
|
|
req_key: "jimeng_seedream46_cvtob",
|
|
prompt: "商品海报",
|
|
image_urls: ["https://example.com/ref.png"],
|
|
width: 2048,
|
|
height: 2048,
|
|
force_single: true,
|
|
scale: 50
|
|
});
|
|
});
|
|
|
|
it("requires original and mask URLs for inpainting", () => {
|
|
expect(() =>
|
|
buildJimengPayload("image.inpaint", "jimeng_image2image_dream_inpaint", {
|
|
imageUrls: ["https://example.com/original.png"]
|
|
})
|
|
).toThrow(/exactly two/);
|
|
});
|
|
|
|
it("uses return_url query payload for polling", () => {
|
|
const payload = buildJimengQueryPayload("jimeng_i2i_seed3_tilesr_cvtob", "task-1");
|
|
expect(payload.req_key).toBe("jimeng_i2i_seed3_tilesr_cvtob");
|
|
expect(payload.task_id).toBe("task-1");
|
|
expect(String(payload.req_json)).toContain('"return_url":true');
|
|
});
|
|
});
|