





























1+import { describe, expect, it } from "vitest";
2+import { normalizeAttachments } from "../../media-understanding/attachments.normalize.js";
3+import {
4+buildChannelTurnMediaPayload,
5+toHistoryMediaEntries,
6+toInboundMediaFacts,
7+} from "./media.js";
8+9+describe("channel turn media facts", () => {
10+it("normalizes provider media into inbound media facts", () => {
11+expect(
12+toInboundMediaFacts(
13+[
14+{
15+path: " /tmp/image.png ",
16+contentType: " image/png ",
17+messageId: " ",
18+},
19+{
20+url: "https://example.test/audio.mp3",
21+contentType: "audio/mpeg",
22+kind: "audio",
23+},
24+],
25+{
26+kind: "image",
27+messageId: "msg-1",
28+transcribed: (_media, index) => index === 1,
29+},
30+),
31+).toEqual([
32+{
33+path: "/tmp/image.png",
34+url: undefined,
35+contentType: "image/png",
36+kind: "image",
37+transcribed: false,
38+messageId: "msg-1",
39+},
40+{
41+path: undefined,
42+url: "https://example.test/audio.mp3",
43+contentType: "audio/mpeg",
44+kind: "audio",
45+transcribed: true,
46+messageId: "msg-1",
47+},
48+]);
49+});
50+51+it("builds legacy media payload fields from inbound media facts", () => {
52+expect(
53+buildChannelTurnMediaPayload([
54+{ path: "/tmp/image.png", contentType: "image/png", kind: "image" },
55+{
56+url: "https://example.test/audio.mp3",
57+contentType: "audio/mpeg",
58+kind: "audio",
59+transcribed: true,
60+},
61+]),
62+).toEqual({
63+MediaPath: "/tmp/image.png",
64+MediaUrl: "/tmp/image.png",
65+MediaType: "image/png",
66+MediaPaths: ["/tmp/image.png", ""],
67+MediaUrls: ["/tmp/image.png", "https://example.test/audio.mp3"],
68+MediaTypes: ["image/png", "audio/mpeg"],
69+MediaTranscribedIndexes: [1],
70+});
71+});
72+73+it("keeps legacy media arrays index-aligned for mixed path and URL media", () => {
74+const payload = buildChannelTurnMediaPayload([
75+{ path: "/tmp/image.png", contentType: "image/png", kind: "image" },
76+{ url: "https://example.test/remote.png", contentType: "image/png", kind: "image" },
77+]);
78+79+expect(payload.MediaPaths).toEqual(["/tmp/image.png", ""]);
80+expect(payload.MediaUrls).toEqual(["/tmp/image.png", "https://example.test/remote.png"]);
81+expect(payload.MediaTypes).toEqual(["image/png", "image/png"]);
82+expect(normalizeAttachments(payload)).toMatchObject([
83+{ path: "/tmp/image.png", url: "/tmp/image.png", mime: "image/png" },
84+{ path: undefined, url: "https://example.test/remote.png", mime: "image/png" },
85+]);
86+});
87+88+it("maps inbound media facts into history media entries", () => {
89+expect(
90+toHistoryMediaEntries([{ path: "/tmp/image.png", contentType: "image/png" }], {
91+kind: "image",
92+messageId: "msg-1",
93+}),
94+).toEqual([
95+{
96+path: "/tmp/image.png",
97+url: undefined,
98+contentType: "image/png",
99+kind: "image",
100+messageId: "msg-1",
101+},
102+]);
103+});
104+});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。