























@@ -65,6 +65,18 @@ function buildCtx(overrides: Partial<MsgContext> = {}): MsgContext {
6565});
6666}
676768+function hookEventCall(index: number): [string, string, string, Record<string, unknown>] {
69+const call = mocks.createInternalHookEvent.mock.calls[index];
70+if (!call) {
71+throw new Error(`expected hook event call ${index + 1}`);
72+}
73+return call as [string, string, string, Record<string, unknown>];
74+}
75+76+function verboseMessages(): string[] {
77+return vi.mocked(logVerbose).mock.calls.map(([message]) => message);
78+}
79+6880describe("getReplyFromConfig message hooks", () => {
6981beforeEach(async () => {
7082await loadGetReplyRuntimeForTest();
@@ -111,28 +123,21 @@ describe("getReplyFromConfig message hooks", () => {
111123await getReplyFromConfig(ctx, undefined, withFastReplyConfig({}));
112124113125expect(mocks.createInternalHookEvent).toHaveBeenCalledTimes(2);
114-expect(mocks.createInternalHookEvent).toHaveBeenNthCalledWith(
115-1,
116-"message",
117-"transcribed",
118-"agent:main:telegram:-100123",
119-expect.objectContaining({
120-transcript: "voice transcript",
121-channelId: "telegram",
122-conversationId: "telegram:-100123",
123-}),
124-);
125-expect(mocks.createInternalHookEvent).toHaveBeenNthCalledWith(
126-2,
127-"message",
128-"preprocessed",
129-"agent:main:telegram:-100123",
130-expect.objectContaining({
131-transcript: "voice transcript",
132-isGroup: true,
133-groupId: "telegram:-100123",
134-}),
135-);
126+const transcribed = hookEventCall(0);
127+expect(transcribed[0]).toBe("message");
128+expect(transcribed[1]).toBe("transcribed");
129+expect(transcribed[2]).toBe("agent:main:telegram:-100123");
130+expect(transcribed[3].transcript).toBe("voice transcript");
131+expect(transcribed[3].channelId).toBe("telegram");
132+expect(transcribed[3].conversationId).toBe("telegram:-100123");
133+134+const preprocessed = hookEventCall(1);
135+expect(preprocessed[0]).toBe("message");
136+expect(preprocessed[1]).toBe("preprocessed");
137+expect(preprocessed[2]).toBe("agent:main:telegram:-100123");
138+expect(preprocessed[3].transcript).toBe("voice transcript");
139+expect(preprocessed[3].isGroup).toBe(true);
140+expect(preprocessed[3].groupId).toBe("telegram:-100123");
136141expect(mocks.triggerInternalHook).toHaveBeenCalledTimes(2);
137142});
138143@@ -147,12 +152,11 @@ describe("getReplyFromConfig message hooks", () => {
147152await getReplyFromConfig(buildCtx(), undefined, withFastReplyConfig({}));
148153149154expect(mocks.createInternalHookEvent).toHaveBeenCalledTimes(1);
150-expect(mocks.createInternalHookEvent).toHaveBeenCalledWith(
151-"message",
152-"preprocessed",
153-"agent:main:telegram:-100123",
154-expect.any(Object),
155-);
155+const preprocessed = hookEventCall(0);
156+expect(preprocessed[0]).toBe("message");
157+expect(preprocessed[1]).toBe("preprocessed");
158+expect(preprocessed[2]).toBe("agent:main:telegram:-100123");
159+expect(preprocessed[3]).toBeTypeOf("object");
156160});
157161158162it("skips message hooks in fast test mode", async () => {
@@ -213,15 +217,16 @@ describe("getReplyFromConfig message hooks", () => {
213217expect(mocks.initSessionState).toHaveBeenCalledTimes(1);
214218expect(mocks.resolveReplyDirectives).toHaveBeenCalledTimes(1);
215219expect(mocks.createInternalHookEvent).toHaveBeenCalledTimes(1);
216-expect(mocks.createInternalHookEvent).toHaveBeenCalledWith(
217-"message",
218-"preprocessed",
219-"agent:main:telegram:-100123",
220-expect.any(Object),
221-);
222-expect(logVerbose).toHaveBeenCalledWith(
223-expect.stringContaining("media understanding failed, proceeding with raw content"),
224-);
220+const preprocessed = hookEventCall(0);
221+expect(preprocessed[0]).toBe("message");
222+expect(preprocessed[1]).toBe("preprocessed");
223+expect(preprocessed[2]).toBe("agent:main:telegram:-100123");
224+expect(preprocessed[3]).toBeTypeOf("object");
225+expect(
226+verboseMessages().some((message) =>
227+message.includes("media understanding failed, proceeding with raw content"),
228+),
229+).toBe(true);
225230});
226231227232it("continues dispatching URL messages when link understanding fails before reply routing", async () => {
@@ -254,8 +259,10 @@ describe("getReplyFromConfig message hooks", () => {
254259expect(mocks.applyLinkUnderstanding).toHaveBeenCalledTimes(1);
255260expect(mocks.initSessionState).toHaveBeenCalledTimes(1);
256261expect(mocks.resolveReplyDirectives).toHaveBeenCalledTimes(1);
257-expect(logVerbose).toHaveBeenCalledWith(
258-expect.stringContaining("link understanding failed, proceeding with raw content"),
259-);
262+expect(
263+verboseMessages().some((message) =>
264+message.includes("link understanding failed, proceeding with raw content"),
265+),
266+).toBe(true);
260267});
261268});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。