import { BadRequestException } from "@nestjs/common";
import { assertUploadedFile, isAllowedUploadType } from "./upload-validation";

function mockFile(overrides: Partial<Express.Multer.File> = {}) {
  return {
    originalname: "foto.jpg",
    mimetype: "image/jpeg",
    size: 1024,
    buffer: Buffer.from("image"),
    ...overrides,
  } as Express.Multer.File;
}

describe("upload validation", () => {
  it("acepta imagenes permitidas para fotos", () => {
    expect(isAllowedUploadType(mockFile(), "foto")).toBe(true);
  });

  it("rechaza fotos con extension no permitida aunque el MIME sea imagen", () => {
    expect(
      isAllowedUploadType(
        mockFile({ originalname: "foto.svg", mimetype: "image/svg+xml" }),
        "foto",
      ),
    ).toBe(false);
  });

  it("rechaza PDF sin firma real de PDF", () => {
    expect(() =>
      assertUploadedFile(
        mockFile({
          originalname: "scanner.pdf",
          mimetype: "application/pdf",
          buffer: Buffer.from("not-a-pdf"),
        }),
        "pdf",
      ),
    ).toThrow(new BadRequestException("El archivo debe ser PDF."));
  });

  it("acepta PDF con extension, MIME y firma valida", () => {
    expect(() =>
      assertUploadedFile(
        mockFile({
          originalname: "scanner.pdf",
          mimetype: "application/pdf",
          buffer: Buffer.from("%PDF-1.7"),
        }),
        "pdf",
      ),
    ).not.toThrow();
  });
});
