123 lines
2.9 KiB
TypeScript
123 lines
2.9 KiB
TypeScript
import { createRef } from 'react'
|
|
import { render, screen } from '@testing-library/react'
|
|
|
|
import MaterialCard, { type Material } from '@/components/home/MaterialCard'
|
|
|
|
jest.mock('next/image', () => ({
|
|
__esModule: true,
|
|
default: (props: any) => {
|
|
const { priority, fill, unoptimized, sizes, ...rest } = props
|
|
return <img {...rest} />
|
|
},
|
|
}))
|
|
|
|
jest.mock('@/components/AudioVisualizer', () => ({
|
|
__esModule: true,
|
|
default: () => <div data-testid="audio-visualizer" />,
|
|
}))
|
|
|
|
describe('MaterialCard', () => {
|
|
const baseMaterial: Material = {
|
|
id: 'material-1',
|
|
productModel: 'SPU-001',
|
|
categoryName: '旗舰店',
|
|
sceneName: '客厅',
|
|
platformName: '天猫',
|
|
productCategoryName: '沙发',
|
|
materialType: '任务-AI原图',
|
|
renderer: '',
|
|
authorName: '张三',
|
|
previewUrl: 'https://example.com/preview.jpg',
|
|
zipFileName: 'sample.zip',
|
|
zipFileSize: 1024,
|
|
downloadCount: 0,
|
|
likeCount: 0,
|
|
isLiked: false,
|
|
isFavorited: false,
|
|
isAiGenerated: true,
|
|
userId: 'user-1',
|
|
createdAt: '2026-03-25T08:00:00.000Z',
|
|
}
|
|
|
|
const defaultProps = {
|
|
material: baseMaterial,
|
|
session: null,
|
|
playingAudioId: null,
|
|
audioElement: null,
|
|
audioProgress: 0,
|
|
audioCurrentTime: 0,
|
|
audioDuration: 0,
|
|
audioRef: createRef<HTMLAudioElement>(),
|
|
downloadingId: null,
|
|
downloadProgress: 0,
|
|
themeColor: '#111827',
|
|
onAudioPlay: jest.fn(),
|
|
onDownload: jest.fn(),
|
|
onLike: jest.fn(),
|
|
onFavorite: jest.fn(),
|
|
onShare: jest.fn(),
|
|
onEdit: jest.fn(),
|
|
onDelete: jest.fn(),
|
|
onClick: jest.fn(),
|
|
onRetryTranscode: jest.fn(),
|
|
showToast: jest.fn(),
|
|
}
|
|
|
|
beforeEach(() => {
|
|
jest.clearAllMocks()
|
|
})
|
|
|
|
test('AI 导入素材应显示 AI生成 标签', () => {
|
|
render(<MaterialCard {...defaultProps} />)
|
|
|
|
expect(screen.getByText('AI生成')).toBeInTheDocument()
|
|
})
|
|
|
|
test('非 AI 导入素材不显示 AI生成 标签', () => {
|
|
render(
|
|
<MaterialCard
|
|
{...defaultProps}
|
|
material={{
|
|
...baseMaterial,
|
|
isAiGenerated: false,
|
|
}}
|
|
/>,
|
|
)
|
|
|
|
expect(screen.queryByText('AI生成')).not.toBeInTheDocument()
|
|
})
|
|
|
|
test('任务-详情应优先显示出图方式标签', () => {
|
|
render(
|
|
<MaterialCard
|
|
{...defaultProps}
|
|
material={{
|
|
...baseMaterial,
|
|
materialType: '任务-详情',
|
|
taskDetailSourceType: '实拍',
|
|
}}
|
|
/>,
|
|
)
|
|
|
|
expect(screen.getByText('实拍')).toBeInTheDocument()
|
|
expect(screen.queryByText('AI生成')).not.toBeInTheDocument()
|
|
})
|
|
|
|
test('任务-详情未设置出图方式时应显示未设置', () => {
|
|
render(
|
|
<MaterialCard
|
|
{...defaultProps}
|
|
material={{
|
|
...baseMaterial,
|
|
materialType: '任务-详情',
|
|
isAiGenerated: false,
|
|
taskDetailSourceType: null,
|
|
}}
|
|
/>,
|
|
)
|
|
|
|
expect(screen.getByText('未设置')).toBeInTheDocument()
|
|
})
|
|
|
|
})
|