From 9da7988efc07814d1a9798e661ca4641225e5d40 Mon Sep 17 00:00:00 2001 From: hope Date: Fri, 13 Mar 2026 09:55:14 +0800 Subject: [PATCH] test: cover bound channel delivery and persistedLastTo fallback Add regression tests for inter-session reply delivery: - Test delivery to bound external channel when persistedLastTo is set - Test fallback to originatingToRaw when persistedLastTo is undefined - Regression test: ensure messages are not silently dropped Fixes #34308 Ref: #43703 (Greptile review feedback) --- src/auto-reply/reply/session-delivery.test.ts | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/src/auto-reply/reply/session-delivery.test.ts b/src/auto-reply/reply/session-delivery.test.ts index bd5f0d7c27b..526a8b161be 100644 --- a/src/auto-reply/reply/session-delivery.test.ts +++ b/src/auto-reply/reply/session-delivery.test.ts @@ -1,6 +1,63 @@ import { describe, expect, it } from "vitest"; import { resolveLastChannelRaw, resolveLastToRaw } from "./session-delivery.js"; +describe("session delivery bound channel routing", () => { + it("delivers to bound external channel when persistedLastTo is set", () => { + // Session has deliveryContext bound to Telegram channel + const sessionKey = "agent:main:telegram:default:channel:C123456"; + + expect( + resolveLastChannelRaw({ + originatingChannelRaw: "INTERNAL_MESSAGE_CHANNEL", + persistedLastChannel: "telegram", + sessionKey, + }), + ).toBe("telegram"); + + expect( + resolveLastToRaw({ + originatingChannelRaw: "INTERNAL_MESSAGE_CHANNEL", + originatingToRaw: "session:inter-session-123", + persistedLastChannel: "telegram", + persistedLastTo: "C123456", + sessionKey, + }), + ).toBe("C123456"); + }); + + it("falls back to originatingToRaw when persistedLastTo is not set", () => { + // Session bound to external channel but lastTo not yet persisted + const sessionKey = "agent:main:telegram:default:channel:C123456"; + + expect( + resolveLastToRaw({ + originatingChannelRaw: "INTERNAL_MESSAGE_CHANNEL", + originatingToRaw: "session:inter-session-123", + persistedLastChannel: "telegram", + persistedLastTo: undefined, + sessionKey, + }), + ).toBe("session:inter-session-123"); + }); + + it("does not drop delivery when persistedLastTo is falsy", () => { + // Regression test: ensure we don't silently drop messages + const sessionKey = "agent:main:telegram:default:channel:C123456"; + + const result = resolveLastToRaw({ + originatingChannelRaw: "INTERNAL_MESSAGE_CHANNEL", + originatingToRaw: "session:inter-session-123", + persistedLastChannel: "telegram", + persistedLastTo: undefined, + sessionKey, + }); + + // Should NOT return undefined (which would drop the message) + expect(result).not.toBeUndefined(); + expect(result).toBe("session:inter-session-123"); + }); +}); + describe("session delivery direct-session routing overrides", () => { it.each([ "agent:main:direct:user-1",