Spaces:
Sleeping
Sleeping
| import { describe, it } from "vitest"; | |
| import type { MsgContext } from "../src/auto-reply/templating.js"; | |
| import { finalizeInboundContext } from "../src/auto-reply/reply/inbound-context.js"; | |
| import { expectInboundContextContract } from "./helpers/inbound-contract.js"; | |
| describe("inbound context contract (providers + extensions)", () => { | |
| const cases: Array<{ name: string; ctx: MsgContext }> = [ | |
| { | |
| name: "whatsapp group", | |
| ctx: { | |
| Provider: "whatsapp", | |
| Surface: "whatsapp", | |
| ChatType: "group", | |
| From: "123@g.us", | |
| To: "+15550001111", | |
| Body: "[WhatsApp 123@g.us] hi", | |
| RawBody: "hi", | |
| CommandBody: "hi", | |
| SenderName: "Alice", | |
| }, | |
| }, | |
| { | |
| name: "telegram group", | |
| ctx: { | |
| Provider: "telegram", | |
| Surface: "telegram", | |
| ChatType: "group", | |
| From: "group:123", | |
| To: "telegram:123", | |
| Body: "[Telegram group:123] hi", | |
| RawBody: "hi", | |
| CommandBody: "hi", | |
| GroupSubject: "Telegram Group", | |
| SenderName: "Alice", | |
| }, | |
| }, | |
| { | |
| name: "slack channel", | |
| ctx: { | |
| Provider: "slack", | |
| Surface: "slack", | |
| ChatType: "channel", | |
| From: "slack:channel:C123", | |
| To: "channel:C123", | |
| Body: "[Slack #general] hi", | |
| RawBody: "hi", | |
| CommandBody: "hi", | |
| GroupSubject: "#general", | |
| SenderName: "Alice", | |
| }, | |
| }, | |
| { | |
| name: "discord channel", | |
| ctx: { | |
| Provider: "discord", | |
| Surface: "discord", | |
| ChatType: "channel", | |
| From: "group:123", | |
| To: "channel:123", | |
| Body: "[Discord #general] hi", | |
| RawBody: "hi", | |
| CommandBody: "hi", | |
| GroupSubject: "#general", | |
| SenderName: "Alice", | |
| }, | |
| }, | |
| { | |
| name: "signal dm", | |
| ctx: { | |
| Provider: "signal", | |
| Surface: "signal", | |
| ChatType: "direct", | |
| From: "signal:+15550001111", | |
| To: "signal:+15550002222", | |
| Body: "[Signal] hi", | |
| RawBody: "hi", | |
| CommandBody: "hi", | |
| }, | |
| }, | |
| { | |
| name: "imessage group", | |
| ctx: { | |
| Provider: "imessage", | |
| Surface: "imessage", | |
| ChatType: "group", | |
| From: "group:chat_id:123", | |
| To: "chat_id:123", | |
| Body: "[iMessage Group] hi", | |
| RawBody: "hi", | |
| CommandBody: "hi", | |
| GroupSubject: "iMessage Group", | |
| SenderName: "Alice", | |
| }, | |
| }, | |
| { | |
| name: "matrix channel", | |
| ctx: { | |
| Provider: "matrix", | |
| Surface: "matrix", | |
| ChatType: "channel", | |
| From: "matrix:channel:!room:example.org", | |
| To: "room:!room:example.org", | |
| Body: "[Matrix] hi", | |
| RawBody: "hi", | |
| CommandBody: "hi", | |
| GroupSubject: "#general", | |
| SenderName: "Alice", | |
| }, | |
| }, | |
| { | |
| name: "msteams channel", | |
| ctx: { | |
| Provider: "msteams", | |
| Surface: "msteams", | |
| ChatType: "channel", | |
| From: "msteams:channel:19:abc@thread.tacv2", | |
| To: "msteams:channel:19:abc@thread.tacv2", | |
| Body: "[Teams] hi", | |
| RawBody: "hi", | |
| CommandBody: "hi", | |
| GroupSubject: "Teams Channel", | |
| SenderName: "Alice", | |
| }, | |
| }, | |
| { | |
| name: "zalo dm", | |
| ctx: { | |
| Provider: "zalo", | |
| Surface: "zalo", | |
| ChatType: "direct", | |
| From: "zalo:123", | |
| To: "zalo:123", | |
| Body: "[Zalo] hi", | |
| RawBody: "hi", | |
| CommandBody: "hi", | |
| }, | |
| }, | |
| { | |
| name: "zalouser group", | |
| ctx: { | |
| Provider: "zalouser", | |
| Surface: "zalouser", | |
| ChatType: "group", | |
| From: "group:123", | |
| To: "zalouser:123", | |
| Body: "[Zalo Personal] hi", | |
| RawBody: "hi", | |
| CommandBody: "hi", | |
| GroupSubject: "Zalouser Group", | |
| SenderName: "Alice", | |
| }, | |
| }, | |
| ]; | |
| for (const entry of cases) { | |
| it(entry.name, () => { | |
| const ctx = finalizeInboundContext({ ...entry.ctx }); | |
| expectInboundContextContract(ctx); | |
| }); | |
| } | |
| }); | |