























@@ -1,7 +1,6 @@
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";
5465const resolvePluginCapabilityProvidersMock = vi.hoisted(() =>
76vi.fn<() => ImageGenerationProviderPlugin[]>(() => []),
@@ -26,21 +25,33 @@ function createProvider(
2625};
2726}
282729-function requireImageProvider(id: string): ImageGenerationProviderPlugin {
30-const provider = getImageGenerationProvider(id);
28+type ImageProviderRegistry = typeof import("./provider-registry.js");
29+30+function requireImageProvider(
31+registry: ImageProviderRegistry,
32+id: string,
33+): ImageGenerationProviderPlugin {
34+const provider = registry.getImageGenerationProvider(id);
3135if (!provider) {
3236throw new Error(`expected image generation provider ${id}`);
3337}
3438return provider;
3539}
364041+async function loadProviderRegistry(): Promise<ImageProviderRegistry> {
42+vi.resetModules();
43+return await import("./provider-registry.js");
44+}
45+3746describe("image-generation provider registry", () => {
3847beforeEach(() => {
48+vi.resetModules();
3949resolvePluginCapabilityProvidersMock.mockReset();
4050resolvePluginCapabilityProvidersMock.mockReturnValue([]);
4151});
425243-it("delegates provider resolution to the capability provider boundary", () => {
53+it("delegates provider resolution to the capability provider boundary", async () => {
54+const { listImageGenerationProviders } = await loadProviderRegistry();
4455const cfg = {} as OpenClawConfig;
45564657expect(listImageGenerationProviders(cfg)).toStrictEqual([]);
@@ -50,8 +61,9 @@ describe("image-generation provider registry", () => {
5061});
5162});
526353-it("uses active plugin providers without loading from disk", () => {
64+it("uses active plugin providers without loading from disk", async () => {
5465resolvePluginCapabilityProvidersMock.mockReturnValue([createProvider({ id: "custom-image" })]);
66+const { getImageGenerationProvider } = await loadProviderRegistry();
55675668const provider = getImageGenerationProvider("custom-image");
5769@@ -62,15 +74,17 @@ describe("image-generation provider registry", () => {
6274});
6375});
647665-it("ignores prototype-like provider ids and aliases", () => {
77+it("ignores prototype-like provider ids and aliases", async () => {
6678resolvePluginCapabilityProvidersMock.mockReturnValue([
6779createProvider({ id: "__proto__", aliases: ["constructor", "prototype"] }),
6880createProvider({ id: "safe-image", aliases: ["safe-alias", "constructor"] }),
6981]);
82+const registry = await loadProviderRegistry();
83+const { getImageGenerationProvider, listImageGenerationProviders } = registry;
70847185expect(listImageGenerationProviders().map((provider) => provider.id)).toEqual(["safe-image"]);
7286expect(getImageGenerationProvider("__proto__")).toBeUndefined();
7387expect(getImageGenerationProvider("constructor")).toBeUndefined();
74-expect(requireImageProvider("safe-alias").id).toBe("safe-image");
88+expect(requireImageProvider(registry, "safe-alias").id).toBe("safe-image");
7589});
7690});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。