import React from 'react'; import { render, screen, fireEvent, waitFor } from '@testing-library/react'; import { message } from 'antd'; import TabContainer from '../components/dashboard/TabContainer'; import ProcessAPIService from '../services/ProcessAPIService'; import { getMergedParams } from '../utils/urlParams'; // Mock依赖 jest.mock('../services/ProcessAPIService'); jest.mock('../utils/urlParams'); jest.mock('antd', () => ({ message: { success: jest.fn(), error: jest.fn() }, Spin: ({ children }) =>
{children}
, Modal: ({ children, visible, onOk, onCancel, title, confirmLoading }) => ( visible ? (

{title}

{children}
) : null ) })); jest.mock('../contexts/CaseDataContext', () => ({ useCaseData: () => ({ caseData: { mediation: { state: 0, // 测试终止状态 id: 'test-mediation-id' } }, refreshData: jest.fn() }) })); describe('AI调解状态控制功能测试', () => { beforeEach(() => { jest.clearAllMocks(); getMergedParams.mockReturnValue({ caseId: 'test-case-id' }); }); test('应该显示终止按钮当caseState为0', () => { render(); // 等待组件渲染完成 expect(screen.getByText('终止')).toBeInTheDocument(); }); test('应该显示恢复按钮当caseState为5', () => { // 修改mock数据 jest.mock('../contexts/CaseDataContext', () => ({ useCaseData: () => ({ caseData: { mediation: { state: 5, // 恢复状态 id: 'test-mediation-id' } }, refreshData: jest.fn() }) })); render(); expect(screen.getByText('恢复')).toBeInTheDocument(); }); test('点击终止按钮应该显示确认对话框', () => { render(); const terminateButton = screen.getByText('终止'); fireEvent.click(terminateButton); expect(screen.getByTestId('modal')).toBeInTheDocument(); expect(screen.getByText('确认终止调解')).toBeInTheDocument(); }); test('确认终止应该调用API并显示成功消息', async () => { ProcessAPIService.updateMediationState.mockResolvedValue({ code: 200 }); render(); // 点击终止按钮 const terminateButton = screen.getByText('终止'); fireEvent.click(terminateButton); // 点击确认按钮 const confirmButton = screen.getByText('确定'); fireEvent.click(confirmButton); // 验证API调用 await waitFor(() => { expect(ProcessAPIService.updateMediationState).toHaveBeenCalledWith( 'test-case-id', { action: 0, userName: '调解员' } ); }); // 验证成功消息 expect(message.success).toHaveBeenCalledWith('案件状态更新成功'); }); test('API调用失败应该显示错误消息', async () => { ProcessAPIService.updateMediationState.mockRejectedValue(new Error('网络错误')); render(); // 点击终止按钮 const terminateButton = screen.getByText('终止'); fireEvent.click(terminateButton); // 点击确认按钮 const confirmButton = screen.getByText('确定'); fireEvent.click(confirmButton); // 验证错误消息 await waitFor(() => { expect(message.error).toHaveBeenCalledWith('网络错误'); }); }); test('不应该显示按钮当caseState为其他值', () => { // 修改mock数据为不支持的状态 jest.mock('../contexts/CaseDataContext', () => ({ useCaseData: () => ({ caseData: { mediation: { state: 2, // 不支持的状态 id: 'test-mediation-id' } }, refreshData: jest.fn() }) })); render(); expect(screen.queryByText('终止')).not.toBeInTheDocument(); expect(screen.queryByText('恢复')).not.toBeInTheDocument(); }); });