import { convertToUsd, formatCurrency, formatUsd } from "./currency" describe("formatCurrency", () => { it("formats a number as currency with default options", () => { const result = formatCurrency(1234.5, { currency: "EUR" }) expect(result).toBe("€1,234.50") }) it("respects minimumFractionDigits (min = 3, max = 3)", () => { const result = formatCurrency(1.2, { currency: "USD", minimumFractionDigits: 3, maximumFractionDigits: 3, }) expect(result).toBe("$1.200") }) it("respects maximumFractionDigits (min = 0, max = 1)", () => { const result = formatCurrency(1.234567, { currency: "USD", minimumFractionDigits: 0, maximumFractionDigits: 1, }) expect(result).toBe("$1.2") }) }) describe("formatUsd", () => { it("formats a number as USD", () => { const result = formatUsd(99.99) expect(result).toBe("$99.99") }) it("formats zero", () => { const result = formatUsd(0) expect(result).toBe("$0.00") }) }) describe("convertToUsd", () => { it("converts 1 BTC (8 decimals) with $30,000 rate (6 decimals)", () => { const assetAmount = 1_00000000n // 1 BTC const assetDecimals = 8 const conversionRate = 30_000_000000n // $30,000 in 6 decimals const conversionRateDecimals = 6 const result = convertToUsd( assetAmount, assetDecimals, conversionRate, conversionRateDecimals, ) expect(result.value).toBe(30_000_000000n) expect(result.formatted).toBe("30000") }) it("converts 0.5 BTC correctly", () => { const assetAmount = 50_000000n // 0.5 BTC const assetDecimals = 8 const conversionRate = 40_000_000000n // $40,000 const conversionRateDecimals = 6 const result = convertToUsd( assetAmount, assetDecimals, conversionRate, conversionRateDecimals, ) expect(result.value).toBe(20_000_000000n) expect(result.formatted).toBe("20000") }) it("converts 1 ETH (18 decimals) with $2,000 rate (6 decimals)", () => { const assetAmount = 1_000000000000000000n // 1 ETH const assetDecimals = 18 const conversionRate = 2_000_000000n const conversionRateDecimals = 6 const result = convertToUsd( assetAmount, assetDecimals, conversionRate, conversionRateDecimals, ) expect(result.value).toBe(2_000_000000n) expect(result.formatted).toBe("2000") }) it("handles zero amount correctly", () => { const result = convertToUsd(0n, 18, 999_999999n, 6) expect(result.value).toBe(0n) expect(result.formatted).toBe("0") }) it("handles assets with fewer decimals than conversion rate", () => { const assetAmount = 100n const assetDecimals = 2 const conversionRate = 1_500_000000n // $1500 const conversionRateDecimals = 6 const result = convertToUsd( assetAmount, assetDecimals, conversionRate, conversionRateDecimals, ) expect(result.value).toBe(1_500_000000n) expect(result.formatted).toBe("1500") }) })