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)}%)
))}
)
}