惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

阮一峰的网络日志
阮一峰的网络日志
Blog — PlanetScale
Blog — PlanetScale
B
Blog RSS Feed
L
LangChain Blog
Jina AI
Jina AI
爱范儿
爱范儿
C
Check Point Blog
云风的 BLOG
云风的 BLOG
Last Week in AI
Last Week in AI
月光博客
月光博客
GbyAI
GbyAI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Stack Overflow Blog
Stack Overflow Blog
V
V2EX
A
About on SuperTechFans
有赞技术团队
有赞技术团队
Microsoft Azure Blog
Microsoft Azure Blog
The GitHub Blog
The GitHub Blog
博客园 - Franky
Apple Machine Learning Research
Apple Machine Learning Research
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google DeepMind News
Google DeepMind News
博客园 - 三生石上(FineUI控件)
S
SegmentFault 最新的问题

Recent Commits to openclaw:main

test: merge chat side-result checks · openclaw/openclaw@ddd2c2a test: merge cron history checks · openclaw/openclaw@f7eb746 test: merge responsive navigation shell checks · openclaw/openclaw@c2e4b47 docs(changelog): add codex oauth fixes · openclaw/openclaw@628e6cd test: merge navigation routing cases · openclaw/openclaw@5d8cecb Tests: mock channel registry bundled fallback · openclaw/openclaw@2b08233 Secrets: avoid broad web search discovery for single plugin config · openclaw/openclaw@a464f59 test: merge config view browser checks · openclaw/openclaw@20cf511 fix(status): align oauth health with runtime · openclaw/openclaw@eed7116 feat: add macOS screen snapshots for monitor preview (#67954) thanks … · openclaw/openclaw@f377db1 fix: report shared auth scopes in hello-ok (#67810) thanks @BunsDev · openclaw/openclaw@0b6c39b Auto-reply: avoid eager bundled route fallback · openclaw/openclaw@3ea1bf4 Tests: narrow session binding contract setup · openclaw/openclaw@54e4e16 fix(macOS): enable undo/redo in webchat composer text input (#34962) · openclaw/openclaw@00951dc Tests: speed up channel setup promotion · openclaw/openclaw@82b529a Docs: refresh agent instructions · openclaw/openclaw@5775fe2 fix(auth): serialize OAuth refresh across agents to fix #26322 (#67876) · openclaw/openclaw@8e79080 test: allow ollama public surface boundary test · openclaw/openclaw@7d4f1a6 Docs: add test performance guardrails · openclaw/openclaw@89706d3 Tests: restore context-engine usage proof · openclaw/openclaw@e4c4f95 Tests: slim context engine runtime coverage · openclaw/openclaw@74c198f ci: retry failed custom checkouts · openclaw/openclaw@0ee5baf test: trim duplicate provider auth onboarding cases · openclaw/openclaw@1ffc02e matrix: fix sessions_spawn --thread subagent session spawning (#67643) · openclaw/openclaw@1ce2596 test: reduce auth choice fixture churn · openclaw/openclaw@857b9cd test: mock health status config boundaries · openclaw/openclaw@9d5ab4a test: mock onboard config io boundary · openclaw/openclaw@299694d test: mock legacy state plugin boundaries · openclaw/openclaw@2713089 test: mock channel install boundaries · openclaw/openclaw@b945248 test: mock doctor preview channel boundaries · openclaw/openclaw@b1a3ad4
test: tighten telegram native command assertions · opencl...
steipete · 2026-05-11 · via Recent Commits to openclaw:main

@@ -121,6 +121,32 @@ function requireCommandHandler(

121121

return handler;

122122

}

123123124+

function expectRegisteredCommand(

125+

commands: Array<{ command: string; description: string }>,

126+

expected: { command: string; description: string },

127+

): void {

128+

expect(

129+

commands.some(

130+

(command) =>

131+

command.command === expected.command && command.description === expected.description,

132+

),

133+

).toBe(true);

134+

}

135+136+

function expectLastDeliveredReplyText(text: string): void {

137+

const calls = deliverReplies.mock.calls as unknown[][];

138+

const payload = calls.at(-1)?.[0] as { replies?: Array<{ text?: string }> } | undefined;

139+

expect(payload?.replies?.map((reply) => reply.text)).toEqual([text]);

140+

}

141+142+

function mockCall(mock: { mock: { calls: unknown[][] } }, index: number): unknown[] {

143+

const call = mock.mock.calls[index];

144+

if (!call) {

145+

throw new Error(`expected mock call ${index}`);

146+

}

147+

return call;

148+

}

149+124150

describe("registerTelegramNativeCommands real plugin registry", () => {

125151

beforeAll(async () => {

126152

({ setActivePluginRegistry } = await import("openclaw/plugin-sdk/plugin-test-runtime"));

@@ -150,19 +176,13 @@ describe("registerTelegramNativeCommands real plugin registry", () => {

150176

const { bot, commandHandlers, sendMessage, setMyCommands } = createCommandBot();

151177152178

const registeredCommands = await registerPairMenu({ bot, setMyCommands });

153-

expect(registeredCommands).toEqual(

154-

expect.arrayContaining([{ command: "pair", description: "Pair device" }]),

155-

);

179+

expectRegisteredCommand(registeredCommands, { command: "pair", description: "Pair device" });

156180157181

const handler = requireCommandHandler(commandHandlers, "pair");

158182159183

await handler(createPrivateCommandContext({ match: "now" }));

160184161-

expect(deliverReplies).toHaveBeenCalledWith(

162-

expect.objectContaining({

163-

replies: [expect.objectContaining({ text: "paired:now" })],

164-

}),

165-

);

185+

expectLastDeliveredReplyText("paired:now");

166186

expect(sendMessage).not.toHaveBeenCalledWith(123, "Command not found.");

167187

});

168188

@@ -182,17 +202,15 @@ describe("registerTelegramNativeCommands real plugin registry", () => {

182202183203

await handler(createPrivateCommandContext({ match: "now" }));

184204185-

expect(sendMessage).toHaveBeenCalledWith(

186-

100,

187-

expect.stringContaining("Running pair now"),

188-

undefined,

189-

);

190-

expect(editMessageTelegram).toHaveBeenCalledWith(

191-

100,

192-

999,

193-

"paired:now",

194-

expect.objectContaining({ accountId: "default" }),

195-

);

205+

const sendCall = mockCall(sendMessage, 0);

206+

expect(sendCall[0]).toBe(100);

207+

expect(sendCall[1]).toContain("Running pair now");

208+

expect(sendCall[2]).toBeUndefined();

209+

const editCall = mockCall(editMessageTelegram, 0);

210+

expect(editCall[0]).toBe(100);

211+

expect(editCall[1]).toBe(999);

212+

expect(editCall[2]).toBe("paired:now");

213+

expect((editCall[3] as { accountId?: string }).accountId).toBe("default");

196214

expect(deliverReplies).not.toHaveBeenCalled();

197215

});

198216

@@ -207,19 +225,16 @@ describe("registerTelegramNativeCommands real plugin registry", () => {

207225

discord: "pairdiscord",

208226

},

209227

});

210-

expect(registeredCommands).toEqual(

211-

expect.arrayContaining([{ command: "pair_device", description: "Pair device" }]),

212-

);

228+

expectRegisteredCommand(registeredCommands, {

229+

command: "pair_device",

230+

description: "Pair device",

231+

});

213232214233

const handler = requireCommandHandler(commandHandlers, "pair_device");

215234216235

await handler(createPrivateCommandContext({ match: "now", messageId: 2 }));

217236218-

expect(deliverReplies).toHaveBeenCalledWith(

219-

expect.objectContaining({

220-

replies: [expect.objectContaining({ text: "paired:now" })],

221-

}),

222-

);

237+

expectLastDeliveredReplyText("paired:now");

223238

expect(sendMessage).not.toHaveBeenCalledWith(123, "Command not found.");

224239

});

225240

@@ -266,11 +281,7 @@ describe("registerTelegramNativeCommands real plugin registry", () => {

266281

}),

267282

);

268283269-

expect(deliverReplies).toHaveBeenCalledWith(

270-

expect.objectContaining({

271-

replies: [expect.objectContaining({ text: "paired:now" })],

272-

}),

273-

);

284+

expectLastDeliveredReplyText("paired:now");

274285

expect(sendMessage).not.toHaveBeenCalled();

275286

});

276287

});