mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-29 10:50:58 +00:00
82 lines
2.4 KiB
TypeScript
82 lines
2.4 KiB
TypeScript
import { Routes } from "discord-api-types/v10";
|
|
import { describe, expect, it, vi } from "vitest";
|
|
import { createDiscordDraftStream } from "./draft-stream.js";
|
|
|
|
describe("createDiscordDraftStream", () => {
|
|
it("holds the first preview until minInitialChars is reached", async () => {
|
|
const rest = {
|
|
post: vi.fn(async () => ({ id: "m1" })),
|
|
patch: vi.fn(async () => undefined),
|
|
delete: vi.fn(async () => undefined),
|
|
};
|
|
const stream = createDiscordDraftStream({
|
|
rest: rest as never,
|
|
channelId: "c1",
|
|
throttleMs: 250,
|
|
minInitialChars: 5,
|
|
});
|
|
|
|
stream.update("hey");
|
|
await stream.flush();
|
|
|
|
expect(rest.post).not.toHaveBeenCalled();
|
|
expect(stream.messageId()).toBeUndefined();
|
|
});
|
|
|
|
it("sends a reply preview, then edits the same message on later flushes", async () => {
|
|
const rest = {
|
|
post: vi.fn(async () => ({ id: "m1" })),
|
|
patch: vi.fn(async () => undefined),
|
|
delete: vi.fn(async () => undefined),
|
|
};
|
|
const stream = createDiscordDraftStream({
|
|
rest: rest as never,
|
|
channelId: "c1",
|
|
throttleMs: 250,
|
|
replyToMessageId: () => " parent-1 ",
|
|
});
|
|
|
|
stream.update("first draft");
|
|
await stream.flush();
|
|
stream.update("second draft");
|
|
await stream.flush();
|
|
|
|
expect(rest.post).toHaveBeenCalledWith(Routes.channelMessages("c1"), {
|
|
body: {
|
|
content: "first draft",
|
|
message_reference: {
|
|
message_id: "parent-1",
|
|
fail_if_not_exists: false,
|
|
},
|
|
},
|
|
});
|
|
expect(rest.patch).toHaveBeenCalledWith(Routes.channelMessage("c1", "m1"), {
|
|
body: { content: "second draft" },
|
|
});
|
|
expect(stream.messageId()).toBe("m1");
|
|
});
|
|
|
|
it("stops previewing and warns once text exceeds the configured limit", async () => {
|
|
const rest = {
|
|
post: vi.fn(async () => ({ id: "m1" })),
|
|
patch: vi.fn(async () => undefined),
|
|
delete: vi.fn(async () => undefined),
|
|
};
|
|
const warn = vi.fn();
|
|
const stream = createDiscordDraftStream({
|
|
rest: rest as never,
|
|
channelId: "c1",
|
|
maxChars: 5,
|
|
throttleMs: 250,
|
|
warn,
|
|
});
|
|
|
|
stream.update("123456");
|
|
await stream.flush();
|
|
|
|
expect(rest.post).not.toHaveBeenCalled();
|
|
expect(warn).toHaveBeenCalledWith(expect.stringContaining("discord stream preview stopped"));
|
|
expect(stream.messageId()).toBeUndefined();
|
|
});
|
|
});
|