import { describe, it, expect } from 'vitest';
import { validateFile, MAX_SIZE_BYTES } from './validateFile';

function makeFile(type: string, size: number): File {
	return new File(['x'.repeat(Math.min(size, 100))], 'test.file', { type });
}

describe('validateFile', () => {
	it('returns null for a valid PDF under 50 MB', () => {
		const file = makeFile('application/pdf', 1024);
		expect(validateFile(file)).toBeNull();
	});

	it('returns null for a valid JPEG', () => {
		expect(validateFile(makeFile('image/jpeg', 1024))).toBeNull();
	});

	it('returns null for a valid PNG', () => {
		expect(validateFile(makeFile('image/png', 1024))).toBeNull();
	});

	it('returns null for a valid TIFF', () => {
		expect(validateFile(makeFile('image/tiff', 1024))).toBeNull();
	});

	it('returns "type" for an unsupported MIME type', () => {
		const file = makeFile('text/plain', 100);
		expect(validateFile(file)).toBe('type');
	});

	it('returns "size" for a file exceeding 50 MB', () => {
		const oversized = new File(['x'], 'big.pdf', { type: 'application/pdf' });
		Object.defineProperty(oversized, 'size', { value: MAX_SIZE_BYTES + 1 });
		expect(validateFile(oversized)).toBe('size');
	});
});
