





















@@ -1,10 +1,13 @@
11import { importFreshModule } from "openclaw/plugin-sdk/test-fixtures";
22import { beforeEach, describe, expect, it, vi } from "vitest";
3-import type { BundledPluginMetadata } from "../plugins/bundled-plugin-metadata.js";
3+import type { PluginManifestRegistry } from "../plugins/manifest-registry.js";
44import type { PluginManifestChannelConfig } from "../plugins/manifest.js";
556-const listBundledPluginMetadataMock = vi.hoisted(() =>
7-vi.fn<(options?: unknown) => readonly BundledPluginMetadata[]>(() => []),
6+const loadPluginManifestRegistryMock = vi.hoisted(() =>
7+vi.fn<(options?: Record<string, unknown>) => PluginManifestRegistry>(() => ({
8+plugins: [],
9+diagnostics: [],
10+})),
811);
912const collectBundledChannelConfigsMock = vi.hoisted(() =>
1013vi.fn<(params: unknown) => Record<string, PluginManifestChannelConfig> | undefined>(
@@ -14,10 +17,15 @@ const collectBundledChannelConfigsMock = vi.hoisted(() =>
14171518describe("ChannelsSchema bundled runtime loading", () => {
1619beforeEach(() => {
17-listBundledPluginMetadataMock.mockClear();
20+loadPluginManifestRegistryMock.mockClear();
21+loadPluginManifestRegistryMock.mockReturnValue({
22+plugins: [],
23+diagnostics: [],
24+});
1825collectBundledChannelConfigsMock.mockClear();
19-vi.doMock("../plugins/bundled-plugin-metadata.js", () => ({
20-listBundledPluginMetadata: (options?: unknown) => listBundledPluginMetadataMock(options),
26+vi.doMock("../plugins/plugin-registry.js", () => ({
27+loadPluginManifestRegistryForPluginRegistry: (options?: Record<string, unknown>) =>
28+loadPluginManifestRegistryMock(options),
2129}));
2230vi.doMock("../plugins/bundled-channel-config-metadata.js", () => ({
2331collectBundledChannelConfigs: (params: unknown) => collectBundledChannelConfigsMock(params),
@@ -42,18 +50,20 @@ describe("ChannelsSchema bundled runtime loading", () => {
4250});
43514452expect(parsed?.defaults?.groupPolicy).toBe("open");
45-expect(listBundledPluginMetadataMock).not.toHaveBeenCalledWith(
53+expect(loadPluginManifestRegistryMock).not.toHaveBeenCalledWith(
4654expect.objectContaining({
47-includeChannelConfigs: true,
55+bundledChannelConfigCollector: expect.any(Function),
4856}),
4957);
5058});
51595260it("loads bundled channel runtime discovery only when plugin-owned channel config is present", async () => {
53-listBundledPluginMetadataMock.mockReturnValueOnce([
54-{
55-dirName: "discord",
56-manifest: {
61+loadPluginManifestRegistryMock.mockReturnValueOnce({
62+diagnostics: [],
63+plugins: [
64+{
65+id: "discord",
66+origin: "bundled",
5767channels: ["discord"],
5868channelConfigs: {
5969discord: {
@@ -62,9 +72,9 @@ describe("ChannelsSchema bundled runtime loading", () => {
6272},
6373},
6474},
65-},
66-} as unknown as BundledPluginMetadata,
67-]);
75+} as unknown as PluginManifestRegistry["plugins"][number],
76+],
77+});
68786979const runtime = await importFreshModule<typeof import("./zod-schema.providers.js")>(
7080import.meta.url,
@@ -75,24 +85,16 @@ describe("ChannelsSchema bundled runtime loading", () => {
7585discord: {},
7686});
778778-expect(listBundledPluginMetadataMock.mock.calls).toContainEqual([
88+expect(loadPluginManifestRegistryMock.mock.calls).toContainEqual([
7989expect.objectContaining({
80-includeChannelConfigs: false,
81-includeSyntheticChannelConfigs: false,
90+includeDisabled: true,
91+bundledChannelConfigCollector: expect.any(Function),
8292}),
8393]);
8494expect(collectBundledChannelConfigsMock).not.toHaveBeenCalled();
8595});
86968797it("loads a single plugin-owned runtime surface when the manifest omits runtime metadata", async () => {
88-listBundledPluginMetadataMock.mockReturnValueOnce([
89-{
90-dirName: "discord",
91-manifest: {
92-channels: ["discord"],
93-},
94-} as unknown as BundledPluginMetadata,
95-]);
9698collectBundledChannelConfigsMock.mockReturnValueOnce({
9799discord: {
98100schema: {},
@@ -101,6 +103,24 @@ describe("ChannelsSchema bundled runtime loading", () => {
101103},
102104},
103105});
106+loadPluginManifestRegistryMock.mockImplementationOnce((options) => ({
107+diagnostics: [],
108+plugins: [
109+{
110+id: "discord",
111+origin: "bundled",
112+channels: ["discord"],
113+channelConfigs: (
114+options?.bundledChannelConfigCollector as
115+| ((params: unknown) => Record<string, PluginManifestChannelConfig> | undefined)
116+| undefined
117+)?.({
118+pluginDir: "/repo/extensions/discord",
119+manifest: { id: "discord", channels: ["discord"] },
120+}),
121+} as unknown as PluginManifestRegistry["plugins"][number],
122+],
123+}));
104124105125const runtime = await importFreshModule<typeof import("./zod-schema.providers.js")>(
106126import.meta.url,
@@ -111,10 +131,10 @@ describe("ChannelsSchema bundled runtime loading", () => {
111131discord: {},
112132});
113133114-expect(listBundledPluginMetadataMock.mock.calls).toContainEqual([
134+expect(loadPluginManifestRegistryMock.mock.calls).toContainEqual([
115135expect.objectContaining({
116-includeChannelConfigs: false,
117-includeSyntheticChannelConfigs: false,
136+includeDisabled: true,
137+bundledChannelConfigCollector: expect.any(Function),
118138}),
119139]);
120140expect(collectBundledChannelConfigsMock).toHaveBeenCalledTimes(1);
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。