From c2cd1aed5dfed14d3a85bc8089776d68bb2b42ad Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Tue, 7 Apr 2026 13:01:13 +0800 Subject: [PATCH] Tests: combine media provider capability contracts --- .../provider-capabilities.contract.test.ts | 76 +++++++++++++++++++ .../provider-capabilities.contract.test.ts | 33 -------- .../provider-capabilities.contract.test.ts | 44 ----------- 3 files changed, 76 insertions(+), 77 deletions(-) create mode 100644 src/media-generation/provider-capabilities.contract.test.ts delete mode 100644 src/music-generation/provider-capabilities.contract.test.ts delete mode 100644 src/video-generation/provider-capabilities.contract.test.ts diff --git a/src/media-generation/provider-capabilities.contract.test.ts b/src/media-generation/provider-capabilities.contract.test.ts new file mode 100644 index 00000000000..25d6e8bb90b --- /dev/null +++ b/src/media-generation/provider-capabilities.contract.test.ts @@ -0,0 +1,76 @@ +import { describe, expect, it } from "vitest"; +import { listSupportedMusicGenerationModes } from "../music-generation/capabilities.js"; +import { + musicGenerationProviderContractRegistry, + videoGenerationProviderContractRegistry, +} from "../plugins/contracts/registry.js"; +import { listSupportedVideoGenerationModes } from "../video-generation/capabilities.js"; + +describe("bundled media-generation provider capabilities", () => { + it("declares explicit mode support for every bundled video-generation provider", () => { + expect(videoGenerationProviderContractRegistry.length).toBeGreaterThan(0); + + for (const entry of videoGenerationProviderContractRegistry) { + const { provider } = entry; + expect( + provider.capabilities.generate, + `${provider.id} missing generate capabilities`, + ).toBeDefined(); + expect( + provider.capabilities.imageToVideo, + `${provider.id} missing imageToVideo capabilities`, + ).toBeDefined(); + expect( + provider.capabilities.videoToVideo, + `${provider.id} missing videoToVideo capabilities`, + ).toBeDefined(); + + const supportedModes = listSupportedVideoGenerationModes(provider); + const imageToVideo = provider.capabilities.imageToVideo; + const videoToVideo = provider.capabilities.videoToVideo; + + if (imageToVideo?.enabled) { + expect( + imageToVideo.maxInputImages ?? 0, + `${provider.id} imageToVideo.enabled requires maxInputImages`, + ).toBeGreaterThan(0); + expect(supportedModes).toContain("imageToVideo"); + } + if (videoToVideo?.enabled) { + expect( + videoToVideo.maxInputVideos ?? 0, + `${provider.id} videoToVideo.enabled requires maxInputVideos`, + ).toBeGreaterThan(0); + expect(supportedModes).toContain("videoToVideo"); + } + } + }); + + it("declares explicit generate/edit support for every bundled music-generation provider", () => { + expect(musicGenerationProviderContractRegistry.length).toBeGreaterThan(0); + + for (const entry of musicGenerationProviderContractRegistry) { + const { provider } = entry; + expect( + provider.capabilities.generate, + `${provider.id} missing generate capabilities`, + ).toBeDefined(); + expect(provider.capabilities.edit, `${provider.id} missing edit capabilities`).toBeDefined(); + + const edit = provider.capabilities.edit; + if (!edit) { + continue; + } + + if (edit.enabled) { + expect( + edit.maxInputImages ?? 0, + `${provider.id} edit.enabled requires maxInputImages`, + ).toBeGreaterThan(0); + expect(listSupportedMusicGenerationModes(provider)).toContain("edit"); + } else { + expect(listSupportedMusicGenerationModes(provider)).toEqual(["generate"]); + } + } + }); +}); diff --git a/src/music-generation/provider-capabilities.contract.test.ts b/src/music-generation/provider-capabilities.contract.test.ts deleted file mode 100644 index 174d9f755c5..00000000000 --- a/src/music-generation/provider-capabilities.contract.test.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { describe, expect, it } from "vitest"; -import { musicGenerationProviderContractRegistry } from "../plugins/contracts/registry.js"; -import { listSupportedMusicGenerationModes } from "./capabilities.js"; - -describe("bundled music-generation provider capabilities", () => { - it("declares explicit generate/edit support for every bundled provider", () => { - expect(musicGenerationProviderContractRegistry.length).toBeGreaterThan(0); - - for (const entry of musicGenerationProviderContractRegistry) { - const { provider } = entry; - expect( - provider.capabilities.generate, - `${provider.id} missing generate capabilities`, - ).toBeDefined(); - expect(provider.capabilities.edit, `${provider.id} missing edit capabilities`).toBeDefined(); - - const edit = provider.capabilities.edit; - if (!edit) { - continue; - } - - if (edit.enabled) { - expect( - edit.maxInputImages ?? 0, - `${provider.id} edit.enabled requires maxInputImages`, - ).toBeGreaterThan(0); - expect(listSupportedMusicGenerationModes(provider)).toContain("edit"); - } else { - expect(listSupportedMusicGenerationModes(provider)).toEqual(["generate"]); - } - } - }); -}); diff --git a/src/video-generation/provider-capabilities.contract.test.ts b/src/video-generation/provider-capabilities.contract.test.ts deleted file mode 100644 index dc2316a10eb..00000000000 --- a/src/video-generation/provider-capabilities.contract.test.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { describe, expect, it } from "vitest"; -import { videoGenerationProviderContractRegistry } from "../plugins/contracts/registry.js"; -import { listSupportedVideoGenerationModes } from "./capabilities.js"; - -describe("bundled video-generation provider capabilities", () => { - it("declares explicit mode support for every bundled provider", () => { - expect(videoGenerationProviderContractRegistry.length).toBeGreaterThan(0); - - for (const entry of videoGenerationProviderContractRegistry) { - const { provider } = entry; - expect( - provider.capabilities.generate, - `${provider.id} missing generate capabilities`, - ).toBeDefined(); - expect( - provider.capabilities.imageToVideo, - `${provider.id} missing imageToVideo capabilities`, - ).toBeDefined(); - expect( - provider.capabilities.videoToVideo, - `${provider.id} missing videoToVideo capabilities`, - ).toBeDefined(); - - const supportedModes = listSupportedVideoGenerationModes(provider); - const imageToVideo = provider.capabilities.imageToVideo; - const videoToVideo = provider.capabilities.videoToVideo; - - if (imageToVideo?.enabled) { - expect( - imageToVideo.maxInputImages ?? 0, - `${provider.id} imageToVideo.enabled requires maxInputImages`, - ).toBeGreaterThan(0); - expect(supportedModes).toContain("imageToVideo"); - } - if (videoToVideo?.enabled) { - expect( - videoToVideo.maxInputVideos ?? 0, - `${provider.id} videoToVideo.enabled requires maxInputVideos`, - ).toBeGreaterThan(0); - expect(supportedModes).toContain("videoToVideo"); - } - } - }); -});