import { describe, it, expect } from "vitest";
import { buildSwiftCliArgs } from "../../../src/utils/image-cli-args";
describe("Format Preprocessing in Swift CLI Args", () => {
it("should use preprocessed format in Swift CLI arguments", async () => {
// Import and test the schema preprocessing
const { imageToolSchema } = await import("../../../src/types/index.js");
// Test that invalid format gets preprocessed correctly
const inputWithInvalidFormat = { format: "bmp", path: "/tmp/test.png" };
const preprocessedInput = imageToolSchema.parse(inputWithInvalidFormat);
// Verify preprocessing worked
expect(preprocessedInput.format).toBe("png");
// Test that buildSwiftCliArgs uses the preprocessed format
const swiftArgs = buildSwiftCliArgs(preprocessedInput, "/tmp/test.png");
// Should contain --format png, not --format bmp
expect(swiftArgs).toContain("--format");
const formatIndex = swiftArgs.indexOf("--format");
expect(swiftArgs[formatIndex + 1]).toBe("png");
expect(swiftArgs).not.toContain("bmp");
});
it("should handle various invalid formats consistently", async () => {
const { imageToolSchema } = await import("../../../src/types/index.js");
const invalidFormats = ["bmp", "gif", "webp", "tiff", "xyz"];
for (const invalidFormat of invalidFormats) {
const input = { format: invalidFormat, path: "/tmp/test.png" };
const preprocessedInput = imageToolSchema.parse(input);
// All should be preprocessed to png
expect(preprocessedInput.format).toBe("png");
const swiftArgs = buildSwiftCliArgs(preprocessedInput, "/tmp/test.png");
const formatIndex = swiftArgs.indexOf("--format");
// All should result in --format png
expect(swiftArgs[formatIndex + 1]).toBe("png");
expect(swiftArgs).not.toContain(invalidFormat);
}
});
it("should pass through valid formats correctly", async () => {
const { imageToolSchema } = await import("../../../src/types/index.js");
const validCases = [
{ input: "png", expected: "png" },
{ input: "PNG", expected: "png" },
{ input: "jpg", expected: "jpg" },
{ input: "JPG", expected: "jpg" },
{ input: "jpeg", expected: "jpg" },
{ input: "JPEG", expected: "jpg" },
];
for (const { input, expected } of validCases) {
const inputObj = { format: input, path: "/tmp/test.png" };
const preprocessedInput = imageToolSchema.parse(inputObj);
expect(preprocessedInput.format).toBe(expected);
const swiftArgs = buildSwiftCliArgs(preprocessedInput, "/tmp/test.png");
const formatIndex = swiftArgs.indexOf("--format");
expect(swiftArgs[formatIndex + 1]).toBe(expected);
}
});
it("should handle data format for Swift CLI (converts to png)", async () => {
const { imageToolSchema } = await import("../../../src/types/index.js");
const input = { format: "data", path: "/tmp/test.png" };
const preprocessedInput = imageToolSchema.parse(input);
expect(preprocessedInput.format).toBe("data");
// buildSwiftCliArgs should convert data format to png for Swift CLI
const swiftArgs = buildSwiftCliArgs(preprocessedInput, "/tmp/test.png");
const formatIndex = swiftArgs.indexOf("--format");
// Should be converted to png for Swift CLI
expect(swiftArgs[formatIndex + 1]).toBe("png");
});
});