Spaces:
Running
Running
| import { describe, expect, it } from "vitest"; | |
| import type { WebInboundMsg } from "./types.js"; | |
| import { isBotMentionedFromTargets, resolveMentionTargets } from "./mentions.js"; | |
| const makeMsg = (overrides: Partial<WebInboundMsg>): WebInboundMsg => | |
| ({ | |
| id: "m1", | |
| from: "120363401234567890@g.us", | |
| conversationId: "120363401234567890@g.us", | |
| to: "15551234567@s.whatsapp.net", | |
| accountId: "default", | |
| body: "", | |
| chatType: "group", | |
| chatId: "120363401234567890@g.us", | |
| sendComposing: async () => {}, | |
| reply: async () => {}, | |
| sendMedia: async () => {}, | |
| ...overrides, | |
| }) as WebInboundMsg; | |
| describe("isBotMentionedFromTargets", () => { | |
| const mentionCfg = { mentionRegexes: [/\bopenclaw\b/i] }; | |
| it("ignores regex matches when other mentions are present", () => { | |
| const msg = makeMsg({ | |
| body: "@OpenClaw please help", | |
| mentionedJids: ["19998887777@s.whatsapp.net"], | |
| selfE164: "+15551234567", | |
| selfJid: "15551234567@s.whatsapp.net", | |
| }); | |
| const targets = resolveMentionTargets(msg); | |
| expect(isBotMentionedFromTargets(msg, mentionCfg, targets)).toBe(false); | |
| }); | |
| it("matches explicit self mentions", () => { | |
| const msg = makeMsg({ | |
| body: "hey", | |
| mentionedJids: ["15551234567@s.whatsapp.net"], | |
| selfE164: "+15551234567", | |
| selfJid: "15551234567@s.whatsapp.net", | |
| }); | |
| const targets = resolveMentionTargets(msg); | |
| expect(isBotMentionedFromTargets(msg, mentionCfg, targets)).toBe(true); | |
| }); | |
| it("falls back to regex when no mentions are present", () => { | |
| const msg = makeMsg({ | |
| body: "openclaw can you help?", | |
| selfE164: "+15551234567", | |
| selfJid: "15551234567@s.whatsapp.net", | |
| }); | |
| const targets = resolveMentionTargets(msg); | |
| expect(isBotMentionedFromTargets(msg, mentionCfg, targets)).toBe(true); | |
| }); | |
| }); | |