BillTracker/client/lib/utils.test.js

35 lines
1.2 KiB
JavaScript
Raw Normal View History

import { describe, it, expect } from 'vitest';
import { fmt, fmtDate, localDateString, todayStr } from './utils';
describe('fmt (money display)', () => {
it('formats with thousands separators and two decimals', () => {
expect(fmt(0)).toBe('$0.00');
expect(fmt(1234.5)).toBe('$1,234.50');
expect(fmt(1234567.89)).toBe('$1,234,567.89');
});
it('treats null/undefined as zero', () => {
expect(fmt(null)).toBe('$0.00');
expect(fmt(undefined)).toBe('$0.00');
});
});
describe('local dates', () => {
it('fmtDate renders M/D/YYYY from ISO', () => {
expect(fmtDate('2026-06-05')).toBe('6/5/2026');
expect(fmtDate(null)).toBe('—');
});
it('localDateString uses local calendar parts (no UTC drift)', () => {
// 23:30 local on Jan 31 must stay Jan 31 regardless of timezone
const lateNight = new Date(2026, 0, 31, 23, 30, 0);
expect(localDateString(lateNight)).toBe('2026-01-31');
const earlyMorning = new Date(2026, 5, 1, 0, 5, 0);
expect(localDateString(earlyMorning)).toBe('2026-06-01');
});
it('todayStr matches localDateString for now', () => {
expect(todayStr()).toBe(localDateString(new Date()));
});
});