CODE · 1.7 KB
test/generation.test.js
Workspace snapshot · 09/04 14:52
import test from "node:test";
import assert from "node:assert/strict";
import { buildVertexRequest, validateGenerationInput } from "../server/generation.js";
import { buildFalInput } from "../server/fal-client.js";
import { findVideoProvider } from "../src/providers.js";
const valid = {
provider: "veo-fast",
prompt: "A clean editorial shot with a single deliberate camera move.",
aspectRatio: "9:16",
durationSeconds: 8,
outputGcsUri: "gs://pengin-ai-video-lab-output/jobs/test/"
};
test("builds a current Veo 3.1 Vertex request", () => {
const request = buildVertexRequest(valid);
assert.equal(request.model, "veo-3.1-fast-generate-001");
assert.equal(request.config.numberOfVideos, 1);
assert.equal(request.config.aspectRatio, "9:16");
});
test("requires safe output locations only for Vertex providers", () => {
assert.throws(() => validateGenerationInput({ ...valid, outputGcsUri: "https://example.com/out" }), /gs:\/\//);
assert.doesNotThrow(() => validateGenerationInput({ ...valid, provider: "omni-flash", outputGcsUri: "" }));
});
test("estimates generation cost before queueing", () => {
assert.equal(validateGenerationInput(valid).estimatedCostYen, 120);
assert.equal(validateGenerationInput({ ...valid, provider: "veo-quality" }).estimatedCostYen, 480);
});
test("builds provider-specific fal inputs without credentials", () => {
const input = { ...valid, provider: "seedance-2-fast", durationSeconds: 6, outputGcsUri: "" };
const provider = findVideoProvider(input.provider);
assert.deepEqual(buildFalInput(provider, input), {
prompt: input.prompt,
aspect_ratio: "9:16",
duration: "6",
resolution: "720p",
generate_audio: false,
bitrate_mode: "standard"
});
});