import { describe, expect, it } from 'vitest' import { buildProviderPerformanceChartData, formatProviderPerformanceMetric, } from '../performanceAnalysisHelpers' import type { ProviderPerformanceItem, ProviderPerformanceTimelineItem } from '@/api/admin' describe('performanceAnalysisHelpers', () => { it('formats null provider metrics as placeholders', () => { expect(formatProviderPerformanceMetric(null, 'ms')).toBe('-') expect(formatProviderPerformanceMetric(undefined, '/s')).toBe('-') expect(formatProviderPerformanceMetric(Number.NaN)).toBe('-') expect(formatProviderPerformanceMetric(18.456, '/s')).toBe('18.46/s') }) it('builds stable provider trend datasets with null gaps', () => { const providers: Pick[] = [ { provider_id: 'provider-a', provider: 'OpenAI' }, { provider_id: 'provider-b', provider: 'Anthropic' }, ] const timeline: ProviderPerformanceTimelineItem[] = [ { date: '2024-03-21', provider_id: 'provider-a', provider: 'OpenAI', request_count: 2, output_tokens: 100, avg_output_tps: 25, avg_first_byte_time_ms: 120, avg_response_time_ms: 1000, success_rate: 100, }, { date: '2024-03-22', provider_id: 'provider-b', provider: 'Anthropic', request_count: 1, output_tokens: 40, avg_output_tps: null, avg_first_byte_time_ms: 220, avg_response_time_ms: 1500, success_rate: 100, }, ] const chart = buildProviderPerformanceChartData(timeline, 'avg_output_tps', providers) expect(chart.labels).toEqual(['2024-03-21', '2024-03-22']) expect(chart.datasets.map(dataset => dataset.label)).toEqual(['OpenAI', 'Anthropic']) expect(chart.datasets[0].data).toEqual([25, null]) expect(chart.datasets[1].data).toEqual([null, null]) }) })