Uecko_ERP/packages/rdx-ddd/src/value-objects/__tests__/money-value.test.ts

55 lines
2.3 KiB
TypeScript
Raw Normal View History

2025-05-09 10:45:32 +00:00
import { MoneyValue } from "../money-value";
2025-02-24 19:00:28 +00:00
describe("MoneyValue", () => {
test("should correctly instantiate with amount, scale, and currency", () => {
2025-09-04 10:02:24 +00:00
const money = new MoneyValue({ value: 10000, scale: 2, currency_code: "EUR" });
expect(money.value).toBe(100);
2025-02-24 19:00:28 +00:00
expect(money.currency).toBe("EUR");
expect(money.scale).toBe(2);
});
test("should add two MoneyValue instances with the same currency", () => {
2025-09-04 10:02:24 +00:00
const money1 = new MoneyValue({ value: 10000, scale: 2, currency_code: "EUR" });
const money2 = new MoneyValue({ value: 5000, scale: 2, currency_code: "EUR" });
2025-02-24 19:00:28 +00:00
const result = money1.add(money2);
2025-09-04 10:02:24 +00:00
expect(result.value).toBe(150);
2025-02-24 19:00:28 +00:00
});
test("should subtract two MoneyValue instances with the same currency", () => {
2025-09-04 10:02:24 +00:00
const money1 = new MoneyValue({ value: 20000, scale: 2, currency_code: "EUR" });
const money2 = new MoneyValue({ value: 5000, scale: 2, currency_code: "EUR" });
2025-02-24 19:00:28 +00:00
const result = money1.subtract(money2);
2025-09-04 10:02:24 +00:00
expect(result.value).toBe(150);
2025-02-24 19:00:28 +00:00
});
test("should throw an error when adding different currencies", () => {
2025-09-04 10:02:24 +00:00
const money1 = new MoneyValue({ value: 10000, scale: 2, currency_code: "EUR" });
const money2 = new MoneyValue({ value: 5000, scale: 2, currency_code: "USD" });
2025-02-25 10:16:34 +00:00
expect(() => money1.add(money2)).toThrow(
"You must provide a Dinero instance with the same currency"
);
2025-02-24 19:00:28 +00:00
});
test("should correctly convert scale", () => {
2025-09-04 10:02:24 +00:00
const money = new MoneyValue({ value: 10000, scale: 2, currency_code: "EUR" });
2025-02-24 19:00:28 +00:00
const converted = money.convertScale(4);
2025-09-04 10:02:24 +00:00
expect(converted.value).toBe(100);
2025-02-24 19:00:28 +00:00
expect(converted.scale).toBe(4);
});
test("should format correctly according to locale", () => {
2025-09-04 10:02:24 +00:00
const money = new MoneyValue({ value: 123456, scale: 2, currency_code: "EUR" });
2025-02-24 19:00:28 +00:00
expect(money.format("en-US")).toBe("€1,234.56");
});
test("should compare MoneyValue instances correctly", () => {
2025-09-04 10:02:24 +00:00
const money1 = new MoneyValue({ value: 10000, scale: 2, currency_code: "EUR" });
const money2 = new MoneyValue({ value: 10000, scale: 2, currency_code: "EUR" });
const money3 = new MoneyValue({ value: 5000, scale: 2, currency_code: "EUR" });
2025-02-24 19:00:28 +00:00
expect(money1.equalsTo(money2)).toBe(true);
expect(money1.greaterThan(money3)).toBe(true);
expect(money3.lessThan(money1)).toBe(true);
});
});