ProjectUsage.metrics.test.ts46 lines · main
1import { describe, expect, it } from 'vitest'
2
3import {
4 computeSuccessAndNonSuccessRates,
5 sumErrors,
6 sumTotal,
7 sumWarnings,
8 toLogsBarChartData,
9} from './ProjectUsage.metrics'
10
11describe('ProjectUsage.metrics', () => {
12 const rows = [
13 { timestamp: '2025-10-22T13:00:00Z', ok_count: 90, warning_count: 5, error_count: 5 },
14 { timestamp: '2025-10-22T13:01:00Z', ok_count: 50, warning_count: 10, error_count: 0 },
15 ]
16
17 it('toLogsBarChartData maps and coerces fields correctly', () => {
18 const data = toLogsBarChartData(rows)
19 expect(data).toHaveLength(2)
20 expect(data[0]).toEqual({
21 timestamp: '2025-10-22T13:00:00Z',
22 ok_count: 90,
23 warning_count: 5,
24 error_count: 5,
25 })
26 })
27
28 it('sum helpers compute totals correctly', () => {
29 const data = toLogsBarChartData(rows)
30 expect(sumTotal(data)).toBe(160)
31 expect(sumWarnings(data)).toBe(15)
32 expect(sumErrors(data)).toBe(5)
33 })
34
35 it('computeSuccessAndNonSuccessRates returns expected percentages', () => {
36 const data = toLogsBarChartData(rows)
37 const total = sumTotal(data)
38 const warns = sumWarnings(data)
39 const errs = sumErrors(data)
40 const { successRate, nonSuccessRate } = computeSuccessAndNonSuccessRates(total, warns, errs)
41
42 // success = 160 - (15 + 5) = 140 → 87.5%
43 expect(successRate).toBeCloseTo(87.5)
44 expect(nonSuccessRate).toBeCloseTo(12.5)
45 })
46})