gongxiangp2/lib/__tests__/work-review-project-card.test.tsx
2026-08-05 16:49:54 +08:00

91 lines
2.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/** @jest-environment jsdom */
import { fireEvent, render, screen, within } from '@testing-library/react'
import { WorkReviewProjectCard } from '@/components/work-review/WorkReviewProjectCard'
import type { WorkReviewProject } from '@/types/work-review'
const project: WorkReviewProject = {
id: 'project-1',
title: 'GBSFY-SJZ0024详情',
description: '测试',
workDate: '2026-08-01',
status: 'pending_review',
latestVersion: 1,
submitter: { id: 'submitter-1', name: '无邪' },
manager: { id: 'manager-1', name: '魔礼红' },
finalReviewer: { id: 'final-1', name: '元泽' },
createdAt: '2026-08-01T02:50:00.000Z',
updatedAt: '2026-08-01T02:50:00.000Z',
versions: [{
id: 'version-1',
version: 1,
submissionNote: null,
status: 'pending_review',
submittedAt: '2026-08-01T02:50:00.000Z',
completedAt: null,
imageUrls: [],
imageGroups: [],
referenceImageUrls: [],
referenceImageGroups: [],
reviews: [],
}],
permissions: {
canResubmit: false,
pendingReviewRoles: [],
},
}
function renderCard(expanded: boolean, options?: { canDelete?: boolean; onDelete?: () => void; onToggle?: () => void }) {
return render(
<WorkReviewProjectCard
project={project}
expanded={expanded}
canDelete={Boolean(options?.canDelete)}
onToggle={options?.onToggle || jest.fn()}
onDelete={options?.onDelete || jest.fn()}
onResubmit={jest.fn()}
onReview={jest.fn()}
/>,
)
}
describe('WorkReviewProjectCard', () => {
test('keeps the collapsed summary consistent and moves the description into details', () => {
renderCard(false)
const summary = screen.getByRole('button', { name: '查看作品详情:GBSFY-SJZ0024详情' })
expect(within(summary).queryByText('测试')).not.toBeInTheDocument()
expect(screen.queryByText('作品说明')).not.toBeInTheDocument()
})
test('preserves the project description in the expanded content', () => {
renderCard(true)
expect(screen.getByText('作品说明')).toBeInTheDocument()
expect(screen.getByText('测试')).toBeInTheDocument()
})
test('shows an independent delete action only when permission is granted', () => {
const onDelete = jest.fn()
const onToggle = jest.fn()
const { rerender } = renderCard(false, { onDelete, onToggle })
expect(screen.queryByRole('button', { name: '删除作品:GBSFY-SJZ0024详情' })).not.toBeInTheDocument()
rerender(
<WorkReviewProjectCard
project={project}
expanded={false}
canDelete
onToggle={onToggle}
onDelete={onDelete}
onResubmit={jest.fn()}
onReview={jest.fn()}
/>,
)
fireEvent.click(screen.getByRole('button', { name: '删除作品:GBSFY-SJZ0024详情' }))
expect(onDelete).toHaveBeenCalledTimes(1)
expect(onToggle).not.toHaveBeenCalled()
})
})