← GPT-AI-VIDEO
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"
  });
});