59 lines
3.6 KiB
JavaScript
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('客户应收应付金额与审核回归校验通过');
|