import { render, screen } from '@testing-library/react'
import { describe, expect, it, vi } from 'vitest'
import { ExportPreviewPanel } from '../../src/renderer/src/components/export/ExportPreviewPanel'
const baseProps = {
status: 'running' as const,
previewItems: [],
previewMediaCount: 0,
previewBytes: 0,
selfInfo: null,
selectedCount: 1,
allExport: false,
jobId: 'fixture-job',
onCancel: vi.fn(),
onReveal: vi.fn()
}
describe('export progress panel', () => {
it('shows an indeterminate bar while the first message scan is still at zero', () => {
render(
)
const progressbar = screen.getByRole('progressbar', { name: '导出进度' })
expect(progressbar).toHaveClass('indeterminate')
expect(progressbar).not.toHaveAttribute('aria-valuenow')
expect(progressbar).toHaveAttribute('aria-valuetext', '正在读取消息')
})
it('adds voice transcription and ZIP stages only for an export that uses them', () => {
render(
)
expect(screen.getAllByRole('listitem').map((item) => item.textContent)).toEqual([
'准备导出',
'分批读取聊天记录',
'解析消息内容',
'语音转文字',
'处理媒体资源',
'生成档案',
'压缩 ZIP'
])
expect(screen.getByText('语音转文字')).toHaveClass('current')
expect(screen.getByText('解析消息内容')).toHaveClass('done')
expect(screen.getByText('处理媒体资源')).not.toHaveClass('done', 'current')
expect(screen.getByText('正在转写语音 3/8... 31%')).toBeVisible()
const progressbar = screen.getByRole('progressbar', { name: '导出进度' })
expect(progressbar).toHaveAttribute('aria-valuenow', '31')
expect(progressbar.querySelector('span')).toHaveStyle({ width: '31%' })
})
it('shows the current conversation and overall position for all export', () => {
render(
)
expect(screen.getByText('群聊')).toBeVisible()
expect(screen.getByText('第 11/30 个:项目讨论群')).toBeVisible()
expect(screen.getByRole('progressbar', { name: '导出进度' })).toHaveAttribute(
'aria-valuenow',
'36'
)
})
})