* feat: add LINE plugin (#1630) (thanks @plum-dawg) * feat: complete LINE plugin (#1630) (thanks @plum-dawg) * chore: drop line plugin node_modules (#1630) (thanks @plum-dawg) * test: mock /context report in commands test (#1630) (thanks @plum-dawg) * test: limit macOS CI workers to avoid OOM (#1630) (thanks @plum-dawg) * test: reduce macOS CI vitest workers (#1630) (thanks @plum-dawg) --------- Co-authored-by: Peter Steinberger <steipete@gmail.com>
116 lines
4.0 KiB
TypeScript
116 lines
4.0 KiB
TypeScript
import { describe, expect, it, vi } from "vitest";
|
|
import { sendLineReplyChunks } from "./reply-chunks.js";
|
|
|
|
describe("sendLineReplyChunks", () => {
|
|
it("uses reply token for all chunks when possible", async () => {
|
|
const replyMessageLine = vi.fn(async () => ({}));
|
|
const pushMessageLine = vi.fn(async () => ({}));
|
|
const pushTextMessageWithQuickReplies = vi.fn(async () => ({}));
|
|
const createTextMessageWithQuickReplies = vi.fn((text: string, _quickReplies: string[]) => ({
|
|
type: "text" as const,
|
|
text,
|
|
}));
|
|
|
|
const result = await sendLineReplyChunks({
|
|
to: "line:group:1",
|
|
chunks: ["one", "two", "three"],
|
|
quickReplies: ["A", "B"],
|
|
replyToken: "token",
|
|
replyTokenUsed: false,
|
|
accountId: "default",
|
|
replyMessageLine,
|
|
pushMessageLine,
|
|
pushTextMessageWithQuickReplies,
|
|
createTextMessageWithQuickReplies,
|
|
});
|
|
|
|
expect(result.replyTokenUsed).toBe(true);
|
|
expect(replyMessageLine).toHaveBeenCalledTimes(1);
|
|
expect(createTextMessageWithQuickReplies).toHaveBeenCalledWith("three", ["A", "B"]);
|
|
expect(replyMessageLine).toHaveBeenCalledWith(
|
|
"token",
|
|
[
|
|
{ type: "text", text: "one" },
|
|
{ type: "text", text: "two" },
|
|
{ type: "text", text: "three" },
|
|
],
|
|
{ accountId: "default" },
|
|
);
|
|
expect(pushMessageLine).not.toHaveBeenCalled();
|
|
expect(pushTextMessageWithQuickReplies).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it("attaches quick replies to a single reply chunk", async () => {
|
|
const replyMessageLine = vi.fn(async () => ({}));
|
|
const pushMessageLine = vi.fn(async () => ({}));
|
|
const pushTextMessageWithQuickReplies = vi.fn(async () => ({}));
|
|
const createTextMessageWithQuickReplies = vi.fn((text: string, _quickReplies: string[]) => ({
|
|
type: "text" as const,
|
|
text,
|
|
quickReply: { items: [] },
|
|
}));
|
|
|
|
const result = await sendLineReplyChunks({
|
|
to: "line:user:1",
|
|
chunks: ["only"],
|
|
quickReplies: ["A"],
|
|
replyToken: "token",
|
|
replyTokenUsed: false,
|
|
replyMessageLine,
|
|
pushMessageLine,
|
|
pushTextMessageWithQuickReplies,
|
|
createTextMessageWithQuickReplies,
|
|
});
|
|
|
|
expect(result.replyTokenUsed).toBe(true);
|
|
expect(createTextMessageWithQuickReplies).toHaveBeenCalledWith("only", ["A"]);
|
|
expect(replyMessageLine).toHaveBeenCalledTimes(1);
|
|
expect(pushMessageLine).not.toHaveBeenCalled();
|
|
expect(pushTextMessageWithQuickReplies).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it("replies with up to five chunks before pushing the rest", async () => {
|
|
const replyMessageLine = vi.fn(async () => ({}));
|
|
const pushMessageLine = vi.fn(async () => ({}));
|
|
const pushTextMessageWithQuickReplies = vi.fn(async () => ({}));
|
|
const createTextMessageWithQuickReplies = vi.fn((text: string, _quickReplies: string[]) => ({
|
|
type: "text" as const,
|
|
text,
|
|
}));
|
|
|
|
const chunks = ["1", "2", "3", "4", "5", "6", "7"];
|
|
const result = await sendLineReplyChunks({
|
|
to: "line:group:1",
|
|
chunks,
|
|
quickReplies: ["A"],
|
|
replyToken: "token",
|
|
replyTokenUsed: false,
|
|
replyMessageLine,
|
|
pushMessageLine,
|
|
pushTextMessageWithQuickReplies,
|
|
createTextMessageWithQuickReplies,
|
|
});
|
|
|
|
expect(result.replyTokenUsed).toBe(true);
|
|
expect(replyMessageLine).toHaveBeenCalledTimes(1);
|
|
expect(replyMessageLine).toHaveBeenCalledWith(
|
|
"token",
|
|
[
|
|
{ type: "text", text: "1" },
|
|
{ type: "text", text: "2" },
|
|
{ type: "text", text: "3" },
|
|
{ type: "text", text: "4" },
|
|
{ type: "text", text: "5" },
|
|
],
|
|
{ accountId: undefined },
|
|
);
|
|
expect(pushMessageLine).toHaveBeenCalledTimes(1);
|
|
expect(pushMessageLine).toHaveBeenCalledWith("line:group:1", "6", { accountId: undefined });
|
|
expect(pushTextMessageWithQuickReplies).toHaveBeenCalledTimes(1);
|
|
expect(pushTextMessageWithQuickReplies).toHaveBeenCalledWith("line:group:1", "7", ["A"], {
|
|
accountId: undefined,
|
|
});
|
|
expect(createTextMessageWithQuickReplies).not.toHaveBeenCalled();
|
|
});
|
|
});
|