Files
docs/悦/货代SAAS平台后台/tests/verify-settlement-ap-payment-voucher-approval.cjs
T

44 lines
2.6 KiB
JavaScript
Raw Normal View History

2026-08-21 09:20:26 +08:00
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');
assert.ok(moduleHtml.includes('付款状态:'), '查询区缺少付款状态标签');
assert.ok(appJs.includes('openSettlementApVoucher'), '列表缺少上传付款凭证入口');
assert.ok(appJs.includes('openSettlementApApproval'), '列表缺少审批入口');
assert.ok(overlays.includes('id="modal-settlement-ap-voucher"'), '缺少付款凭证弹框');
assert.ok(overlays.includes('id="settlement-ap-voucher-files"'), '付款凭证文件框缺少 ID');
assert.ok(overlays.includes('multiple'), '付款凭证不支持多文件');
assert.ok(overlays.includes('id="modal-settlement-ap-approval"'), '缺少审批弹框');
assert.ok(overlays.includes('审批通过'), '审批弹框缺少通过操作');
assert.ok(overlays.includes('审批驳回'), '审批弹框缺少驳回操作');
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 actionState = loadFunction('getSettlementApApprovalActionState', 'getSettlementApApprovalResult');
const approvalResult = loadFunction('getSettlementApApprovalResult', 'formatSettlementApVoucherSize');
const normalize = value => JSON.parse(JSON.stringify(value));
assert.deepEqual(normalize(actionState('已审批')), {canSubmit:false,readonly:true});
assert.deepEqual(normalize(actionState('审批中')), {canSubmit:true,readonly:false});
assert.deepEqual(normalize(actionState('已驳回')), {canSubmit:true,readonly:false});
assert.deepEqual(normalize(approvalResult('pass')), {approveStatus:'已审批',status:'生效'});
assert.deepEqual(normalize(approvalResult('reject')), {approveStatus:'已驳回',status:'待审批'});
assert.ok(appJs.includes('驳回原因不能为空'), '缺少驳回原因必填校验');
assert.ok(appJs.includes('paymentVouchers'), '数据未保存付款凭证数组');
assert.ok(appJs.includes('10 * 1024 * 1024'), '缺少 10MB 文件大小校验');
console.log('结算单应付付款凭证与审批回归校验通过');