Files
pn-new-crm/tests/unit/analytics/range.test.ts

36 lines
1.4 KiB
TypeScript
Raw Normal View History

import { describe, it, expect } from 'vitest';
import { previousPeriodBounds } from '@/lib/analytics/range';
describe('previousPeriodBounds', () => {
it('returns the equal-length window immediately preceding the given bounds', () => {
const from = new Date('2026-05-01T00:00:00.000Z');
const to = new Date('2026-05-31T00:00:00.000Z'); // 30-day span
const prior = previousPeriodBounds({ from, to });
// Prior window is contiguous (prior.to === current.from) and equal length.
expect(prior.to.toISOString()).toBe('2026-05-01T00:00:00.000Z');
expect(prior.from.toISOString()).toBe('2026-04-01T00:00:00.000Z');
});
it('preserves sub-day spans (e.g. a single-day window)', () => {
const from = new Date('2026-05-10T00:00:00.000Z');
const to = new Date('2026-05-10T23:59:59.999Z');
const prior = previousPeriodBounds({ from, to });
const lenMs = to.getTime() - from.getTime();
expect(prior.to.getTime()).toBe(from.getTime());
expect(prior.from.getTime()).toBe(from.getTime() - lenMs);
});
it('does not mutate the input bounds', () => {
const from = new Date('2026-05-01T00:00:00.000Z');
const to = new Date('2026-05-31T00:00:00.000Z');
const fromCopy = from.getTime();
const toCopy = to.getTime();
previousPeriodBounds({ from, to });
expect(from.getTime()).toBe(fromCopy);
expect(to.getTime()).toBe(toCopy);
});
});