Files
openclaw/extensions/qwen/media-understanding-provider.test.ts
2026-04-10 23:50:11 +01:00

62 lines
2.0 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
createRequestCaptureJsonFetch,
installPinnedHostnameTestHooks,
} from "../../src/media-understanding/audio.test-helpers.js";
import { describeQwenVideo } from "./media-understanding-provider.js";
installPinnedHostnameTestHooks();
describe("describeQwenVideo", () => {
it("builds the expected OpenAI-compatible video payload", async () => {
const { fetchFn, getRequest } = createRequestCaptureJsonFetch({
choices: [
{
message: {
content: [{ text: " first " }, { text: "second" }],
},
},
],
});
const result = await describeQwenVideo({
buffer: Buffer.from("video-bytes"),
fileName: "clip.mp4",
mime: "video/mp4",
apiKey: "test-key",
timeoutMs: 1500,
baseUrl: "https://example.com/v1",
model: "qwen-vl-max",
prompt: "summarize the clip",
headers: { "X-Other": "1" },
fetchFn,
});
const { url, init } = getRequest();
expect(result.model).toBe("qwen-vl-max");
expect(result.text).toBe("first\nsecond");
expect(url).toBe("https://example.com/v1/chat/completions");
expect(init?.method).toBe("POST");
expect(init?.signal).toBeInstanceOf(AbortSignal);
const headers = new Headers(init?.headers);
expect(headers.get("authorization")).toBe("Bearer test-key");
expect(headers.get("content-type")).toBe("application/json");
expect(headers.get("x-other")).toBe("1");
const bodyText =
typeof init?.body === "string"
? init.body
: Buffer.isBuffer(init?.body)
? init.body.toString("utf8")
: "";
const body = JSON.parse(bodyText);
expect(body.model).toBe("qwen-vl-max");
expect(body.messages?.[0]?.content?.[0]?.text).toBe("summarize the clip");
expect(body.messages?.[0]?.content?.[1]?.type).toBe("video_url");
expect(body.messages?.[0]?.content?.[1]?.video_url?.url).toBe(
`data:video/mp4;base64,${Buffer.from("video-bytes").toString("base64")}`,
);
});
});