mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-31 15:48:32 +00:00
69 lines
1.8 KiB
TypeScript
69 lines
1.8 KiB
TypeScript
import { describe, expect, it, vi } from "vitest";
|
|
import { Container, TextDisplay } from "../internal/discord.js";
|
|
import {
|
|
deliverDiscordInteractionReply,
|
|
hasRenderableReplyPayload,
|
|
} from "./native-command-reply.js";
|
|
|
|
function createInteraction() {
|
|
return {
|
|
reply: vi.fn().mockResolvedValue({ ok: true }),
|
|
followUp: vi.fn().mockResolvedValue({ ok: true }),
|
|
};
|
|
}
|
|
|
|
describe("deliverDiscordInteractionReply", () => {
|
|
it("sends component-only native command replies as follow-ups", async () => {
|
|
const interaction = createInteraction();
|
|
const components = [new Container([new TextDisplay("Pick a model")])];
|
|
const payload = {
|
|
channelData: {
|
|
discord: {
|
|
components,
|
|
},
|
|
},
|
|
};
|
|
|
|
expect(hasRenderableReplyPayload(payload)).toBe(true);
|
|
|
|
await deliverDiscordInteractionReply({
|
|
interaction: interaction as never,
|
|
payload,
|
|
textLimit: 2000,
|
|
preferFollowUp: true,
|
|
responseEphemeral: true,
|
|
chunkMode: "length",
|
|
});
|
|
|
|
expect(interaction.followUp).toHaveBeenCalledWith({
|
|
components,
|
|
ephemeral: true,
|
|
});
|
|
expect(interaction.reply).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it("sends component-only native command replies through the initial reply when not deferred", async () => {
|
|
const interaction = createInteraction();
|
|
const components = [new Container([new TextDisplay("Choose an action")])];
|
|
|
|
await deliverDiscordInteractionReply({
|
|
interaction: interaction as never,
|
|
payload: {
|
|
channelData: {
|
|
discord: {
|
|
components,
|
|
},
|
|
},
|
|
},
|
|
textLimit: 2000,
|
|
preferFollowUp: false,
|
|
chunkMode: "length",
|
|
});
|
|
|
|
expect(interaction.reply).toHaveBeenCalledWith({
|
|
components,
|
|
});
|
|
expect(interaction.followUp).not.toHaveBeenCalled();
|
|
});
|
|
});
|