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, }, ) }) })