SPB Git forge

spb/cancerindex

Public
37commits 1branches 0releases
2.9 MBsize
maindefault branch
10 days agolast push
TypeScript 97.2% SQL 1.5% CSS 0.6% JavaScript 0.5%
1.5 KB · 34 lines typescript
Raw Blame History
1import { describe, expect, it } from 'vitest';2import { dataRelease, dedupeSources, envelope, paginate } from '../src/lib/envelope.js';34const src = (id: string, slug: string) => ({ id, slug, name: slug, license: 'CC BY 4.0', attribution: null, url: null });56describe('envelope', () => {7  it('wraps data with sources, dataRelease and generatedAt', () => {8    const out = envelope({ a: 1 }, [src('CI-SOURCE-00000001', 'oncotree')], undefined, new Date('2026-09-08T10:00:00Z'));9    expect(out.data).toEqual({ a: 1 });10    expect(out.sources).toHaveLength(1);11    expect(out.dataRelease).toBe('CancerIndex 2026-09');12    expect(new Date(out.generatedAt).getTime()).toBeGreaterThan(0);13    expect(out).not.toHaveProperty('total');14  });1516  it('spreads pagination fields when provided', () => {17    const out = envelope([], [], paginate(250, 50, 200));18    expect(out.total).toBe(250);19    expect(out.limit).toBe(50);20    expect(out.offset).toBe(200);21    expect(out.hasMore).toBe(false);22    expect(paginate(250, 50, 100).hasMore).toBe(true);23  });2425  it('deduplicates sources by id and sorts by slug', () => {26    const out = dedupeSources([src('CI-SOURCE-00000002', 'seer'), src('CI-SOURCE-00000001', 'oncotree'), src('CI-SOURCE-00000002', 'seer')]);27    expect(out.map((s) => s.slug)).toEqual(['oncotree', 'seer']);28  });2930  it('formats the data release as CancerIndex YYYY-MM', () => {31    expect(dataRelease(new Date('2025-01-31T23:59:59Z'))).toBe('CancerIndex 2025-01');32  });33});34