Skip to content

Commit fdd3c67

Browse files
committed
test: restore provider registry mock isolation
1 parent 86b5216 commit fdd3c67

2 files changed

Lines changed: 57 additions & 30 deletions

File tree

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
import { beforeEach, describe, expect, it, vi } from "vitest";
22
import type { OpenClawConfig } from "../config/types.js";
33
import type { ImageGenerationProviderPlugin } from "../plugins/types.js";
4-
import { getImageGenerationProvider, listImageGenerationProviders } from "./provider-registry.js";
4+
5+
type ProviderRegistryModule = typeof import("./provider-registry.js");
56

67
const 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

1514
function 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+
3946
describe("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
});
Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
import { beforeEach, describe, expect, it, vi } from "vitest";
22
import type { VideoGenerationProviderPlugin } from "../plugins/types.js";
3-
import { getVideoGenerationProvider, listVideoGenerationProviders } from "./provider-registry.js";
3+
4+
type ProviderRegistryModule = typeof import("./provider-registry.js");
45

56
const resolvePluginCapabilityProvidersMock = vi.hoisted(() =>
67
vi.fn<() => VideoGenerationProviderPlugin[]>(() => []),
78
);
8-
function mockCapabilityProviderRuntime(): void {
9-
vi.doMock("../plugins/capability-provider-runtime.js", () => ({
10-
resolvePluginCapabilityProviders: resolvePluginCapabilityProvidersMock,
11-
}));
12-
}
9+
vi.mock("../plugins/capability-provider-runtime.js", () => ({
10+
resolvePluginCapabilityProviders: resolvePluginCapabilityProvidersMock,
11+
}));
1312

1413
function createProvider(
1514
params: Pick<VideoGenerationProviderPlugin, "id"> & Partial<VideoGenerationProviderPlugin>,
@@ -24,30 +23,42 @@ function createProvider(
2423
};
2524
}
2625

27-
function requireVideoProvider(id: string): VideoGenerationProviderPlugin {
28-
const provider = getVideoGenerationProvider(id);
26+
function requireVideoProvider(
27+
registry: ProviderRegistryModule,
28+
id: string,
29+
): VideoGenerationProviderPlugin {
30+
const provider = registry.getVideoGenerationProvider(id);
2931
if (!provider) {
3032
throw new Error(`expected video generation provider ${id}`);
3133
}
3234
return provider;
3335
}
3436

37+
async function loadProviderRegistry(): Promise<ProviderRegistryModule> {
38+
vi.resetModules();
39+
return import("./provider-registry.js");
40+
}
41+
3542
describe("video-generation provider registry", () => {
3643
beforeEach(() => {
44+
vi.resetModules();
3745
resolvePluginCapabilityProvidersMock.mockReset();
3846
resolvePluginCapabilityProvidersMock.mockReturnValue([]);
3947
});
4048

41-
it("delegates provider resolution to the capability provider boundary", () => {
49+
it("delegates provider resolution to the capability provider boundary", async () => {
50+
const { listVideoGenerationProviders } = await loadProviderRegistry();
51+
4252
expect(listVideoGenerationProviders()).toStrictEqual([]);
4353
expect(resolvePluginCapabilityProvidersMock).toHaveBeenCalledWith({
4454
key: "videoGenerationProviders",
4555
cfg: undefined,
4656
});
4757
});
4858

49-
it("uses active plugin providers without loading from disk", () => {
59+
it("uses active plugin providers without loading from disk", async () => {
5060
resolvePluginCapabilityProvidersMock.mockReturnValue([createProvider({ id: "custom-video" })]);
61+
const { getVideoGenerationProvider } = await loadProviderRegistry();
5162

5263
const provider = getVideoGenerationProvider("custom-video");
5364

@@ -58,15 +69,18 @@ describe("video-generation provider registry", () => {
5869
});
5970
});
6071

61-
it("ignores prototype-like provider ids and aliases", () => {
72+
it("ignores prototype-like provider ids and aliases", async () => {
6273
resolvePluginCapabilityProvidersMock.mockReturnValue([
6374
createProvider({ id: "__proto__", aliases: ["constructor", "prototype"] }),
6475
createProvider({ id: "safe-video", aliases: ["safe-alias", "constructor"] }),
6576
]);
77+
const registry = await loadProviderRegistry();
6678

67-
expect(listVideoGenerationProviders().map((provider) => provider.id)).toEqual(["safe-video"]);
68-
expect(getVideoGenerationProvider("__proto__")).toBeUndefined();
69-
expect(getVideoGenerationProvider("constructor")).toBeUndefined();
70-
expect(requireVideoProvider("safe-alias").id).toBe("safe-video");
79+
expect(registry.listVideoGenerationProviders().map((provider) => provider.id)).toEqual([
80+
"safe-video",
81+
]);
82+
expect(registry.getVideoGenerationProvider("__proto__")).toBeUndefined();
83+
expect(registry.getVideoGenerationProvider("constructor")).toBeUndefined();
84+
expect(requireVideoProvider(registry, "safe-alias").id).toBe("safe-video");
7185
});
7286
});

0 commit comments

Comments
 (0)