11import { beforeEach , describe , expect , it , vi } from "vitest" ;
22import type { OpenClawConfig } from "../config/types.js" ;
33import type { ImageGenerationProviderPlugin } from "../plugins/types.js" ;
4- import { getImageGenerationProvider , listImageGenerationProviders } from "./provider-registry.js" ;
4+
5+ type ProviderRegistryModule = typeof import ( "./provider-registry.js" ) ;
56
67const resolvePluginCapabilityProvidersMock = vi . hoisted ( ( ) =>
78 vi . fn < ( ) => ImageGenerationProviderPlugin [ ] > ( ( ) => [ ] ) ,
89) ;
9- function mockCapabilityProviderRuntime ( ) : void {
10- vi . doMock ( "../plugins/capability-provider-runtime.js" , ( ) => ( {
11- resolvePluginCapabilityProviders : resolvePluginCapabilityProvidersMock ,
12- } ) ) ;
13- }
10+ vi . mock ( "../plugins/capability-provider-runtime.js" , ( ) => ( {
11+ resolvePluginCapabilityProviders : resolvePluginCapabilityProvidersMock ,
12+ } ) ) ;
1413
1514function createProvider (
1615 params : Pick < ImageGenerationProviderPlugin , "id" > & Partial < ImageGenerationProviderPlugin > ,
@@ -28,22 +27,32 @@ function createProvider(
2827 } ;
2928}
3029
31- function requireImageProvider ( id : string ) : ImageGenerationProviderPlugin {
32- const provider = getImageGenerationProvider ( id ) ;
30+ function requireImageProvider (
31+ registry : ProviderRegistryModule ,
32+ id : string ,
33+ ) : ImageGenerationProviderPlugin {
34+ const provider = registry . getImageGenerationProvider ( id ) ;
3335 if ( ! provider ) {
3436 throw new Error ( `expected image generation provider ${ id } ` ) ;
3537 }
3638 return provider ;
3739}
3840
41+ async function loadProviderRegistry ( ) : Promise < ProviderRegistryModule > {
42+ vi . resetModules ( ) ;
43+ return import ( "./provider-registry.js" ) ;
44+ }
45+
3946describe ( "image-generation provider registry" , ( ) => {
4047 beforeEach ( ( ) => {
48+ vi . resetModules ( ) ;
4149 resolvePluginCapabilityProvidersMock . mockReset ( ) ;
4250 resolvePluginCapabilityProvidersMock . mockReturnValue ( [ ] ) ;
4351 } ) ;
4452
45- it ( "delegates provider resolution to the capability provider boundary" , ( ) => {
53+ it ( "delegates provider resolution to the capability provider boundary" , async ( ) => {
4654 const cfg = { } as OpenClawConfig ;
55+ const { listImageGenerationProviders } = await loadProviderRegistry ( ) ;
4756
4857 expect ( listImageGenerationProviders ( cfg ) ) . toStrictEqual ( [ ] ) ;
4958 expect ( resolvePluginCapabilityProvidersMock ) . toHaveBeenCalledWith ( {
@@ -52,8 +61,9 @@ describe("image-generation provider registry", () => {
5261 } ) ;
5362 } ) ;
5463
55- it ( "uses active plugin providers without loading from disk" , ( ) => {
64+ it ( "uses active plugin providers without loading from disk" , async ( ) => {
5665 resolvePluginCapabilityProvidersMock . mockReturnValue ( [ createProvider ( { id : "custom-image" } ) ] ) ;
66+ const { getImageGenerationProvider } = await loadProviderRegistry ( ) ;
5767
5868 const provider = getImageGenerationProvider ( "custom-image" ) ;
5969
@@ -64,15 +74,18 @@ describe("image-generation provider registry", () => {
6474 } ) ;
6575 } ) ;
6676
67- it ( "ignores prototype-like provider ids and aliases" , ( ) => {
77+ it ( "ignores prototype-like provider ids and aliases" , async ( ) => {
6878 resolvePluginCapabilityProvidersMock . mockReturnValue ( [
6979 createProvider ( { id : "__proto__" , aliases : [ "constructor" , "prototype" ] } ) ,
7080 createProvider ( { id : "safe-image" , aliases : [ "safe-alias" , "constructor" ] } ) ,
7181 ] ) ;
82+ const registry = await loadProviderRegistry ( ) ;
7283
73- expect ( listImageGenerationProviders ( ) . map ( ( provider ) => provider . id ) ) . toEqual ( [ "safe-image" ] ) ;
74- expect ( getImageGenerationProvider ( "__proto__" ) ) . toBeUndefined ( ) ;
75- expect ( getImageGenerationProvider ( "constructor" ) ) . toBeUndefined ( ) ;
76- expect ( requireImageProvider ( "safe-alias" ) . id ) . toBe ( "safe-image" ) ;
84+ expect ( registry . listImageGenerationProviders ( ) . map ( ( provider ) => provider . id ) ) . toEqual ( [
85+ "safe-image" ,
86+ ] ) ;
87+ expect ( registry . getImageGenerationProvider ( "__proto__" ) ) . toBeUndefined ( ) ;
88+ expect ( registry . getImageGenerationProvider ( "constructor" ) ) . toBeUndefined ( ) ;
89+ expect ( requireImageProvider ( registry , "safe-alias" ) . id ) . toBe ( "safe-image" ) ;
7790 } ) ;
7891} ) ;
0 commit comments