import { describe, expect, it } from 'bun:test'; import { mergeDataSeries } from './chart-data-transformers'; type PricePoint = { date: string; price: number; }; describe('mergeDataSeries', () => { it('normalizes intraday timestamps onto the same trading day', () => { const merged = mergeDataSeries([ { id: 'stock', data: [ { date: '2026-03-10T21:00:00.000Z', price: 100 }, { date: '2026-03-11T21:00:00.000Z', price: 101 } ] }, { id: 'sp500', data: [ { date: '2026-03-10', price: 5000 }, { date: '2026-03-11', price: 5050 } ] } ]); expect(merged).toEqual([ { date: '2026-03-10', stock: 100, sp500: 5000 }, { date: '2026-03-11', stock: 101, sp500: 5050 } ]); }); it('fills a comparison series from the nearest prior trading day when dates are missing', () => { const merged = mergeDataSeries([ { id: 'stock', data: [ { date: '2026-03-10', price: 100 }, { date: '2026-03-11', price: 103 }, { date: '2026-03-12', price: 104 } ] }, { id: 'sp500', data: [ { date: '2026-03-10', price: 5000 }, { date: '2026-03-12', price: 5060 } ] } ]); expect(merged).toEqual([ { date: '2026-03-10', stock: 100, sp500: 5000 }, { date: '2026-03-11', stock: 103, sp500: 5000 }, { date: '2026-03-12', stock: 104, sp500: 5060 } ]); }); it('does not backfill dates before a series first appears', () => { const merged = mergeDataSeries([ { id: 'stock', data: [ { date: '2026-03-10', price: 100 }, { date: '2026-03-11', price: 103 } ] }, { id: 'sp500', data: [ { date: '2026-03-11', price: 5000 } ] } ]); expect(merged).toEqual([ { date: '2026-03-10', stock: 100 }, { date: '2026-03-11', stock: 103, sp500: 5000 } ]); }); });