mirror of
https://github.com/AmanTahiliani/box-box.git
synced 2026-08-07 19:56:18 -04:00
Add data library UI
This commit is contained in:
69
frontend/src/test/coverage.test.ts
Normal file
69
frontend/src/test/coverage.test.ts
Normal file
@@ -0,0 +1,69 @@
|
||||
import { describe, it, expect } from 'vitest'
|
||||
import {
|
||||
countRaceHubDatasets,
|
||||
formatCoverageHint,
|
||||
countWeekendStats,
|
||||
sessionTypeAbbrev,
|
||||
isSessionComplete,
|
||||
} from '../lib/coverage'
|
||||
import type { DatasetInfo, Weekend } from '../types'
|
||||
|
||||
const fullDatasets: Record<string, DatasetInfo> = {
|
||||
meeting: { status: 'available', source: 'local', count: 1 },
|
||||
session: { status: 'available', source: 'local', count: 1 },
|
||||
drivers: { status: 'available', source: 'local', count: 20 },
|
||||
results: { status: 'available', source: 'local', count: 20 },
|
||||
starting_grid: { status: 'available', source: 'local', count: 20 },
|
||||
stints: { status: 'available', source: 'local', count: 2 },
|
||||
pit_stops: { status: 'available', source: 'local', count: 1 },
|
||||
positions: { status: 'available', source: 'local', count: 3 },
|
||||
race_control: { status: 'available', source: 'local', count: 1 },
|
||||
weather: { status: 'available', source: 'local', count: 1 },
|
||||
laps: { status: 'available', source: 'local', count: 1 },
|
||||
}
|
||||
|
||||
describe('coverage helpers', () => {
|
||||
it('counts available Race Hub datasets', () => {
|
||||
expect(countRaceHubDatasets(fullDatasets)).toEqual({ available: 11, total: 11 })
|
||||
expect(countRaceHubDatasets({ meeting: { status: 'available', source: 'local' } })).toEqual({
|
||||
available: 1,
|
||||
total: 11,
|
||||
})
|
||||
})
|
||||
|
||||
it('formats coverage hint', () => {
|
||||
expect(formatCoverageHint(fullDatasets)).toBe('11/11')
|
||||
})
|
||||
|
||||
it('detects complete sessions', () => {
|
||||
expect(isSessionComplete(fullDatasets)).toBe(true)
|
||||
expect(isSessionComplete({ meeting: { status: 'available', source: 'local' } })).toBe(false)
|
||||
})
|
||||
|
||||
it('abbreviates session types', () => {
|
||||
expect(sessionTypeAbbrev('Race', 'Race')).toBe('R')
|
||||
expect(sessionTypeAbbrev('Qualifying', 'Qualifying')).toBe('Q')
|
||||
expect(sessionTypeAbbrev('Practice', 'Practice 1')).toBe('FP1')
|
||||
})
|
||||
|
||||
it('counts weekend stats', () => {
|
||||
const local: Weekend = {
|
||||
source: 'local',
|
||||
meeting_key: 1,
|
||||
meeting: {} as Weekend['meeting'],
|
||||
sessions: [{ session: {} as Weekend['sessions'][0]['session'], source: 'local', datasets: fullDatasets }],
|
||||
}
|
||||
const partial: Weekend = {
|
||||
source: 'partial',
|
||||
meeting_key: 2,
|
||||
meeting: {} as Weekend['meeting'],
|
||||
sessions: [{ session: {} as Weekend['sessions'][0]['session'], source: 'partial', datasets: {} }],
|
||||
}
|
||||
expect(countWeekendStats([local, partial, undefined])).toEqual({
|
||||
full: 1,
|
||||
partial: 1,
|
||||
missing: 1,
|
||||
total: 3,
|
||||
})
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user