openclaw/src/auto-reply/reply/reply-media-paths.test.ts
2026-03-07 10:52:16 +05:30

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"),
],
});
});
});