diff --git a/extensions/discord/src/monitor/provider.test.ts b/extensions/discord/src/monitor/provider.test.ts index 87420749ba7..594473e27e0 100644 --- a/extensions/discord/src/monitor/provider.test.ts +++ b/extensions/discord/src/monitor/provider.test.ts @@ -582,47 +582,6 @@ describe("monitorDiscordProvider", () => { expect(params?.workerRunTimeoutMs).toBe(300_000); }); - it("registers plugin commands from the real registry as native Discord commands", async () => { - const { - clearPluginCommands, - getPluginCommandSpecs: getRealPluginCommandSpecs, - registerPluginCommand, - } = await vi.importActual( - "openclaw/plugin-sdk/plugin-runtime", - ); - clearPluginCommands(); - listNativeCommandSpecsForConfigMock.mockReturnValue([ - { name: "status", description: "Status", acceptsArgs: false }, - ]); - getPluginCommandSpecsMock.mockImplementation((provider?: string) => - getRealPluginCommandSpecs(provider), - ); - - expect( - registerPluginCommand("demo-plugin", { - name: "pair", - description: "Pair device", - acceptsArgs: true, - requireAuth: false, - handler: async ({ args }) => ({ text: `paired:${args ?? ""}` }), - }), - ).toEqual({ ok: true }); - - await monitorDiscordProvider({ - config: baseConfig(), - runtime: baseRuntime(), - }); - - const commandNames = (createDiscordNativeCommandMock.mock.calls as Array) - .map((call) => (call[0] as { command?: { name?: string } } | undefined)?.command?.name) - .filter((value): value is string => typeof value === "string"); - - expect(commandNames).toContain("status"); - expect(commandNames).toContain("pair"); - expect(clientHandleDeployRequestMock).toHaveBeenCalledTimes(1); - expect(monitorLifecycleMock).toHaveBeenCalledTimes(1); - }); - it("continues startup when Discord daily slash-command create quota is exhausted", async () => { const runtime = baseRuntime(); const request = new Request("https://discord.com/api/v10/applications/commands", { diff --git a/extensions/telegram/src/bot-native-commands.plugin-auth.test.ts b/extensions/telegram/src/bot-native-commands.plugin-auth.test.ts deleted file mode 100644 index 30cc09cf2bd..00000000000 --- a/extensions/telegram/src/bot-native-commands.plugin-auth.test.ts +++ /dev/null @@ -1,115 +0,0 @@ -import type { OpenClawConfig } from "openclaw/plugin-sdk/config-runtime"; -import type { TelegramAccountConfig } from "openclaw/plugin-sdk/config-runtime"; -import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; - -let createNativeCommandsHarness: typeof import("./bot-native-commands.test-helpers.js").createNativeCommandsHarness; -let deliverReplies: typeof import("./bot-native-commands.test-helpers.js").deliverReplies; -let executePluginCommand: typeof import("./bot-native-commands.test-helpers.js").executePluginCommand; -let getPluginCommandSpecs: typeof import("./bot-native-commands.test-helpers.js").getPluginCommandSpecs; -let matchPluginCommand: typeof import("./bot-native-commands.test-helpers.js").matchPluginCommand; - -let getPluginCommandSpecsMock: { - mockReturnValue: ( - value: ReturnType, - ) => unknown; -}; -let matchPluginCommandMock: { - mockReturnValue: ( - value: ReturnType, - ) => unknown; -}; -let executePluginCommandMock: { - mockResolvedValue: ( - value: Awaited< - ReturnType - >, - ) => unknown; -}; - -describe("registerTelegramNativeCommands (plugin auth)", () => { - beforeAll(async () => { - vi.resetModules(); - ({ - createNativeCommandsHarness, - deliverReplies, - executePluginCommand, - getPluginCommandSpecs, - matchPluginCommand, - } = await import("./bot-native-commands.test-helpers.js")); - getPluginCommandSpecsMock = - getPluginCommandSpecs as unknown as typeof getPluginCommandSpecsMock; - matchPluginCommandMock = matchPluginCommand as unknown as typeof matchPluginCommandMock; - executePluginCommandMock = executePluginCommand as unknown as typeof executePluginCommandMock; - }); - - beforeEach(() => { - vi.clearAllMocks(); - }); - - it("does not register plugin commands in menu when native=false but keeps handlers available", () => { - const specs = Array.from({ length: 101 }, (_, i) => ({ - name: `cmd_${i}`, - description: `Command ${i}`, - acceptsArgs: false, - })); - getPluginCommandSpecsMock.mockReturnValue(specs); - - const { handlers, setMyCommands, log } = createNativeCommandsHarness({ - cfg: {} as OpenClawConfig, - telegramCfg: {} as TelegramAccountConfig, - nativeEnabled: false, - }); - - expect(setMyCommands).not.toHaveBeenCalled(); - expect(log).not.toHaveBeenCalledWith(expect.stringContaining("registering first 100")); - expect(Object.keys(handlers)).toHaveLength(101); - }); - - it("allows requireAuth:false plugin command even when sender is unauthorized", async () => { - const command = { - name: "plugin", - description: "Plugin command", - pluginId: "test-plugin", - requireAuth: false, - handler: vi.fn(), - } as const; - - getPluginCommandSpecsMock.mockReturnValue([ - { name: "plugin", description: "Plugin command", acceptsArgs: false }, - ]); - matchPluginCommandMock.mockReturnValue({ command, args: undefined }); - executePluginCommandMock.mockResolvedValue({ text: "ok" }); - - const { handlers, bot } = createNativeCommandsHarness({ - cfg: {} as OpenClawConfig, - telegramCfg: {} as TelegramAccountConfig, - allowFrom: ["999"], - nativeEnabled: false, - }); - - const ctx = { - message: { - chat: { id: 123, type: "private" }, - from: { id: 111, username: "nope" }, - message_id: 10, - date: 123456, - }, - match: "", - }; - - await handlers.plugin?.(ctx); - - expect(matchPluginCommand).toHaveBeenCalled(); - expect(executePluginCommand).toHaveBeenCalledWith( - expect.objectContaining({ - isAuthorizedSender: false, - }), - ); - expect(deliverReplies).toHaveBeenCalledWith( - expect.objectContaining({ - replies: [{ text: "ok" }], - }), - ); - expect(bot.api.sendMessage).not.toHaveBeenCalled(); - }); -});