86 lines
2.2 KiB
TypeScript
86 lines
2.2 KiB
TypeScript
import { ChannelType } from "discord-api-types/v10";
|
|
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
|
|
const hoisted = vi.hoisted(() => {
|
|
const restGet = vi.fn();
|
|
const createDiscordRestClient = vi.fn(() => ({
|
|
rest: {
|
|
get: restGet,
|
|
},
|
|
}));
|
|
return {
|
|
restGet,
|
|
createDiscordRestClient,
|
|
};
|
|
});
|
|
|
|
vi.mock("../client.js", () => ({
|
|
createDiscordRestClient: hoisted.createDiscordRestClient,
|
|
}));
|
|
|
|
const { resolveChannelIdForBinding } = await import("./thread-bindings.discord-api.js");
|
|
|
|
describe("resolveChannelIdForBinding", () => {
|
|
beforeEach(() => {
|
|
hoisted.restGet.mockClear();
|
|
hoisted.createDiscordRestClient.mockClear();
|
|
});
|
|
|
|
it("returns explicit channelId without resolving route", async () => {
|
|
const resolved = await resolveChannelIdForBinding({
|
|
accountId: "default",
|
|
threadId: "thread-1",
|
|
channelId: "channel-explicit",
|
|
});
|
|
|
|
expect(resolved).toBe("channel-explicit");
|
|
expect(hoisted.createDiscordRestClient).not.toHaveBeenCalled();
|
|
expect(hoisted.restGet).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it("returns parent channel for thread channels", async () => {
|
|
hoisted.restGet.mockResolvedValueOnce({
|
|
id: "thread-1",
|
|
type: ChannelType.PublicThread,
|
|
parent_id: "channel-parent",
|
|
});
|
|
|
|
const resolved = await resolveChannelIdForBinding({
|
|
accountId: "default",
|
|
threadId: "thread-1",
|
|
});
|
|
|
|
expect(resolved).toBe("channel-parent");
|
|
});
|
|
|
|
it("keeps non-thread channel id even when parent_id exists", async () => {
|
|
hoisted.restGet.mockResolvedValueOnce({
|
|
id: "channel-text",
|
|
type: ChannelType.GuildText,
|
|
parent_id: "category-1",
|
|
});
|
|
|
|
const resolved = await resolveChannelIdForBinding({
|
|
accountId: "default",
|
|
threadId: "channel-text",
|
|
});
|
|
|
|
expect(resolved).toBe("channel-text");
|
|
});
|
|
|
|
it("keeps forum channel id instead of parent category", async () => {
|
|
hoisted.restGet.mockResolvedValueOnce({
|
|
id: "forum-1",
|
|
type: ChannelType.GuildForum,
|
|
parent_id: "category-1",
|
|
});
|
|
|
|
const resolved = await resolveChannelIdForBinding({
|
|
accountId: "default",
|
|
threadId: "forum-1",
|
|
});
|
|
|
|
expect(resolved).toBe("forum-1");
|
|
});
|
|
});
|