import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import type { MoltbotConfig } from "../config/config.js"; import type { ChannelPlugin } from "../channels/plugins/types.js"; import { setActivePluginRegistry } from "../plugins/runtime.js"; import { createTestRegistry } from "../test-utils/channel-plugins.js"; import { defaultRuntime } from "../runtime.js"; import { __testing, listAllChannelSupportedActions } from "./channel-tools.js"; describe("channel tools", () => { const errorSpy = vi.spyOn(defaultRuntime, "error").mockImplementation(() => undefined); beforeEach(() => { const plugin: ChannelPlugin = { id: "test", meta: { id: "test", label: "Test", selectionLabel: "Test", docsPath: "/channels/test", blurb: "test plugin", }, capabilities: { chatTypes: ["direct"] }, config: { listAccountIds: () => [], resolveAccount: () => ({}), }, actions: { listActions: () => { throw new Error("boom"); }, }, }; __testing.resetLoggedListActionErrors(); errorSpy.mockClear(); setActivePluginRegistry(createTestRegistry([{ pluginId: "test", source: "test", plugin }])); }); afterEach(() => { setActivePluginRegistry(createTestRegistry([])); errorSpy.mockClear(); }); it("skips crashing plugins and logs once", () => { const cfg = {} as MoltbotConfig; expect(listAllChannelSupportedActions({ cfg })).toEqual([]); expect(errorSpy).toHaveBeenCalledTimes(1); expect(listAllChannelSupportedActions({ cfg })).toEqual([]); expect(errorSpy).toHaveBeenCalledTimes(1); }); });