Files
pokemon-inventory/apps/api/tests/domain/acquisition-pricing.test.js
T

60 lines
1.5 KiB
JavaScript

import assert from 'node:assert/strict';
import test from 'node:test';
import {
calculateAcquisitionCostBasis,
createAcquisition,
} from '../../src/modules/acquisitions/domain/acquisition.js';
import {
calculateMedianPriceMinor,
createPricingObservation,
} from '../../src/modules/pricing/domain/pricing-observation.js';
test('calculates acquisition cost basis from all cost components', () => {
const total = calculateAcquisitionCostBasis({
costMinor: 1000,
shippingMinor: 150,
taxMinor: 75,
otherFeesMinor: 50,
estimatedTradeValueMinor: 200,
});
assert.equal(total, 1075);
});
test('rejects negative acquisition values and missing identity fields', () => {
assert.throws(
() => createAcquisition({
inventoryItemId: 'inventory-item-id',
method: 'PURCHASE',
costMinor: -1,
}),
/must be a non-negative integer minor unit/,
);
assert.throws(
() => createAcquisition({
inventoryItemId: '',
method: 'PURCHASE',
costMinor: 1000,
}),
/Inventory item ID is required/,
);
});
test('creates pricing observations and calculates a median observed price', () => {
const observation = createPricingObservation({
productId: 'product-id',
inventoryItemId: 'inventory-item-id',
providerId: 'ebay',
priceMinor: 2499,
currency: 'USD',
sourceIdentifier: 'listing-1',
conditionId: 'condition-id',
});
assert.equal(observation.currency, 'USD');
assert.equal(observation.priceMinor, 2499);
assert.equal(calculateMedianPriceMinor([1199, 2499, 2000]), 2000);
});