17 lines
1.0 KiB
JavaScript
17 lines
1.0 KiB
JavaScript
|
|
const {test} = require('node:test');
|
||
|
|
const assert = require('node:assert/strict');
|
||
|
|
const fs = require('node:fs');
|
||
|
|
const vm = require('node:vm');
|
||
|
|
const text=fs.readFileSync('app/modules/orders/templates/detail.html','utf8');
|
||
|
|
const source=text.slice(text.indexOf(' function normalizeOrderLine('),text.indexOf(' async function loadOrder('));
|
||
|
|
const context={};vm.runInNewContext(source,context);
|
||
|
|
test('order without cached line amount displays work plus saved fee correctly',()=>{
|
||
|
|
const work=context.normalizeOrderLine({quantity:2,unit_price:100});
|
||
|
|
const fee=context.normalizeOrderLine({source_type:'invoice_fee',quantity:1,unit_price:49,product_id:9});
|
||
|
|
assert.equal(work.amount+fee.amount,249);assert.equal(fee.product_id,9);assert.equal(fee.source_type,'invoice_fee');
|
||
|
|
});
|
||
|
|
test('explicit saved amount is preserved and fallback respects discount',()=>{
|
||
|
|
assert.equal(context.normalizeOrderLine({quantity:1,unit_price:100,amount:0}).amount,0);
|
||
|
|
assert.equal(context.normalizeOrderLine({quantity:2,unit_price:100,discount_percentage:10}).amount,180);
|
||
|
|
});
|