mplus-studio / src /app /image-file.unit.spec.ts
joelsefanja's picture
Deploy Mplus Studio
d1bff6b verified
Raw
History Blame Contribute Delete
1.31 kB
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');
});
});