import { describe, it, expect } from 'vitest'; import { latestYearPerScope, scopeYear, scopeWithoutYear } from '@/lib/rankings-util'; const row = (metric_slug: string, scope_key: string, id: number) => ({ id, metric_slug, scope_key }); describe('scopeYear / scopeWithoutYear', () => { it('extracts the year and strips it from the key', () => { expect(scopeYear('geo=WORLD|sex=all|age=all|year=2021|level=top')).toBe(2021); expect(scopeYear('geo=WORLD|sex=all|age=all|year=latest|level=top')).toBe(0); expect(scopeYear('')).toBe(0); expect(scopeWithoutYear('geo=WORLD|sex=all|age=all|year=2021|level=top')).toBe('geo=WORLD|sex=all|age=all|level=top'); expect(scopeWithoutYear('geo=USA|level=all')).toBe('geo=USA|level=all'); }); }); describe('latestYearPerScope', () => { it('keeps one row per metric + scope: the latest year', () => { const rows = [ row('mortality_count', 'geo=USA|sex=all|age=all|year=2019|level=top', 1), row('mortality_count', 'geo=USA|sex=all|age=all|year=2021|level=top', 2), row('mortality_count', 'geo=USA|sex=all|age=all|year=2020|level=top', 3), ]; const r = latestYearPerScope(rows); expect(r.rows.map((x) => x.id)).toEqual([2]); expect(r.hidden).toBe(2); }); it('treats different metrics, geographies and sexes as separate scopes', () => { const rows = [ row('mortality_count', 'geo=USA|sex=all|age=all|year=2020|level=top', 1), row('incidence_count', 'geo=USA|sex=all|age=all|year=2020|level=top', 2), row('mortality_count', 'geo=WORLD|sex=all|age=all|year=2020|level=top', 3), row('mortality_count', 'geo=USA|sex=female|age=all|year=2020|level=top', 4), row('mortality_count', 'geo=USA|sex=all|age=all|year=2018|level=top', 5), ]; const r = latestYearPerScope(rows); expect(r.rows.map((x) => x.id)).toEqual([1, 2, 3, 4]); expect(r.hidden).toBe(1); }); it('keeps input order for surviving rows (first appearance of the scope)', () => { const rows = [row('a', 'geo=X|year=2019', 1), row('b', 'geo=X|year=2021', 2), row('a', 'geo=X|year=2021', 3)]; expect(latestYearPerScope(rows).rows.map((x) => x.id)).toEqual([3, 2]); }); it('keeps yearless ("latest") scopes as their own rows and prefers a dated year over none', () => { const rows = [row('active_trials', 'geo=WORLD|sex=all|age=all|year=latest|level=top', 1), row('mortality_count', 'geo=USA|year=latest', 2), row('mortality_count', 'geo=USA|year=2021', 3)]; const r = latestYearPerScope(rows); expect(r.rows.map((x) => x.id)).toEqual([1, 3]); expect(r.hidden).toBe(1); }); it('handles empty input', () => { expect(latestYearPerScope([])).toEqual({ rows: [], hidden: 0 }); }); });