profileShare

rasmusjy / voicetask

Read-only snapshot

No repository description.

main default branch 105 files Expires Sep 13, 2026, 9:06 AM
coverage.test.ts 1,191 bytes
1 import { describe, expect, it } from 'vitest'
2 import { CATEGORY_IDS, initialCoverage, type Coverage } from '../../shared/types'
3 import { isFullyCovered, weakestCategory } from './coverage'
4
5 function allClear(): Coverage {
6 return Object.fromEntries(CATEGORY_IDS.map((category) => [category, 'clear'])) as Coverage
7 }
8
9 describe('weakestCategory', () => {
10 it('returns the first category in fixed order when all are missing', () => {
11 expect(weakestCategory(initialCoverage())).toBe(CATEGORY_IDS[0])
12 })
13
14 it('prefers missing over partial, and partial over clear, tie-broken by fixed order', () => {
15 const coverage: Coverage = {
16 ...initialCoverage(),
17 goal: 'clear',
18 users: 'partial',
19 'core-flow': 'missing',
20 }
21 expect(weakestCategory(coverage)).toBe('core-flow')
22 })
23
24 it('returns null when every category is clear', () => {
25 expect(weakestCategory(allClear())).toBeNull()
26 })
27 })
28
29 describe('isFullyCovered', () => {
30 it('is false until every category is clear', () => {
31 expect(isFullyCovered(initialCoverage())).toBe(false)
32 })
33
34 it('is true once every category is clear', () => {
35 expect(isFullyCovered(allClear())).toBe(true)
36 })
37 })
38