58 lines
1.8 KiB
TypeScript
58 lines
1.8 KiB
TypeScript
import path from "node:path";
|
|
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
|
|
const ensureSandboxWorkspaceForSession = vi.hoisted(() => vi.fn());
|
|
|
|
vi.mock("../../agents/sandbox.js", () => ({
|
|
ensureSandboxWorkspaceForSession,
|
|
}));
|
|
|
|
import { createReplyMediaPathNormalizer } from "./reply-media-paths.js";
|
|
|
|
describe("createReplyMediaPathNormalizer", () => {
|
|
beforeEach(() => {
|
|
ensureSandboxWorkspaceForSession.mockReset().mockResolvedValue(null);
|
|
});
|
|
|
|
it("resolves workspace-relative media against the agent workspace", async () => {
|
|
const normalize = createReplyMediaPathNormalizer({
|
|
cfg: {},
|
|
sessionKey: "session-key",
|
|
workspaceDir: "/tmp/agent-workspace",
|
|
});
|
|
|
|
const result = await normalize({
|
|
mediaUrls: ["./out/photo.png"],
|
|
});
|
|
|
|
expect(result).toMatchObject({
|
|
mediaUrl: path.join("/tmp/agent-workspace", "out", "photo.png"),
|
|
mediaUrls: [path.join("/tmp/agent-workspace", "out", "photo.png")],
|
|
});
|
|
});
|
|
|
|
it("maps sandbox-relative media back to the host sandbox workspace", async () => {
|
|
ensureSandboxWorkspaceForSession.mockResolvedValue({
|
|
workspaceDir: "/tmp/sandboxes/session-1",
|
|
containerWorkdir: "/workspace",
|
|
});
|
|
const normalize = createReplyMediaPathNormalizer({
|
|
cfg: {},
|
|
sessionKey: "session-key",
|
|
workspaceDir: "/tmp/agent-workspace",
|
|
});
|
|
|
|
const result = await normalize({
|
|
mediaUrls: ["./out/photo.png", "file:///workspace/screens/final.png"],
|
|
});
|
|
|
|
expect(result).toMatchObject({
|
|
mediaUrl: path.join("/tmp/sandboxes/session-1", "out", "photo.png"),
|
|
mediaUrls: [
|
|
path.join("/tmp/sandboxes/session-1", "out", "photo.png"),
|
|
path.join("/tmp/sandboxes/session-1", "screens", "final.png"),
|
|
],
|
|
});
|
|
});
|
|
});
|