mirror of https://github.com/openclaw/openclaw.git
157 lines
5.5 KiB
TypeScript
157 lines
5.5 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import {
|
|
filterMessagingToolMediaDuplicates,
|
|
shouldSuppressMessagingToolReplies,
|
|
} from "./reply-payloads.js";
|
|
|
|
describe("filterMessagingToolMediaDuplicates", () => {
|
|
it("strips mediaUrl when it matches sentMediaUrls", () => {
|
|
const result = filterMessagingToolMediaDuplicates({
|
|
payloads: [{ text: "hello", mediaUrl: "file:///tmp/photo.jpg" }],
|
|
sentMediaUrls: ["file:///tmp/photo.jpg"],
|
|
});
|
|
expect(result).toEqual([{ text: "hello", mediaUrl: undefined, mediaUrls: undefined }]);
|
|
});
|
|
|
|
it("preserves mediaUrl when it is not in sentMediaUrls", () => {
|
|
const result = filterMessagingToolMediaDuplicates({
|
|
payloads: [{ text: "hello", mediaUrl: "file:///tmp/photo.jpg" }],
|
|
sentMediaUrls: ["file:///tmp/other.jpg"],
|
|
});
|
|
expect(result).toEqual([{ text: "hello", mediaUrl: "file:///tmp/photo.jpg" }]);
|
|
});
|
|
|
|
it("filters matching entries from mediaUrls array", () => {
|
|
const result = filterMessagingToolMediaDuplicates({
|
|
payloads: [
|
|
{
|
|
text: "gallery",
|
|
mediaUrls: ["file:///tmp/a.jpg", "file:///tmp/b.jpg", "file:///tmp/c.jpg"],
|
|
},
|
|
],
|
|
sentMediaUrls: ["file:///tmp/b.jpg"],
|
|
});
|
|
expect(result).toEqual([
|
|
{ text: "gallery", mediaUrls: ["file:///tmp/a.jpg", "file:///tmp/c.jpg"] },
|
|
]);
|
|
});
|
|
|
|
it("clears mediaUrls when all entries match", () => {
|
|
const result = filterMessagingToolMediaDuplicates({
|
|
payloads: [{ text: "gallery", mediaUrls: ["file:///tmp/a.jpg"] }],
|
|
sentMediaUrls: ["file:///tmp/a.jpg"],
|
|
});
|
|
expect(result).toEqual([{ text: "gallery", mediaUrl: undefined, mediaUrls: undefined }]);
|
|
});
|
|
|
|
it("returns payloads unchanged when no media present", () => {
|
|
const payloads = [{ text: "plain text" }];
|
|
const result = filterMessagingToolMediaDuplicates({
|
|
payloads,
|
|
sentMediaUrls: ["file:///tmp/photo.jpg"],
|
|
});
|
|
expect(result).toStrictEqual(payloads);
|
|
});
|
|
|
|
it("returns payloads unchanged when sentMediaUrls is empty", () => {
|
|
const payloads = [{ text: "hello", mediaUrl: "file:///tmp/photo.jpg" }];
|
|
const result = filterMessagingToolMediaDuplicates({
|
|
payloads,
|
|
sentMediaUrls: [],
|
|
});
|
|
expect(result).toBe(payloads);
|
|
});
|
|
|
|
it("dedupes equivalent file and local path variants", () => {
|
|
const result = filterMessagingToolMediaDuplicates({
|
|
payloads: [{ text: "hello", mediaUrl: "/tmp/photo.jpg" }],
|
|
sentMediaUrls: ["file:///tmp/photo.jpg"],
|
|
});
|
|
expect(result).toEqual([{ text: "hello", mediaUrl: undefined, mediaUrls: undefined }]);
|
|
});
|
|
|
|
it("dedupes encoded file:// paths against local paths", () => {
|
|
const result = filterMessagingToolMediaDuplicates({
|
|
payloads: [{ text: "hello", mediaUrl: "/tmp/photo one.jpg" }],
|
|
sentMediaUrls: ["file:///tmp/photo%20one.jpg"],
|
|
});
|
|
expect(result).toEqual([{ text: "hello", mediaUrl: undefined, mediaUrls: undefined }]);
|
|
});
|
|
});
|
|
|
|
describe("shouldSuppressMessagingToolReplies", () => {
|
|
it("suppresses when target provider is missing but target matches current provider route", () => {
|
|
expect(
|
|
shouldSuppressMessagingToolReplies({
|
|
messageProvider: "telegram",
|
|
originatingTo: "123",
|
|
messagingToolSentTargets: [{ tool: "message", provider: "", to: "123" }],
|
|
}),
|
|
).toBe(true);
|
|
});
|
|
|
|
it('suppresses when target provider uses "message" placeholder and target matches', () => {
|
|
expect(
|
|
shouldSuppressMessagingToolReplies({
|
|
messageProvider: "telegram",
|
|
originatingTo: "123",
|
|
messagingToolSentTargets: [{ tool: "message", provider: "message", to: "123" }],
|
|
}),
|
|
).toBe(true);
|
|
});
|
|
|
|
it("does not suppress when providerless target does not match origin route", () => {
|
|
expect(
|
|
shouldSuppressMessagingToolReplies({
|
|
messageProvider: "telegram",
|
|
originatingTo: "123",
|
|
messagingToolSentTargets: [{ tool: "message", provider: "", to: "456" }],
|
|
}),
|
|
).toBe(false);
|
|
});
|
|
|
|
it("suppresses telegram topic-origin replies when explicit threadId matches", () => {
|
|
expect(
|
|
shouldSuppressMessagingToolReplies({
|
|
messageProvider: "telegram",
|
|
originatingTo: "telegram:group:-100123:topic:77",
|
|
messagingToolSentTargets: [
|
|
{ tool: "message", provider: "telegram", to: "-100123", threadId: "77" },
|
|
],
|
|
}),
|
|
).toBe(true);
|
|
});
|
|
|
|
it("does not suppress telegram topic-origin replies when explicit threadId differs", () => {
|
|
expect(
|
|
shouldSuppressMessagingToolReplies({
|
|
messageProvider: "telegram",
|
|
originatingTo: "telegram:group:-100123:topic:77",
|
|
messagingToolSentTargets: [
|
|
{ tool: "message", provider: "telegram", to: "-100123", threadId: "88" },
|
|
],
|
|
}),
|
|
).toBe(false);
|
|
});
|
|
|
|
it("does not suppress telegram topic-origin replies when target omits topic metadata", () => {
|
|
expect(
|
|
shouldSuppressMessagingToolReplies({
|
|
messageProvider: "telegram",
|
|
originatingTo: "telegram:group:-100123:topic:77",
|
|
messagingToolSentTargets: [{ tool: "message", provider: "telegram", to: "-100123" }],
|
|
}),
|
|
).toBe(false);
|
|
});
|
|
|
|
it("suppresses telegram replies when chatId matches but target forms differ", () => {
|
|
expect(
|
|
shouldSuppressMessagingToolReplies({
|
|
messageProvider: "telegram",
|
|
originatingTo: "telegram:group:-100123",
|
|
messagingToolSentTargets: [{ tool: "message", provider: "telegram", to: "-100123" }],
|
|
}),
|
|
).toBe(true);
|
|
});
|
|
});
|