import { Buffer } from 'node:buffer' import { describe, expect, it, vi } from 'vitest' vi.mock('electron', () => ({ nativeImage: { createFromBuffer: () => ({ isEmpty: () => false, getSize: () => ({ width: 1, height: 1 }), crop: () => ({ isEmpty: () => false, getSize: () => ({ width: 1, height: 1 }), toPNG: () => Buffer.from([]), }), toPNG: () => Buffer.from([]), }), }, })) vi.mock('../transport/api-client', () => ({ fetchDesktopApiURL: vi.fn(), resolveDesktopApiURL: (path: string) => `http://127.0.0.1:8080${path}`, })) import { buildAssetURLCandidates, getCenteredCropRect } from './media-image' describe('media image helpers', () => { it('resolves public asset URLs through public and authenticated desktop candidates', () => { expect(buildAssetURLCandidates('/api/public/assets/12')).toEqual([ 'http://127.0.0.1:8080/api/public/assets/12?format=png', 'http://127.0.0.1:8080/api/desktop/content/assets/12?format=png', 'http://127.0.0.1:8080/api/public/assets/12', ]) }) it('can prefer jpeg conversion for platforms that reject large png uploads', () => { expect(buildAssetURLCandidates('/api/public/assets/12', { preferredFormat: 'jpg' })).toEqual([ 'http://127.0.0.1:8080/api/public/assets/12?format=jpg', 'http://127.0.0.1:8080/api/desktop/content/assets/12?format=jpg', 'http://127.0.0.1:8080/api/public/assets/12', ]) }) it('centers crop rectangles at the requested ratio', () => { const rect = getCenteredCropRect(1600, 1000, 4 / 3) expect(rect.x).toBeCloseTo(133.333, 3) expect(rect.y).toBeCloseTo(0) expect(rect.width).toBeCloseTo(1333.333, 3) expect(rect.height).toBeCloseTo(1000) }) })