Ctrl K
ComunidadGuías…

tests/chart-optimizations.unit.test.ts

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
import { describe, expect, it, vi } from 'vitest'
import {
  filterDailySeriesToBillingPeriod,
  resolveDashboardDailySeriesWindow,
} from '../src/utils/chartOptimizations'

describe('chart optimizations billing window', () => {
  it('uses elapsed UTC days across month-length boundaries', () => {
    vi.useFakeTimers()
    vi.setSystemTime(new Date('2026-04-01T12:00:00.000Z'))

    try {
      const billingStart = new Date('2026-03-30T00:00:00.000Z')
      const seriesStart = new Date('2026-03-03T00:00:00.000Z')
      const fullData = Array.from({ length: 30 }).fill(0) as number[]
      // Index for March 30, 31, April 1 relative to seriesStart (Mar 3)
      fullData[27] = 1
      fullData[28] = 2
      fullData[29] = 3

      const { data } = filterDailySeriesToBillingPeriod(fullData, seriesStart, billingStart)
      expect(data).toHaveLength(3)
      expect(data).toEqual([1, 2, 3])
    }
    finally {
      vi.useRealTimers()
    }
  })

  it.concurrent('starts billing fetch windows at the cycle anchor for 31-day cycles', () => {
    const now = new Date('2026-03-31T15:00:00.000Z')
    const billingStart = new Date('2026-03-01T00:00:00.000Z')
    const window = resolveDashboardDailySeriesWindow(true, billingStart, now)

    expect(window.seriesStart.toISOString()).toBe('2026-03-01T00:00:00.000Z')
    expect(window.dayCount).toBe(31)
    expect(window.exclusiveEnd.toISOString()).toBe('2026-04-01T00:00:00.000Z')
  })

  it.concurrent('keeps trailing 30 days when not using billing period', () => {
    const now = new Date('2026-03-31T15:00:00.000Z')
    const billingStart = new Date('2026-03-01T00:00:00.000Z')
    const window = resolveDashboardDailySeriesWindow(false, billingStart, now)

    expect(window.seriesStart.toISOString()).toBe('2026-03-02T00:00:00.000Z')
    expect(window.dayCount).toBe(30)
  })
})