Move tests to __tests__ folders, add unit tests for shared utils and services

Restructure tests into __tests__/ directories at package root so they can
be excluded from production builds. Add unit tests for dates, currency,
lookup service, payment method default logic, and tax exemption state
transitions.
This commit is contained in:
Ryan Moon
2026-03-27 21:14:42 -05:00
parent 0a2d6e23af
commit 01d6ff3fa3
10 changed files with 545 additions and 6 deletions

View File

@@ -0,0 +1,68 @@
import { describe, it, expect } from 'bun:test'
import { formatCurrency, roundCurrency, toCents, toDollars } from '../../src/utils/currency.js'
describe('formatCurrency', () => {
it('formats whole dollars', () => {
expect(formatCurrency(100)).toBe('$100.00')
})
it('formats cents', () => {
expect(formatCurrency(49.99)).toBe('$49.99')
})
it('formats zero', () => {
expect(formatCurrency(0)).toBe('$0.00')
})
it('formats thousands with comma', () => {
expect(formatCurrency(1234.56)).toBe('$1,234.56')
})
it('formats negative amounts', () => {
expect(formatCurrency(-25.50)).toBe('-$25.50')
})
})
describe('roundCurrency', () => {
it('rounds to 2 decimal places', () => {
expect(roundCurrency(1.005)).toBe(1.01)
expect(roundCurrency(1.004)).toBe(1)
})
it('handles already-rounded values', () => {
expect(roundCurrency(10.50)).toBe(10.50)
})
it('handles zero', () => {
expect(roundCurrency(0)).toBe(0)
})
})
describe('toCents', () => {
it('converts dollars to cents', () => {
expect(toCents(1.00)).toBe(100)
expect(toCents(49.99)).toBe(4999)
})
it('rounds fractional cents', () => {
// 1.005 * 100 = 100.49999... in IEEE 754, so Math.round gives 100
// This is a known floating point limitation — use toCents(roundCurrency(x)) for precision
expect(toCents(1.005)).toBe(100)
expect(toCents(1.006)).toBe(101)
})
it('handles zero', () => {
expect(toCents(0)).toBe(0)
})
})
describe('toDollars', () => {
it('converts cents to dollars', () => {
expect(toDollars(100)).toBe(1.00)
expect(toDollars(4999)).toBe(49.99)
})
it('handles zero', () => {
expect(toDollars(0)).toBe(0)
})
})