mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-29 19:01:44 +00:00
fix(regression): align msteams send helper runtime usage
This commit is contained in:
@@ -5,6 +5,10 @@ import { deleteMessageMSTeams, editMessageMSTeams, sendMessageMSTeams } from "./
|
||||
const mockState = vi.hoisted(() => ({
|
||||
loadOutboundMediaFromUrl: vi.fn(),
|
||||
resolveMSTeamsSendContext: vi.fn(),
|
||||
resolveMarkdownTableMode: vi.fn(() => "off"),
|
||||
convertMarkdownTables: vi.fn((text: string) => text),
|
||||
runtimeResolveMarkdownTableMode: vi.fn(() => "off"),
|
||||
runtimeConvertMarkdownTables: vi.fn((text: string) => text),
|
||||
requiresFileConsent: vi.fn(),
|
||||
prepareFileConsentActivity: vi.fn(),
|
||||
extractFilename: vi.fn(async () => "fallback.bin"),
|
||||
@@ -18,6 +22,14 @@ vi.mock("../runtime-api.js", () => ({
|
||||
loadOutboundMediaFromUrl: mockState.loadOutboundMediaFromUrl,
|
||||
}));
|
||||
|
||||
vi.mock("openclaw/plugin-sdk/config-runtime", () => ({
|
||||
resolveMarkdownTableMode: mockState.resolveMarkdownTableMode,
|
||||
}));
|
||||
|
||||
vi.mock("openclaw/plugin-sdk/text-runtime", () => ({
|
||||
convertMarkdownTables: mockState.convertMarkdownTables,
|
||||
}));
|
||||
|
||||
vi.mock("./send-context.js", () => ({
|
||||
resolveMSTeamsSendContext: mockState.resolveMSTeamsSendContext,
|
||||
}));
|
||||
@@ -41,8 +53,8 @@ vi.mock("./runtime.js", () => ({
|
||||
getMSTeamsRuntime: () => ({
|
||||
channel: {
|
||||
text: {
|
||||
resolveMarkdownTableMode: () => "off",
|
||||
convertMarkdownTables: (text: string) => text,
|
||||
resolveMarkdownTableMode: mockState.runtimeResolveMarkdownTableMode,
|
||||
convertMarkdownTables: mockState.runtimeConvertMarkdownTables,
|
||||
},
|
||||
},
|
||||
}),
|
||||
@@ -140,6 +152,14 @@ describe("sendMessageMSTeams", () => {
|
||||
beforeEach(() => {
|
||||
mockState.loadOutboundMediaFromUrl.mockReset();
|
||||
mockState.resolveMSTeamsSendContext.mockReset();
|
||||
mockState.resolveMarkdownTableMode.mockReset();
|
||||
mockState.resolveMarkdownTableMode.mockReturnValue("off");
|
||||
mockState.convertMarkdownTables.mockReset();
|
||||
mockState.convertMarkdownTables.mockImplementation((text: string) => text);
|
||||
mockState.runtimeResolveMarkdownTableMode.mockReset();
|
||||
mockState.runtimeResolveMarkdownTableMode.mockReturnValue("off");
|
||||
mockState.runtimeConvertMarkdownTables.mockReset();
|
||||
mockState.runtimeConvertMarkdownTables.mockImplementation((text: string) => text);
|
||||
mockState.requiresFileConsent.mockReset();
|
||||
mockState.prepareFileConsentActivity.mockReset();
|
||||
mockState.extractFilename.mockReset();
|
||||
@@ -201,6 +221,34 @@ describe("sendMessageMSTeams", () => {
|
||||
);
|
||||
});
|
||||
|
||||
it("sends with provided cfg even when Teams runtime text helpers are unavailable", async () => {
|
||||
mockState.runtimeResolveMarkdownTableMode.mockImplementation(() => {
|
||||
throw new Error("MSTeams runtime not initialized");
|
||||
});
|
||||
mockState.runtimeConvertMarkdownTables.mockImplementation(() => {
|
||||
throw new Error("MSTeams runtime not initialized");
|
||||
});
|
||||
mockState.resolveMarkdownTableMode.mockReturnValue("off");
|
||||
mockState.convertMarkdownTables.mockReturnValue("hello");
|
||||
|
||||
await expect(
|
||||
sendMessageMSTeams({
|
||||
cfg: {} as OpenClawConfig,
|
||||
to: "conversation:19:conversation@thread.tacv2",
|
||||
text: "hello",
|
||||
}),
|
||||
).resolves.toEqual({
|
||||
messageId: "message-1",
|
||||
conversationId: "19:conversation@thread.tacv2",
|
||||
});
|
||||
|
||||
expect(mockState.resolveMarkdownTableMode).toHaveBeenCalledWith({
|
||||
cfg: {},
|
||||
channel: "msteams",
|
||||
});
|
||||
expect(mockState.convertMarkdownTables).toHaveBeenCalledWith("hello", "off");
|
||||
});
|
||||
|
||||
it("uses graphChatId instead of conversationId when uploading to SharePoint", async () => {
|
||||
// Simulates a group chat where Bot Framework conversationId is valid but we have
|
||||
// a resolved Graph chat ID cached from a prior send.
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import { resolveMarkdownTableMode } from "openclaw/plugin-sdk/config-runtime";
|
||||
import { convertMarkdownTables } from "openclaw/plugin-sdk/text-runtime";
|
||||
import type { OpenClawConfig } from "../runtime-api.js";
|
||||
import { loadOutboundMediaFromUrl } from "../runtime-api.js";
|
||||
import { createMSTeamsConversationStoreFs } from "./conversation-store-fs.js";
|
||||
@@ -97,11 +99,11 @@ export async function sendMessageMSTeams(
|
||||
params: SendMSTeamsMessageParams,
|
||||
): Promise<SendMSTeamsMessageResult> {
|
||||
const { cfg, to, text, mediaUrl, filename, mediaLocalRoots } = params;
|
||||
const tableMode = getMSTeamsRuntime().channel.text.resolveMarkdownTableMode({
|
||||
const tableMode = resolveMarkdownTableMode({
|
||||
cfg,
|
||||
channel: "msteams",
|
||||
});
|
||||
const messageText = getMSTeamsRuntime().channel.text.convertMarkdownTables(text ?? "", tableMode);
|
||||
const messageText = convertMarkdownTables(text ?? "", tableMode);
|
||||
const ctx = await resolveMSTeamsSendContext({ cfg, to });
|
||||
const {
|
||||
adapter,
|
||||
|
||||
Reference in New Issue
Block a user