gongxiangp2/components/detail/MaterialDetailHeader.test.tsx
2026-07-30 16:16:07 +08:00

75 lines
2.3 KiB
TypeScript

import { fireEvent, render, screen } from '@testing-library/react'
import MaterialDetailHeader from '@/components/detail/MaterialDetailHeader'
describe('MaterialDetailHeader', () => {
const defaultProps = {
title: 'GBSFY-BJ0208',
materialType: '任务-详情',
materialId: 'material-1',
isFavorited: false,
capabilities: {
canFavorite: false,
canEdit: false,
canDelete: false,
},
onBack: jest.fn(),
onFavorite: jest.fn(),
onShare: jest.fn(),
onEdit: jest.fn(),
onDelete: jest.fn(),
}
beforeEach(() => {
jest.clearAllMocks()
})
test('匿名详情只显示返回和分享操作', () => {
render(<MaterialDetailHeader {...defaultProps} />)
expect(screen.getByRole('button', { name: '返回上一页' })).toBeInTheDocument()
expect(screen.getByRole('button', { name: '分享' })).toBeInTheDocument()
expect(screen.queryByRole('button', { name: '收藏' })).not.toBeInTheDocument()
expect(screen.queryByRole('button', { name: '编辑' })).not.toBeInTheDocument()
expect(screen.queryByRole('button', { name: '删除' })).not.toBeInTheDocument()
})
test('按服务端能力显示收藏、编辑和删除操作', () => {
render(
<MaterialDetailHeader
{...defaultProps}
capabilities={{
canFavorite: true,
canEdit: true,
canDelete: true,
}}
/>,
)
fireEvent.click(screen.getByRole('button', { name: '收藏' }))
fireEvent.click(screen.getByRole('button', { name: '分享' }))
fireEvent.click(screen.getByRole('button', { name: '编辑' }))
fireEvent.click(screen.getByRole('button', { name: '删除' }))
expect(defaultProps.onFavorite).toHaveBeenCalledTimes(1)
expect(defaultProps.onShare).toHaveBeenCalledTimes(1)
expect(defaultProps.onEdit).toHaveBeenCalledTimes(1)
expect(defaultProps.onDelete).toHaveBeenCalledTimes(1)
})
test('收藏状态使用可访问的按下语义', () => {
render(
<MaterialDetailHeader
{...defaultProps}
isFavorited
capabilities={{
...defaultProps.capabilities,
canFavorite: true,
}}
/>,
)
expect(screen.getByRole('button', { name: '取消收藏' })).toHaveAttribute('aria-pressed', 'true')
})
})