import type { CoverageData } from '../types' export function CoverageChart({ data }: { data: CoverageData[] }) { if (data.length === 0) { return (
Keine Coverage-Daten verfuegbar
) } const sortedData = [...data].sort((a, b) => b.coverage_percent - a.coverage_percent) return (
{sortedData.map((item) => (
{item.display_name} = 80 ? 'text-emerald-600' : item.coverage_percent >= 60 ? 'text-amber-600' : 'text-red-600' }`} > {item.coverage_percent.toFixed(1)}%
= 80 ? 'bg-emerald-500' : item.coverage_percent >= 60 ? 'bg-amber-500' : 'bg-red-500' }`} style={{ width: `${item.coverage_percent}%` }} />
))}
) } export function FrameworkDistribution({ data }: { data: Record }) { const total = Object.values(data).reduce((a, b) => a + b, 0) if (total === 0) return null const frameworkLabels: Record = { go_test: 'Go Tests', pytest: 'Python (pytest)', jest: 'Jest (TS)', vitest: 'Vitest (SDK)', playwright: 'Playwright (E2E)', bqas_golden: 'BQAS Golden', bqas_rag: 'BQAS RAG', bqas_synthetic: 'BQAS Synthetic', } const frameworkColors: Record = { go_test: 'bg-cyan-500', pytest: 'bg-yellow-500', jest: 'bg-blue-500', vitest: 'bg-orange-500', playwright: 'bg-purple-500', bqas_golden: 'bg-emerald-500', bqas_rag: 'bg-teal-500', bqas_synthetic: 'bg-amber-500', } return (
{Object.entries(data) .sort((a, b) => b[1] - a[1]) .map(([framework, count]) => (
{frameworkLabels[framework] || framework} {count} ({((count / total) * 100).toFixed(0)}%)
))}
) }