53 lines
1.7 KiB
TypeScript
53 lines
1.7 KiB
TypeScript
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)
|
|
})
|
|
})
|