baseline: 批次A-D 成果 + membership 半成品(测试红)
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
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)
|
||||
})
|
||||
Reference in New Issue
Block a user