Spaces:
Sleeping
Sleeping
| import { createImages, releaseImage } from './image-file'; | |
| describe('image file helpers', () => { | |
| beforeEach(() => { | |
| vi.stubGlobal('crypto', { randomUUID: vi.fn(() => 'image-id') }); | |
| vi.stubGlobal('URL', { | |
| createObjectURL: vi.fn((file: File) => `blob:${file.name}`), | |
| revokeObjectURL: vi.fn(), | |
| }); | |
| }); | |
| afterEach(() => { | |
| vi.unstubAllGlobals(); | |
| }); | |
| it('creates studio images only for image files', () => { | |
| const images = createImages([ | |
| new File(['image'], 'product.png', { type: 'image/png' }), | |
| new File(['text'], 'notes.txt', { type: 'text/plain' }), | |
| ]); | |
| expect(images).toEqual([ | |
| expect.objectContaining({ | |
| id: 'image-id', | |
| name: 'product.png', | |
| size: '0 KB', | |
| url: 'blob:product.png', | |
| selectedVariant: 'clean', | |
| }), | |
| ]); | |
| }); | |
| it('formats megabyte sized files', () => { | |
| const images = createImages([new File([new Uint8Array(1_500_000)], 'large.jpg', { type: 'image/jpeg' })]); | |
| expect(images[0].size).toBe('1.4 MB'); | |
| }); | |
| it('releases generated object urls', () => { | |
| releaseImage({ id: '1', name: 'a.png', size: '1 KB', url: 'blob:a.png', file: new File(['a'], 'a.png'), selectedVariant: 'clean' }); | |
| expect(URL.revokeObjectURL).toHaveBeenCalledWith('blob:a.png'); | |
| }); | |
| }); | |