* 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>
79 lines
2.2 KiB
TypeScript
79 lines
2.2 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
|
|
import {
|
|
formatOutboundPayloadLog,
|
|
normalizeOutboundPayloads,
|
|
normalizeOutboundPayloadsForJson,
|
|
} from "./payloads.js";
|
|
|
|
describe("normalizeOutboundPayloadsForJson", () => {
|
|
it("normalizes payloads with mediaUrl and mediaUrls", () => {
|
|
expect(
|
|
normalizeOutboundPayloadsForJson([
|
|
{ text: "hi" },
|
|
{ text: "photo", mediaUrl: "https://x.test/a.jpg" },
|
|
{ text: "multi", mediaUrls: ["https://x.test/1.png"] },
|
|
]),
|
|
).toEqual([
|
|
{ text: "hi", mediaUrl: null, mediaUrls: undefined, channelData: undefined },
|
|
{
|
|
text: "photo",
|
|
mediaUrl: "https://x.test/a.jpg",
|
|
mediaUrls: ["https://x.test/a.jpg"],
|
|
channelData: undefined,
|
|
},
|
|
{
|
|
text: "multi",
|
|
mediaUrl: null,
|
|
mediaUrls: ["https://x.test/1.png"],
|
|
channelData: undefined,
|
|
},
|
|
]);
|
|
});
|
|
|
|
it("keeps mediaUrl null for multi MEDIA tags", () => {
|
|
expect(
|
|
normalizeOutboundPayloadsForJson([
|
|
{
|
|
text: "MEDIA:https://x.test/a.png\nMEDIA:https://x.test/b.png",
|
|
},
|
|
]),
|
|
).toEqual([
|
|
{
|
|
text: "",
|
|
mediaUrl: null,
|
|
mediaUrls: ["https://x.test/a.png", "https://x.test/b.png"],
|
|
channelData: undefined,
|
|
},
|
|
]);
|
|
});
|
|
});
|
|
|
|
describe("normalizeOutboundPayloads", () => {
|
|
it("keeps channelData-only payloads", () => {
|
|
const channelData = { line: { flexMessage: { altText: "Card", contents: {} } } };
|
|
const normalized = normalizeOutboundPayloads([{ channelData }]);
|
|
expect(normalized).toEqual([{ text: "", mediaUrls: [], channelData }]);
|
|
});
|
|
});
|
|
|
|
describe("formatOutboundPayloadLog", () => {
|
|
it("trims trailing text and appends media lines", () => {
|
|
expect(
|
|
formatOutboundPayloadLog({
|
|
text: "hello ",
|
|
mediaUrls: ["https://x.test/a.png", "https://x.test/b.png"],
|
|
}),
|
|
).toBe("hello\nMEDIA:https://x.test/a.png\nMEDIA:https://x.test/b.png");
|
|
});
|
|
|
|
it("logs media-only payloads", () => {
|
|
expect(
|
|
formatOutboundPayloadLog({
|
|
text: "",
|
|
mediaUrls: ["https://x.test/a.png"],
|
|
}),
|
|
).toBe("MEDIA:https://x.test/a.png");
|
|
});
|
|
});
|