Extract upload dropzone and queue UI with shared pick validation utils.
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
import { analyzePickedUploadFiles } from '@/utils/upload/analyzePickedUploadFiles';
|
||||
|
||||
const makeFile = (name: string, type: string, size: number): File =>
|
||||
new File([new Uint8Array(size)], name, { type });
|
||||
|
||||
describe('analyzePickedUploadFiles', () => {
|
||||
const maxImageBytes = 100;
|
||||
const maxQueueSize = 2;
|
||||
|
||||
it('accepts images within size and queue limits', () => {
|
||||
const picked = [makeFile('a.png', 'image/png', 50), makeFile('b.jpg', 'image/jpeg', 80)];
|
||||
|
||||
const result = analyzePickedUploadFiles(picked, maxImageBytes, maxQueueSize);
|
||||
|
||||
expect(result.accepted).toHaveLength(2);
|
||||
expect(result.nonImageCount).toBe(0);
|
||||
expect(result.oversizedImagesCount).toBe(0);
|
||||
expect(result.queueOmittedImagesCount).toBe(0);
|
||||
});
|
||||
|
||||
it('skips non-images and oversized files and caps the queue', () => {
|
||||
const picked = [
|
||||
makeFile('doc.pdf', 'application/pdf', 10),
|
||||
makeFile('big.png', 'image/png', 200),
|
||||
makeFile('1.png', 'image/png', 10),
|
||||
makeFile('2.png', 'image/png', 10),
|
||||
makeFile('3.png', 'image/png', 10)
|
||||
];
|
||||
|
||||
const result = analyzePickedUploadFiles(picked, maxImageBytes, maxQueueSize);
|
||||
|
||||
expect(result.accepted.map(f => f.name)).toEqual(['1.png', '2.png']);
|
||||
expect(result.nonImageCount).toBe(1);
|
||||
expect(result.oversizedImagesCount).toBe(1);
|
||||
expect(result.queueOmittedImagesCount).toBe(1);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user