Files
dealerhub/frontend/tests/transaction.test.mjs

43 lines
1.3 KiB
JavaScript

import test from 'node:test'
import assert from 'node:assert/strict'
import {
unitRate,
isValidQuantity,
isValidPrice,
lineAmount,
baseUnitPrice,
} from '../src/utils/transaction.js'
test('source-unit pricing converts exactly once', () => {
const row = {
source_unit: 7,
units: [{ unit_id: 7, rate: 24 }],
quantity: 2,
unit_price: 120,
}
assert.equal(unitRate(row), 24)
assert.equal(lineAmount(row), 240)
assert.equal(baseUnitPrice(row), 5)
})
test('base-unit rows keep their entered amount', () => {
const row = { source_unit: null, quantity: 3, unit_price: 12.5, units: [] }
assert.equal(unitRate(row), 1)
assert.equal(lineAmount(row), 37.5)
assert.equal(baseUnitPrice(row), 12.5)
})
test('quantity and price validators reject non-finite or out-of-range values', () => {
assert.equal(isValidQuantity({ quantity: 0.001 }), true)
assert.equal(isValidQuantity({ quantity: 0 }), false)
assert.equal(isValidQuantity({ quantity: Number.NaN }), false)
assert.equal(isValidQuantity({ quantity: 1e9 + 1 }), false)
assert.equal(isValidPrice({ unit_price: 0.01 }), true)
assert.equal(isValidPrice({ unit_price: 0 }), false)
assert.equal(isValidPrice({ unit_price: Number.POSITIVE_INFINITY }), false)
assert.equal(isValidPrice({ unit_price: 1e9 + 1 }), false)
})