import { screen } from '@testing-library/react'
import { describe, expect, it, vi } from 'vitest'
import { MessageProvider } from './Message.Context'
import { MessagePartQueryLogs } from './MessagePartQueryLogs'
import { customRender as render } from '@/tests/lib/custom-render'
vi.mock('@/components/interfaces/Explorer/QueryEditor', () => ({
QueryEditor: ({
query,
result,
}: {
query: { uncheckedSql: string }
result?: { error?: { message?: string } }
}) => (
{query.uncheckedSql}
{result?.error?.message}
),
}))
vi.mock('@/lib/telemetry/track', () => ({ useTrack: () => vi.fn() }))
vi.mock('@/state/role-impersonation-state', () => ({
useLocalRoleImpersonationState: () => ({}),
}))
type QueryLogsToolPart = Parameters[0]['toolPart']
const messageInfo = {
id: 'message-1',
isLoading: false,
state: 'idle' as const,
}
const messageActions = {
onDelete: vi.fn(),
onEdit: vi.fn(),
onBranch: vi.fn(),
onCancelEdit: vi.fn(),
}
function renderPart(toolPart: Parameters[0]['toolPart']) {
return render(
)
}
describe('MessagePartQueryLogs', () => {
it('renders an output error using raw input when submitted input is unavailable', () => {
renderPart({
toolCallId: 'query-logs-1',
state: 'output-error',
input: undefined,
rawInput: { sql: 'select count(*) from edge_logs' },
errorText: 'Log query timed out',
} as QueryLogsToolPart)
expect(screen.getByText('select count(*) from edge_logs')).toBeInTheDocument()
expect(screen.getByText('Log query timed out')).toBeInTheDocument()
})
it('uses logs-specific copy for a rendered tool error', () => {
renderPart({
toolCallId: 'logs-1',
state: 'output-error',
input: { sql: 'select event_message from edge_logs' },
output: undefined,
errorText: 'Analytics request failed',
})
expect(screen.getByText('Failed to query logs')).toBeInTheDocument()
expect(screen.queryByText('Failed to execute SQL')).not.toBeInTheDocument()
})
it('shows an explicit failure when errored input cannot be parsed', () => {
renderPart({
toolCallId: 'logs-2',
state: 'output-error',
input: { invalid: true },
output: undefined,
errorText: 'Analytics request failed',
})
expect(screen.getByText('Failed to query logs.')).toBeInTheDocument()
})
})