import * as Schema from "effect/Schema"; import { describe, expect, it } from "vite-plus/test"; import { AttachmentCreateUploadUrlInput } from "./assets.ts"; import { PROVIDER_SEND_TURN_MAX_FILE_BYTES, PROVIDER_SEND_TURN_MAX_IMAGE_BYTES, } from "./orchestration.ts"; const isUploadInput = Schema.is(AttachmentCreateUploadUrlInput); const uploadInput = { name: "screenshot.png", mimeType: "image/png", sizeBytes: 3, } as const; describe("AttachmentCreateUploadUrlInput", () => { it("accepts supported image attachments", () => { expect(isUploadInput(uploadInput)).toBe(true); }); it("rejects image types that providers do not support", () => { expect(isUploadInput({ ...uploadInput, mimeType: "image/svg+xml" })).toBe(false); }); it("accepts generic files without treating them as provider images", () => { expect( isUploadInput({ type: "file", name: "report.pdf", mimeType: "application/pdf", sizeBytes: PROVIDER_SEND_TURN_MAX_IMAGE_BYTES + 1, }), ).toBe(true); expect( isUploadInput({ type: "file", name: "diagram.svg", mimeType: "image/svg+xml", sizeBytes: 3, }), ).toBe(true); }); it("rejects empty and oversized uploads", () => { expect(isUploadInput({ ...uploadInput, sizeBytes: 0 })).toBe(false); expect( isUploadInput({ ...uploadInput, sizeBytes: PROVIDER_SEND_TURN_MAX_IMAGE_BYTES + 1 }), ).toBe(false); expect( isUploadInput({ type: "file", name: "archive.zip", mimeType: "application/zip", sizeBytes: PROVIDER_SEND_TURN_MAX_FILE_BYTES + 1, }), ).toBe(false); }); });