gongxiangp2/lib/__tests__/task-detail-image-browser.test.ts
2026-08-03 09:53:20 +08:00

71 lines
2.0 KiB
TypeScript

import {
prepareTaskDetailImagePreview,
prepareTaskDetailSelectionThumbnail,
} from '@/lib/task-detail-image-browser'
const mockPreparePerformanceSurveyImagesInBrowser = jest.fn()
jest.mock('@/lib/performance-survey-image-browser', () => ({
preparePerformanceSurveyImagesInBrowser: (...args: unknown[]) => (
mockPreparePerformanceSurveyImagesInBrowser(...args)
),
}))
describe('task-detail-image-browser', () => {
beforeEach(() => {
jest.clearAllMocks()
mockPreparePerformanceSurveyImagesInBrowser.mockResolvedValue([{
file: new File(['preview'], 'photo-preview.webp', { type: 'image/webp' }),
mimeType: 'image/webp',
width: 800,
height: 600,
kind: 'preview',
sourceName: 'photo.jpg',
sourceIndex: 0,
sliceIndex: 0,
sliceCount: 1,
}])
})
test('将 AbortSignal 和 watchdog 超时透传到底层 Worker', async () => {
const controller = new AbortController()
const file = new File(['image'], 'photo.jpg', { type: 'image/jpeg' })
await prepareTaskDetailImagePreview(file, 'main', undefined, {
signal: controller.signal,
timeoutMs: 12_345,
})
expect(mockPreparePerformanceSurveyImagesInBrowser).toHaveBeenCalledWith(
[file],
undefined,
{
profile: 'task_detail_preview',
signal: controller.signal,
timeoutMs: 12_345,
},
)
})
test('选图缩略图使用独立 task_detail_thumbnail profile 并保持 AbortSignal', async () => {
const controller = new AbortController()
const file = new File(['image'], 'large.jpg', { type: 'image/jpeg' })
const thumbnail = await prepareTaskDetailSelectionThumbnail(file, {
signal: controller.signal,
timeoutMs: 60_000,
})
expect(thumbnail.file.name).toBe('photo-preview.webp')
expect(mockPreparePerformanceSurveyImagesInBrowser).toHaveBeenCalledWith(
[file],
undefined,
{
profile: 'task_detail_thumbnail',
signal: controller.signal,
timeoutMs: 60_000,
},
)
})
})