import { afterAll, beforeAll, beforeEach, describe, expect, it, vi } from
"vitest" ;
const loadWebMediaMock = vi.hoisted(() => vi.fn());
type OutboundMediaModule =
typeof import (
"./outbound-media.js" );
let loadOutboundMediaFromUrl: OutboundMediaModule[
"loadOutboundMediaFromUrl" ];
describe(
"loadOutboundMediaFromUrl" , () => {
beforeAll(async () => {
const webMedia = await
import (
"./web-media.js" );
vi.spyOn(webMedia,
"loadWebMedia" ).mockImplementation(loadWebMediaMock);
({ loadOutboundMediaFromUrl } = await
import (
"./outbound-media.js" ));
});
afterAll(() => {
vi.restoreAllMocks();
});
beforeEach(() => {
loadWebMediaMock.mockReset();
});
it(
"forwards maxBytes and mediaLocalRoots to loadWebMedia" , async () => {
loadWebMediaMock.mockResolvedValueOnce({
buffer: Buffer.from(
"x" ),
kind:
"image" ,
contentType:
"image/png" ,
});
await loadOutboundMediaFromUrl(
"file:///tmp/image.png", {
maxBytes:
1024 ,
mediaLocalRoots: [
"/tmp/workspace-agent" ],
});
expect(loadWebMediaMock).toHaveBeenCalledWith(
"file:///tmp/image.png", {
maxBytes:
1024 ,
localRoots: [
"/tmp/workspace-agent" ],
});
});
it(
"keeps options optional" , async () => {
loadWebMediaMock.mockResolvedValueOnce({
buffer: Buffer.from(
"x" ),
kind:
"image" ,
contentType:
"image/png" ,
});
await loadOutboundMediaFromUrl(
"https://example.com/image.png ");
expect(loadWebMediaMock).toHaveBeenCalledWith(
"https://example.com/image.png ", {});
});
it(
"keeps local roots when host read capability is provided" , async () => {
const mediaReadFile = vi.fn(async () => Buffer.from(
"x" ));
loadWebMediaMock.mockResolvedValueOnce({
buffer: Buffer.from(
"x" ),
kind:
"image" ,
contentType:
"image/png" ,
});
await loadOutboundMediaFromUrl(
"/Users/peter/Pictures/image.png" , {
maxBytes:
2048 ,
mediaLocalRoots: [
"/tmp/workspace-agent" ],
mediaReadFile,
});
expect(loadWebMediaMock).toHaveBeenCalledWith(
"/Users/peter/Pictures/image.png" ,
{
maxBytes: 2048 ,
localRoots: ["/tmp/workspace-agent" ],
readFile: mediaReadFile,
hostReadCapability: true ,
});
});
it("rejects host read capability without explicit local roots" , async () => {
await expect(
loadOutboundMediaFromUrl("/Users/peter/Pictures/image.png" , {
maxBytes: 2048 ,
mediaReadFile: async () => Buffer.from("x" ),
}),
).rejects.toThrow("Host media read requires explicit localRoots" );
});
it("allows explicit any opt-in for host read capability" , async () => {
const mediaReadFile = vi.fn(async () => Buffer.from("x" ));
loadWebMediaMock.mockResolvedValueOnce({
buffer: Buffer.from("x" ),
kind: "image" ,
contentType: "image/png" ,
});
await loadOutboundMediaFromUrl("/Users/peter/Pictures/image.png" , {
maxBytes: 2048 ,
mediaLocalRoots: "any" ,
mediaReadFile,
});
expect(loadWebMediaMock).toHaveBeenCalledWith("/Users/peter/Pictures/image.png" , {
maxBytes: 2048 ,
localRoots: "any" ,
readFile: mediaReadFile,
hostReadCapability: true ,
});
});
});
Messung V0.5 in Prozent C=97 H=100 G=98
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet am 2026-06-09)
¤
*© Formatika GbR, Deutschland