57 lines
3.0 KiB
TypeScript
57 lines
3.0 KiB
TypeScript
import { describe, expect, test } from "bun:test";
|
|
|
|
import {
|
|
getMediaBadge,
|
|
getSafeFileDownloadUrl,
|
|
getSafeFileRevealPath,
|
|
} from "../src/components/chat/utils";
|
|
import { getArtifactsFromMessages } from "../src/lib/artifacts";
|
|
|
|
const DOCX_MIME = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
|
|
const PPTX_MIME = "application/vnd.openxmlformats-officedocument.presentationml.presentation";
|
|
const XLSX_MIME = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
|
|
|
|
describe("Office attachment UI affordances", () => {
|
|
test("uses compact Office badges instead of exposing MIME subtypes", () => {
|
|
expect(getMediaBadge({ filename: "QuarterlyBrief.docx", mediaType: DOCX_MIME })).toBe("DOCX");
|
|
expect(getMediaBadge({ filename: "LaunchRoadmap.PPTX", mediaType: PPTX_MIME })).toBe("PPTX");
|
|
expect(getMediaBadge({ filename: "LaunchRoadmap.PPTX", mediaType: "application/octet-stream" })).toBe("PPTX");
|
|
expect(getMediaBadge({ filename: "RevenueWorkbook.XLSX", mediaType: XLSX_MIME })).toBe("XLSX");
|
|
expect(getMediaBadge({ filename: "RevenueWorkbook.XLSX", mediaType: "" })).toBe("XLSX");
|
|
});
|
|
|
|
test("only exposes download actions for browser-managed file URLs", () => {
|
|
expect(getSafeFileDownloadUrl({ url: `data:${DOCX_MIME};base64,UEsDBA==` })).toBe(`data:${DOCX_MIME};base64,UEsDBA==`);
|
|
expect(getSafeFileDownloadUrl({ url: "blob:http://localhost/office-download" })).toBe("blob:http://localhost/office-download");
|
|
expect(getSafeFileDownloadUrl({ url: "file:///workspace/artifacts/QuarterlyBrief.docx" })).toBeNull();
|
|
expect(getSafeFileDownloadUrl({ url: "https://example.com/QuarterlyBrief.docx" })).toBeNull();
|
|
expect(getSafeFileDownloadUrl({ url: "javascript:alert(1)" })).toBeNull();
|
|
});
|
|
|
|
test("only exposes reveal actions for local file URLs", () => {
|
|
expect(getSafeFileRevealPath({ url: "file:///workspace/artifacts/Quarterly%20Brief.docx" })).toBe("/workspace/artifacts/Quarterly Brief.docx");
|
|
expect(getSafeFileRevealPath({ url: "file:///C:/Users/Jalil/Quarterly%20Brief.docx" })).toBe("C:/Users/Jalil/Quarterly Brief.docx");
|
|
expect(getSafeFileRevealPath({ url: "blob:http://localhost/office-download" })).toBeNull();
|
|
expect(getSafeFileRevealPath({ url: "https://example.com/QuarterlyBrief.docx" })).toBeNull();
|
|
expect(getSafeFileRevealPath({ url: "javascript:alert(1)" })).toBeNull();
|
|
});
|
|
|
|
test("collects DOCX artifacts as document previews", () => {
|
|
const artifacts = getArtifactsFromMessages([
|
|
{
|
|
id: "msg_1",
|
|
role: "assistant",
|
|
parts: [{ type: "text", text: "Created artifacts/QuarterlyBrief.docx and artifacts/LaunchRoadmap.pptx." }],
|
|
},
|
|
]);
|
|
|
|
const docx = artifacts.find((artifact) => artifact.path === "artifacts/quarterlybrief.docx");
|
|
const pptx = artifacts.find((artifact) => artifact.path === "artifacts/launchroadmap.pptx");
|
|
|
|
expect(docx?.type).toBe("document");
|
|
expect(docx?.legacy_target.preview).toBe("document");
|
|
expect(pptx?.type).toBe("slides");
|
|
expect(pptx?.legacy_target.preview).toBe("slides");
|
|
});
|
|
});
|