77 lines
2.2 KiB
TypeScript
77 lines
2.2 KiB
TypeScript
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(<WorkbenchPage />)
|
|
|
|
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()
|
|
})
|
|
})
|