import { describe, it, expect } from "vitest";
import { FILE_SIGNATURES } from "@calcom/lib/imageValidationConstants";
import { validateBase64Image } from "@calcom/lib/server/imageValidation";
describe("validateBase64Image", () => {
const createBase64Data = (bytes: number[], mimeType = "image/png") => {
const buffer = Buffer.from(bytes);
return `data:${mimeType};base64,${buffer.toString("base64")}`;
};
describe("Valid image formats", () => {
it("should validate PNG images", () => {
const pngBytes = [...FILE_SIGNATURES.PNG, ...Array(10).fill(0)];
const base64Data = createBase64Data(pngBytes);
const result = validateBase64Image(base64Data);
expect(result.isValid).toBe(true);
expect(result.detectedFormat).toBe("PNG");
expect(result.error).toBeUndefined();
});
it("should validate JPEG images", () => {
const jpegBytes = [...FILE_SIGNATURES.JPEG_FF_D8_FF, 0xe0, ...Array(10).fill(0)];
const base64Data = createBase64Data(jpegBytes, "image/jpeg");
const result = validateBase64Image(base64Data);
expect(result.isValid).toBe(true);
expect(result.detectedFormat).toBe("JPEG");
});
it("should validate GIF87a images", () => {
const gifBytes = [...FILE_SIGNATURES.GIF87a, ...Array(10).fill(0)];
const base64Data = createBase64Data(gifBytes, "image/gif");
const result = validateBase64Image(base64Data);
expect(result.isValid).toBe(true);
expect(result.detectedFormat).toBe("GIF");
});
it("should validate GIF89a images", () => {
const gifBytes = [...FILE_SIGNATURES.GIF89a, ...Array(10).fill(0)];
const base64Data = createBase64Data(gifBytes, "image/gif");
const result = validateBase64Image(base64Data);
expect(result.isValid).toBe(true);
expect(result.detectedFormat).toBe("GIF");
});
it("should validate WEBP images", () => {
const webpBytes = [
...FILE_SIGNATURES.WEBP,
0x00,
0x00,
0x00,
0x00,
...FILE_SIGNATURES.WEBP_SIGNATURE,
...Array(10).fill(0),
];
const base64Data = createBase64Data(webpBytes, "image/webp");
const result = validateBase64Image(base64Data);
expect(result.isValid).toBe(true);
expect(result.detectedFormat).toBe("WEBP");
});
it("should validate BMP images", () => {
const bmpBytes = [...FILE_SIGNATURES.BMP, ...Array(10).fill(0)];
const base64Data = createBase64Data(bmpBytes, "image/bmp");
const result = validateBase64Image(base64Data);
expect(result.isValid).toBe(true);
expect(result.detectedFormat).toBe("BMP");
});
it("should validate ICO images", () => {
const icoBytes = [...FILE_SIGNATURES.ICO, ...Array(10).fill(0)];
const base64Data = createBase64Data(icoBytes, "image/x-icon");
const result = validateBase64Image(base64Data);
expect(result.isValid).toBe(true);
expect(result.detectedFormat).toBe("ICO");
});
it("should validate safe SVG images", () => {
const svgContent =
'';
const svgBytes = Array.from(Buffer.from(svgContent, "utf8"));
const base64Data = createBase64Data(svgBytes, "image/svg+xml");
const result = validateBase64Image(base64Data);
expect(result.isValid).toBe(true);
expect(result.detectedFormat).toBe("SVG");
});
it("should validate SVG with direct