import * as React from 'react' import { cleanup, render, screen } from '@testing-library/react' import { afterEach, describe, expect, it, vi } from 'vitest' import { WorkbenchPage } from './WorkbenchPage' const mocks = vi.hoisted(() => ({ listTickets: vi.fn(), listWorkItems: vi.fn(), getWorkItemMetrics: vi.fn() })) vi.mock('@/features/agent-workspace/AgentWorkspaceProvider', () => ({ useAgentPageContext: vi.fn() })) vi.mock('@/features/tickets/api', () => ({ listTickets: mocks.listTickets })) vi.mock('@/features/workitems/api', () => ({ listWorkItems: mocks.listWorkItems, getWorkItemMetrics: mocks.getWorkItemMetrics })) afterEach(() => { cleanup() vi.clearAllMocks() }) describe('WorkbenchPage 任务 SLA', () => { it('展示任务类型、截止状态和 SLA 汇总', async () => { mocks.listTickets.mockResolvedValue({ items: [], page: 1, page_size: 20, total: 0, total_pages: 0 }) mocks.listWorkItems.mockResolvedValue([ { public_id: '018f6f5e-b407-7fc2-9c56-2f34e6e1c111', task_type: 'support_analysis_failed', status: 'active', object_type: 'ticket', object_id: '7', ticket_id: 7, ticket_no: 'TK-0007', title: '接管支持分析', description: '需要人工处理', payload: { error_message: '模型调用失败' }, assignee_id: 3, created_at: '2026-07-27T08:00:00Z', updated_at: '2026-07-27T08:00:00Z', completed_at: null, due_at: '2026-07-27T12:00:00Z', sla_status: 'overdue' } ]) mocks.getWorkItemMetrics.mockResolvedValue({ active_count: 3, overdue_count: 1, due_soon_count: 1, completed_within_sla_count: 5, completed_overdue_count: 2, by_task_type: { support_analysis_failed: 1 } }) render() expect(await screen.findByText('分析接管')).toBeInTheDocument() expect(screen.getByText('模型调用失败')).toBeInTheDocument() expect(screen.getAllByText('已超时')).toHaveLength(1) expect(screen.getByText('活动 3')).toBeInTheDocument() expect(screen.getByText('即将超时 1')).toBeInTheDocument() expect(screen.getByText('已超时 1')).toBeInTheDocument() }) })