deer-flow/frontend/tests/unit/core/artifacts/html-assets-auth.dom.test.ts
Lucien 8008a6195f
fix(artifacts): authenticate isolated HTML preview resources (#6701)
* fix(artifacts): authenticate isolated HTML preview resources

* docs(artifacts): retain precise path guidance within size budget

* fix: preserve HTML preview auth and rendering semantics

* fix(artifacts): quote rewritten CSS URLs

* docs: keep merged artifact guidance within size limit

---------

Co-authored-by: Willem Jiang <willem.jiang@gmail.com>
2026-10-15 10:15:44 +08:00

36 lines
1.2 KiB
TypeScript

import { afterEach, expect, rs, test } from "@rstest/core";
import { prepareHtmlPreview } from "@/core/artifacts/html-assets";
rs.mock("@/core/static-mode", () => ({ isStaticWebsiteOnly: () => false }));
afterEach(() => {
rs.restoreAllMocks();
});
test("keeps resource 401 responses local to the preview without navigating to login", async () => {
const navigate = rs
.spyOn(window.location, "href", "set")
.mockImplementation(() => undefined);
const request = rs.spyOn(globalThis, "fetch").mockResolvedValue(
new Response('{"detail":"Unauthorized"}', {
status: 401,
headers: { "Content-Type": "application/json" },
}),
);
const url =
"https://app.example/gateway/api/threads/chat/artifacts/mnt/user-data/outputs/report.html";
const result = await prepareHtmlPreview(
'<h1>Report</h1><img src="chart.png">',
url,
);
expect(result.failedResources).toBe(1);
expect(result.content).toContain("Report");
expect(result.content).toContain('src="data:,"');
expect(navigate).not.toHaveBeenCalled();
expect(request).toHaveBeenCalledWith(
url.replace("report.html", "chart.png"),
expect.objectContaining({ credentials: "include", redirect: "error" }),
);
});