mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 08:50:43 +00:00
test: dedupe subagent announcement fixtures
This commit is contained in:
@@ -7,6 +7,53 @@ afterEach(() => {
|
||||
__testing.setDepsForTest();
|
||||
});
|
||||
|
||||
const slackThreadOrigin = {
|
||||
channel: "slack",
|
||||
to: "channel:C123",
|
||||
accountId: "acct-1",
|
||||
threadId: "171.222",
|
||||
} as const;
|
||||
|
||||
function createGatewayMock() {
|
||||
return vi.fn(async () => ({}) as Record<string, unknown>) as unknown as typeof runtimeCallGateway;
|
||||
}
|
||||
|
||||
async function deliverSlackThreadAnnouncement(params: {
|
||||
callGateway: typeof runtimeCallGateway;
|
||||
isActive: boolean;
|
||||
sessionId: string;
|
||||
expectsCompletionMessage: boolean;
|
||||
directIdempotencyKey: string;
|
||||
queueEmbeddedPiMessage?: (sessionId: string, message: string) => boolean;
|
||||
}) {
|
||||
__testing.setDepsForTest({
|
||||
callGateway: params.callGateway,
|
||||
getRequesterSessionActivity: () => ({
|
||||
sessionId: params.sessionId,
|
||||
isActive: params.isActive,
|
||||
}),
|
||||
loadConfig: () => ({}) as never,
|
||||
...(params.queueEmbeddedPiMessage
|
||||
? { queueEmbeddedPiMessage: params.queueEmbeddedPiMessage }
|
||||
: {}),
|
||||
});
|
||||
|
||||
return deliverSubagentAnnouncement({
|
||||
requesterSessionKey: "agent:main:slack:channel:C123:thread:171.222",
|
||||
targetRequesterSessionKey: "agent:main:slack:channel:C123:thread:171.222",
|
||||
triggerMessage: "child done",
|
||||
steerMessage: "child done",
|
||||
requesterOrigin: slackThreadOrigin,
|
||||
requesterSessionOrigin: slackThreadOrigin,
|
||||
completionDirectOrigin: slackThreadOrigin,
|
||||
directOrigin: slackThreadOrigin,
|
||||
requesterIsSubagent: false,
|
||||
expectsCompletionMessage: params.expectsCompletionMessage,
|
||||
bestEffortDeliver: true,
|
||||
directIdempotencyKey: params.directIdempotencyKey,
|
||||
});
|
||||
}
|
||||
|
||||
describe("resolveAnnounceOrigin threaded route targets", () => {
|
||||
it("preserves stored thread ids when requester origin omits one for the same chat", () => {
|
||||
expect(
|
||||
@@ -70,53 +117,15 @@ describe("resolveAnnounceOrigin threaded route targets", () => {
|
||||
|
||||
describe("deliverSubagentAnnouncement completion delivery", () => {
|
||||
it("keeps completion announces session-internal while preserving route context for active requesters", async () => {
|
||||
const callGateway = vi.fn(
|
||||
async () => ({}) as Record<string, unknown>,
|
||||
) as unknown as typeof runtimeCallGateway;
|
||||
const callGateway = createGatewayMock();
|
||||
const queueEmbeddedPiMessage = vi.fn(() => true);
|
||||
__testing.setDepsForTest({
|
||||
const result = await deliverSlackThreadAnnouncement({
|
||||
callGateway,
|
||||
getRequesterSessionActivity: () => ({
|
||||
sessionId: "requester-session-1",
|
||||
isActive: true,
|
||||
}),
|
||||
loadConfig: () => ({}) as never,
|
||||
queueEmbeddedPiMessage,
|
||||
});
|
||||
|
||||
const result = await deliverSubagentAnnouncement({
|
||||
requesterSessionKey: "agent:main:slack:channel:C123:thread:171.222",
|
||||
targetRequesterSessionKey: "agent:main:slack:channel:C123:thread:171.222",
|
||||
triggerMessage: "child done",
|
||||
steerMessage: "child done",
|
||||
requesterOrigin: {
|
||||
channel: "slack",
|
||||
to: "channel:C123",
|
||||
accountId: "acct-1",
|
||||
threadId: "171.222",
|
||||
},
|
||||
requesterSessionOrigin: {
|
||||
channel: "slack",
|
||||
to: "channel:C123",
|
||||
accountId: "acct-1",
|
||||
threadId: "171.222",
|
||||
},
|
||||
completionDirectOrigin: {
|
||||
channel: "slack",
|
||||
to: "channel:C123",
|
||||
accountId: "acct-1",
|
||||
threadId: "171.222",
|
||||
},
|
||||
directOrigin: {
|
||||
channel: "slack",
|
||||
to: "channel:C123",
|
||||
accountId: "acct-1",
|
||||
threadId: "171.222",
|
||||
},
|
||||
requesterIsSubagent: false,
|
||||
sessionId: "requester-session-1",
|
||||
isActive: true,
|
||||
expectsCompletionMessage: true,
|
||||
bestEffortDeliver: true,
|
||||
directIdempotencyKey: "announce-1",
|
||||
queueEmbeddedPiMessage,
|
||||
});
|
||||
|
||||
expect(result).toEqual(
|
||||
@@ -130,50 +139,12 @@ describe("deliverSubagentAnnouncement completion delivery", () => {
|
||||
});
|
||||
|
||||
it("keeps direct external delivery for dormant completion requesters", async () => {
|
||||
const callGateway = vi.fn(
|
||||
async () => ({}) as Record<string, unknown>,
|
||||
) as unknown as typeof runtimeCallGateway;
|
||||
__testing.setDepsForTest({
|
||||
const callGateway = createGatewayMock();
|
||||
await deliverSlackThreadAnnouncement({
|
||||
callGateway,
|
||||
getRequesterSessionActivity: () => ({
|
||||
sessionId: "requester-session-2",
|
||||
isActive: false,
|
||||
}),
|
||||
loadConfig: () => ({}) as never,
|
||||
});
|
||||
|
||||
await deliverSubagentAnnouncement({
|
||||
requesterSessionKey: "agent:main:slack:channel:C123:thread:171.222",
|
||||
targetRequesterSessionKey: "agent:main:slack:channel:C123:thread:171.222",
|
||||
triggerMessage: "child done",
|
||||
steerMessage: "child done",
|
||||
requesterOrigin: {
|
||||
channel: "slack",
|
||||
to: "channel:C123",
|
||||
accountId: "acct-1",
|
||||
threadId: "171.222",
|
||||
},
|
||||
requesterSessionOrigin: {
|
||||
channel: "slack",
|
||||
to: "channel:C123",
|
||||
accountId: "acct-1",
|
||||
threadId: "171.222",
|
||||
},
|
||||
completionDirectOrigin: {
|
||||
channel: "slack",
|
||||
to: "channel:C123",
|
||||
accountId: "acct-1",
|
||||
threadId: "171.222",
|
||||
},
|
||||
directOrigin: {
|
||||
channel: "slack",
|
||||
to: "channel:C123",
|
||||
accountId: "acct-1",
|
||||
threadId: "171.222",
|
||||
},
|
||||
requesterIsSubagent: false,
|
||||
sessionId: "requester-session-2",
|
||||
isActive: false,
|
||||
expectsCompletionMessage: true,
|
||||
bestEffortDeliver: true,
|
||||
directIdempotencyKey: "announce-1b",
|
||||
});
|
||||
|
||||
@@ -193,50 +164,12 @@ describe("deliverSubagentAnnouncement completion delivery", () => {
|
||||
});
|
||||
|
||||
it("keeps direct external delivery for non-completion announces", async () => {
|
||||
const callGateway = vi.fn(
|
||||
async () => ({}) as Record<string, unknown>,
|
||||
) as unknown as typeof runtimeCallGateway;
|
||||
__testing.setDepsForTest({
|
||||
const callGateway = createGatewayMock();
|
||||
await deliverSlackThreadAnnouncement({
|
||||
callGateway,
|
||||
getRequesterSessionActivity: () => ({
|
||||
sessionId: "requester-session-3",
|
||||
isActive: false,
|
||||
}),
|
||||
loadConfig: () => ({}) as never,
|
||||
});
|
||||
|
||||
await deliverSubagentAnnouncement({
|
||||
requesterSessionKey: "agent:main:slack:channel:C123:thread:171.222",
|
||||
targetRequesterSessionKey: "agent:main:slack:channel:C123:thread:171.222",
|
||||
triggerMessage: "child done",
|
||||
steerMessage: "child done",
|
||||
requesterOrigin: {
|
||||
channel: "slack",
|
||||
to: "channel:C123",
|
||||
accountId: "acct-1",
|
||||
threadId: "171.222",
|
||||
},
|
||||
requesterSessionOrigin: {
|
||||
channel: "slack",
|
||||
to: "channel:C123",
|
||||
accountId: "acct-1",
|
||||
threadId: "171.222",
|
||||
},
|
||||
completionDirectOrigin: {
|
||||
channel: "slack",
|
||||
to: "channel:C123",
|
||||
accountId: "acct-1",
|
||||
threadId: "171.222",
|
||||
},
|
||||
directOrigin: {
|
||||
channel: "slack",
|
||||
to: "channel:C123",
|
||||
accountId: "acct-1",
|
||||
threadId: "171.222",
|
||||
},
|
||||
requesterIsSubagent: false,
|
||||
sessionId: "requester-session-3",
|
||||
isActive: false,
|
||||
expectsCompletionMessage: false,
|
||||
bestEffortDeliver: true,
|
||||
directIdempotencyKey: "announce-2",
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user