import { describe, test, expect, vi } from 'vitest' import { render, screen, fireEvent } from '@testing-library/react' import { ChatToolGroup } from './chat-tool-group' import type { ChatToolItem } from '../types' describe('ChatToolGroup', () => { const tools: ChatToolItem[] = [ { id: '1', name: 'Tool #1', status: 'complete', reference: 'tool_1', duration: 1.2, }, { id: '2', name: 'Tool #2', status: 'complete', reference: 'tool_2', duration: 0.8, }, { id: '3', name: 'Tool #3', status: 'error', reference: 'tool_3', duration: 2.1, }, ] test('renders "N tools used" label when collapsed', () => { render() expect(screen.getByText('3 tools used')).toBeTruthy() }) test('renders individual tool names when expanded', () => { render() expect(screen.getByText(/Tool #1/)).toBeTruthy() expect(screen.getByText(/Tool #2/)).toBeTruthy() expect(screen.getByText(/Tool #3/)).toBeTruthy() }) test('shows "Error" label on failed tools in the expanded list', () => { render() expect(screen.getByText('Error')).toBeTruthy() }) test('shows error count badge at group level when any tool has error', () => { render() // New UI shows error count ("1") + error icon instead of "Error" text expect(screen.getByTestId('ErrorOutlineIcon')).toBeTruthy() expect(screen.getByText('1')).toBeTruthy() }) test('calls onExpandedChange when group header is clicked', () => { const onChange = vi.fn() render() const summary = screen.getByText('3 tools used').closest('button') if (summary) fireEvent.click(summary) expect(onChange).toHaveBeenCalled() }) test('preserves individual tool expansion states via expandedTools prop', () => { render( , ) // Tool #1 should be expanded (shows its reference chip) expect(screen.getByText(/tool_1/)).toBeTruthy() }) test('uses custom toolsUsed label', () => { render( , ) expect(screen.getByText('3 herramientas usadas')).toBeTruthy() }) })