58 lines
1.4 KiB
JavaScript
58 lines
1.4 KiB
JavaScript
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/,
|
|
);
|
|
});
|