import assert from "node:assert/strict"; import test from "node:test"; import { calculateNetSaleProceeds, createSale, createSaleItem, } from "../../src/modules/sales/domain/sale.js"; test("creates a valid sale record and calculates net proceeds after fees", () => { const sale = createSale({ sellerId: "seller-id", saleDate: "2026-09-08", saleLocation: "eBay", soldPriceMinor: 4999, currency: "USD", platformFeesMinor: 300, paymentProcessingFeesMinor: 120, shippingCostMinor: 50, taxesMinor: 90, otherFeesMinor: 40, buyerName: "Alex", buyerContact: "alex@example.com", }); assert.equal(sale.soldPriceMinor, 4999); assert.equal(sale.currency, "USD"); assert.equal( calculateNetSaleProceeds({ soldPriceMinor: 4999, platformFeesMinor: 300, paymentProcessingFeesMinor: 120, shippingCostMinor: 50, taxesMinor: 90, otherFeesMinor: 40, }), 4399, ); }); test("rejects invalid sales and negative fee values", () => { assert.throws( () => createSale({ sellerId: "seller-id", saleDate: "2026-09-08", soldPriceMinor: 0, }), /must be a positive integer minor unit/, ); assert.throws( () => createSaleItem({ saleId: "sale-id", inventoryItemId: "inventory-item-id", soldPriceMinor: 2000, costBasisMinor: -1, }), /must be a non-negative integer minor unit/, ); assert.throws( () => createSale({ sellerId: "seller-id", saleDate: "2026-02-30", soldPriceMinor: 2000, }), /must be a valid ISO date/, ); assert.throws( () => createSale({ sellerId: "seller-id", saleDate: "2026-09-08", soldPriceMinor: 2000, currency: "US dollars", }), /must be a three-letter ISO currency code/, ); });