Files
SnapOtter/tests/unit/shared/modality-helpers.test.ts
T

52 lines
1.8 KiB
TypeScript
Raw Normal View History

import { describe, expect, it } from "vitest";
import { TOOLS } from "../../../packages/shared/src/constants.js";
import {
modalityForExtension,
toolInputModality,
toolOutputModality,
} from "../../../packages/shared/src/modality.js";
const tool = (id: string) => {
const t = TOOLS.find((x) => x.id === id);
if (!t) throw new Error(`tool ${id} not found`);
return t;
};
describe("modalityForExtension", () => {
it("maps extensions to their owning modality", () => {
expect(modalityForExtension(".png")).toBe("image");
expect(modalityForExtension(".mp4")).toBe("video");
expect(modalityForExtension(".mp3")).toBe("audio");
expect(modalityForExtension(".pdf")).toBe("document");
expect(modalityForExtension(".csv")).toBe("file");
});
it("is case-insensitive and tolerates a missing dot", () => {
expect(modalityForExtension("PNG")).toBe("image");
expect(modalityForExtension(".JPG")).toBe("image");
});
it("returns null for unknown extensions", () => {
expect(modalityForExtension(".xyz")).toBeNull();
});
});
describe("toolOutputModality", () => {
it("defaults to the tool's modality", () => {
expect(toolOutputModality(tool("resize"))).toBe("image");
});
it("uses the override for crossing tools", () => {
expect(toolOutputModality(tool("extract-audio"))).toBe("audio");
expect(toolOutputModality(tool("chart-maker"))).toBe("image");
});
});
describe("toolInputModality", () => {
it("returns the tool modality for normal tools", () => {
expect(toolInputModality(tool("trim-video"))).toBe("video");
expect(toolInputModality(tool("compress-pdf"))).toBe("document");
});
it("derives the real input modality from acceptedInputs", () => {
expect(toolInputModality(tool("gif-to-video"))).toBe("image");
expect(toolInputModality(tool("chart-maker"))).toBe("file");
});
});