openclaw/src/discord/monitor/threading.parent-info.test.ts

112 lines
3.1 KiB
TypeScript

import { ChannelType } from "@buape/carbon";
import { beforeEach, describe, expect, it, vi } from "vitest";
import { __resetDiscordChannelInfoCacheForTest } from "./message-utils.js";
import { resolveDiscordThreadParentInfo } from "./threading.js";
describe("resolveDiscordThreadParentInfo", () => {
beforeEach(() => {
__resetDiscordChannelInfoCacheForTest();
});
it("falls back to fetched thread parentId when parentId is missing in payload", async () => {
const fetchChannel = vi.fn(async (channelId: string) => {
if (channelId === "thread-1") {
return {
id: "thread-1",
type: ChannelType.PublicThread,
name: "thread-name",
parentId: "parent-1",
};
}
if (channelId === "parent-1") {
return {
id: "parent-1",
type: ChannelType.GuildText,
name: "parent-name",
};
}
return null;
});
const client = {
fetchChannel,
} as unknown as import("@buape/carbon").Client;
const result = await resolveDiscordThreadParentInfo({
client,
threadChannel: {
id: "thread-1",
parentId: undefined,
},
channelInfo: null,
});
expect(fetchChannel).toHaveBeenCalledWith("thread-1");
expect(fetchChannel).toHaveBeenCalledWith("parent-1");
expect(result).toEqual({
id: "parent-1",
name: "parent-name",
type: ChannelType.GuildText,
});
});
it("does not fetch thread info when parentId is already present", async () => {
const fetchChannel = vi.fn(async (channelId: string) => {
if (channelId === "parent-1") {
return {
id: "parent-1",
type: ChannelType.GuildText,
name: "parent-name",
};
}
return null;
});
const client = { fetchChannel } as unknown as import("@buape/carbon").Client;
const result = await resolveDiscordThreadParentInfo({
client,
threadChannel: {
id: "thread-1",
parentId: "parent-1",
},
channelInfo: null,
});
expect(fetchChannel).toHaveBeenCalledTimes(1);
expect(fetchChannel).toHaveBeenCalledWith("parent-1");
expect(result).toEqual({
id: "parent-1",
name: "parent-name",
type: ChannelType.GuildText,
});
});
it("returns empty parent info when fallback thread lookup has no parentId", async () => {
const fetchChannel = vi.fn(async (channelId: string) => {
if (channelId === "thread-1") {
return {
id: "thread-1",
type: ChannelType.PublicThread,
name: "thread-name",
parentId: undefined,
};
}
return null;
});
const client = { fetchChannel } as unknown as import("@buape/carbon").Client;
const result = await resolveDiscordThreadParentInfo({
client,
threadChannel: {
id: "thread-1",
parentId: undefined,
},
channelInfo: null,
});
expect(fetchChannel).toHaveBeenCalledTimes(1);
expect(fetchChannel).toHaveBeenCalledWith("thread-1");
expect(result).toEqual({});
});
});