Files
docs/悦/货代SAAS平台后台/tests/verify-customer-arap-amount.cjs
T
2026-08-21 09:20:26 +08:00

59 lines
3.6 KiB
JavaScript

const assert = require('node:assert/strict');
const fs = require('node:fs');
const path = require('node:path');
const vm = require('node:vm');
const root = path.resolve(__dirname, '..');
const moduleHtml = fs.readFileSync(path.join(root, 'prototype-src/modules/08-finance.html'), 'utf8');
const overlays = fs.readFileSync(path.join(root, 'prototype-src/overlays.html'), 'utf8');
const appJs = fs.readFileSync(path.join(root, 'prototype-src/app.js'), 'utf8');
const pageStart = moduleHtml.indexOf('id="page-customer-arap"');
const pageEnd = moduleHtml.indexOf('id="page-finance-ar-detail-report"', pageStart);
const pageHtml = moduleHtml.slice(pageStart, pageEnd);
const feeHeaderIndex = pageHtml.indexOf('>费用类型</th>');
const amountHeaderIndex = pageHtml.indexOf('>金额</th>');
assert.ok(feeHeaderIndex >= 0, '客户应收应付列表缺少费用类型表头');
assert.ok(amountHeaderIndex > feeHeaderIndex, '客户应收应付列表应在费用类型后显示金额');
assert.ok(overlays.includes('id="arap-form-amount"'), '新增/编辑弹框缺少金额字段');
assert.ok(overlays.includes('id="arap-audit-amount"'), '审核摘要缺少金额字段');
const formStart = overlays.indexOf('id="modal-arap-form"');
const formEnd = overlays.indexOf('id="modal-arap-audit"', formStart);
const formHtml = overlays.slice(formStart, formEnd);
assert.ok(formHtml.indexOf('>金额 *</label>') > formHtml.indexOf('>费用类型 *</label>'), '新增/编辑弹框金额应位于费用类型之后');
const auditStart = overlays.indexOf('id="modal-arap-audit"');
const auditEnd = overlays.indexOf('id="modal-settlement-ap-voucher"', auditStart);
const auditHtml = overlays.slice(auditStart, auditEnd);
assert.ok(auditHtml.indexOf('>金额</span>') > auditHtml.indexOf('>费用类型</span>'), '审核摘要金额应位于费用类型之后');
function loadFunction(name, nextName) {
const start = appJs.indexOf(`function ${name}`);
const end = appJs.indexOf(`\nfunction ${nextName}`, start);
assert.ok(start >= 0 && end > start, `缺少可测试函数 ${name}`);
const sandbox = {};
vm.runInNewContext(`${appJs.slice(start, end)}\nresult=${name};`, sandbox);
return sandbox.result;
}
const normalizeAmount = loadFunction('normalizeArapAmount', 'appendArapLog');
assert.equal(normalizeAmount('1200'), '1200.00');
assert.equal(normalizeAmount('1200.5'), '1200.50');
assert.equal(normalizeAmount('0.01'), '0.01');
['', '-1', 'abc', '1.234'].forEach(value => assert.equal(normalizeAmount(value), ''));
assert.ok(appJs.includes("['arap-form-amount',record.amount]"), '编辑弹框未回填金额');
assert.ok(appJs.includes("getArapFormValue('arap-form-amount')"), '保存函数未读取金额');
assert.ok(appJs.includes("document.getElementById('arap-audit-amount').textContent=record.amount||'—'"), '审核摘要未将金额写入可见文本');
assert.ok(appJs.includes("['费用类型',d.feeType],['金额',d.amount]"), '详情页金额未紧跟费用类型');
assert.ok(appJs.includes("existing.auditStatus=getArapStatusAfterSave('edit')"), '编辑保存后未重新进入审核');
const renderStart = appJs.indexOf('function renderArap()');
const renderEnd = appJs.indexOf('// ============ 应收款统计表', renderStart);
const renderSource = appJs.slice(renderStart, renderEnd);
assert.ok(renderSource.includes("+d.feeType+'</td>'\n +'<td"), '列表金额未紧跟费用类型渲染');
assert.ok(!renderSource.includes('>删除</a>'), '客户应收应付列表仍包含删除操作');
assert.ok(renderSource.includes('colspan="14"'), '列表空态列数未更新为 14');
console.log('客户应收应付金额与审核回归校验通过');