Files
cobble/src/utils/money.test.ts
T

42 lines
1.4 KiB
TypeScript

import { expect, test } from "bun:test";
import {
formatNaira,
nairaToKobo,
sumInvoiceItemsKobo,
} from "./money";
test("formatNaira formats kobo amounts", () => {
expect(formatNaira(150050)).toBe("₦1,500.50");
expect(formatNaira(100)).toBe("₦1.00");
expect(formatNaira(0)).toBe("₦0.00");
expect(formatNaira(500000000)).toBe("₦5,000,000.00");
expect(formatNaira(1)).toBe("₦0.01");
expect(formatNaira("250000")).toBe("₦2,500.00");
});
test("formatNaira handles strings, undefined and negative", () => {
expect(formatNaira(undefined)).toBe("₦0.00");
expect(formatNaira(null)).toBe("₦0.00");
expect(formatNaira(1000)).toBe("₦10.00");
expect(formatNaira(-5050)).toBe("-₦50.50");
});
test("nairaToKobo parses naira strings", () => {
expect(nairaToKobo("₦1,500.50")).toBe(150050);
expect(nairaToKobo("1500")).toBe(150000);
expect(nairaToKobo("1,234.56")).toBe(123456);
expect(nairaToKobo(undefined)).toBe(0);
expect(nairaToKobo("")).toBe(0);
expect(nairaToKobo("abc")).toBe(0);
});
test("sumInvoiceItemsKobo totals line items", () => {
const items = [
{ quantity: 2, unit_price_kobo: 5000 }, // ₦50.00 x2
{ quantity: 1, unit_price_kobo: 150000 }, // ₦1,500.00
{ quantity: "", unit_price_kobo: "" },
];
expect(sumInvoiceItemsKobo(items)).toBe(160000);
expect(sumInvoiceItemsKobo([])).toBe(0);
});