import { beforeAll, describe, expect, it } from
"vitest" ;
import {
expectDashscopeVideoTaskPoll,
expectSuccessfulDashscopeVideoResult,
mockSuccessfulDashscopeVideoTask,
} from
"../../test/helpers/media-generation/dashscope-video-provider.js" ;
import { expectExplicitVideoGenerationCapabilities } from
"../../test/helpers/media-generation/provider-capability-assertions.js" ;
import {
getProviderHttpMocks,
installProviderHttpMockCleanup,
} from
"../../test/helpers/media-generation/provider-http-mocks.js" ;
const { postJsonRequestMock, fetchWithTimeoutMock } = getProviderHttpMocks();
let buildQwenVideoGenerationProvider:
typeof import (
"./video-generation-provider.js" ).buildQwenVideoGenerationProvider;
beforeAll(async () => {
({ buildQwenVideoGenerationProvider } = await
import (
"./video-generation-provider.js" ));
});
installProviderHttpMockCleanup();
describe("qwen video generation provider" , () => {
it("declares explicit mode capabilities" , () => {
expectExplicitVideoGenerationCapabilities(buildQwenVideoGenerationProvider());
});
it("submits async Wan generation, polls task status, and downloads the resulting video" , async () => {
mockSuccessfulDashscopeVideoTask({ postJsonRequestMock, fetchWithTimeoutMock });
const provider = buildQwenVideoGenerationProvider();
const result = await provider.generateVideo({
provider: "qwen" ,
model: "wan2.6-r2v-flash" ,
prompt: "animate this shot" ,
cfg: {},
inputImages: [{ url: "https://example.com/ref.png " }],
durationSeconds: 6 ,
audio: true ,
});
expect(postJsonRequestMock).toHaveBeenCalledWith(
expect.objectContaining({
url: "https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis ",
body: expect.objectContaining({
model: "wan2.6-r2v-flash" ,
input: expect.objectContaining({
prompt: "animate this shot" ,
img_url: "https://example.com/ref.png ",
}),
}),
}),
);
expectDashscopeVideoTaskPoll(fetchWithTimeoutMock);
expectSuccessfulDashscopeVideoResult(result);
});
it("fails fast when reference inputs are local buffers instead of remote URLs" , async () => {
const provider = buildQwenVideoGenerationProvider();
await expect(
provider.generateVideo({
provider: "qwen" ,
model: "wan2.6-i2v" ,
prompt: "animate this local frame" ,
cfg: {},
inputImages: [{ buffer: Buffer.from("png-bytes" ), mimeType: "image/png" }],
}),
).rejects.toThrow(
"Qwen video generation currently requires remote http(s) URLs for reference images/videos." ,
);
expect(postJsonRequestMock).not.toHaveBeenCalled();
});
it("preserves dedicated coding endpoints for dedicated API keys" , async () => {
mockSuccessfulDashscopeVideoTask(
{
postJsonRequestMock,
fetchWithTimeoutMock,
},
{ requestId: "req-2" , taskId: "task-2" },
);
const provider = buildQwenVideoGenerationProvider();
await provider.generateVideo({
provider: "qwen" ,
model: "wan2.6-t2v" ,
prompt: "animate this shot" ,
cfg: {
models: {
providers: {
qwen: {
baseUrl: "https://coding-intl.dashscope.aliyuncs.com/v1 ",
models: [],
},
},
},
},
});
expect(postJsonRequestMock).toHaveBeenCalledWith(
expect.objectContaining({
url: "https://coding-intl.dashscope.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis ",
}),
);
expectDashscopeVideoTaskPoll(fetchWithTimeoutMock, {
baseUrl: "https://coding-intl.dashscope.aliyuncs.com ",
taskId: "task-2" ,
});
});
});
Messung V0.5 in Prozent C=98 H=96 G=96
¤ Dauer der Verarbeitung: 0.3 Sekunden
¤
*© Formatika GbR, Deutschland