53 lines
2.9 KiB
JavaScript
53 lines
2.9 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');
|
|
|
|
assert.ok(moduleHtml.includes('onclick="openArapForm()"'), '新增按钮未接通');
|
|
assert.ok(moduleHtml.includes('id="arap-detail-edit-btn"'), '详情页缺少编辑按钮 ID');
|
|
['待审核', '审核通过', '审核驳回'].forEach(status => {
|
|
assert.ok(moduleHtml.includes(`<option>${status}</option>`), `筛选项缺少 ${status}`);
|
|
});
|
|
assert.ok(overlays.includes('id="modal-arap-form"'), '缺少新增编辑弹框');
|
|
assert.ok(overlays.includes('id="modal-arap-audit"'), '缺少审核弹框');
|
|
[
|
|
'arap-form-customer', 'arap-form-join-settle', 'arap-form-type',
|
|
'arap-form-wh-code', 'arap-form-order-status', 'arap-form-dispatch-no',
|
|
'arap-form-fee-type', 'arap-form-container-no', 'arap-form-cabinet-no'
|
|
].forEach(id => assert.ok(overlays.includes(`id="${id}"`), `表单缺少字段 ${id}`));
|
|
|
|
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 getActionState = loadFunction('getArapActionState', 'getArapStatusAfterSave');
|
|
const getStatusAfterSave = loadFunction('getArapStatusAfterSave', 'getArapAuditStatus');
|
|
const getAuditStatus = loadFunction('getArapAuditStatus', 'appendArapLog');
|
|
const normalize = value => JSON.parse(JSON.stringify(value));
|
|
|
|
assert.deepEqual(normalize(getActionState('待审核')), {canEdit:true, canAudit:true});
|
|
assert.deepEqual(normalize(getActionState('审核通过')), {canEdit:false, canAudit:false});
|
|
assert.deepEqual(normalize(getActionState('审核驳回')), {canEdit:true, canAudit:false});
|
|
assert.equal(getStatusAfterSave('new'), '待审核');
|
|
assert.equal(getStatusAfterSave('edit'), '待审核');
|
|
assert.equal(getAuditStatus('pass'), '审核通过');
|
|
assert.equal(getAuditStatus('reject'), '审核驳回');
|
|
|
|
assert.ok(appJs.includes("if(!state.canEdit)"), '编辑函数缺少通过状态的函数层锁定');
|
|
assert.ok(appJs.includes("if(!state.canAudit)"), '审核函数缺少状态校验');
|
|
assert.ok(appJs.includes("驳回原因不能为空"), '缺少驳回原因必填校验');
|
|
assert.ok(appJs.includes("style.display=actionState.canEdit?'inline-flex':'none'"), '详情页未同步编辑锁定状态');
|
|
assert.ok(appJs.includes('var logs=Array.isArray(d.logs)?d.logs:[]'), '详情页未读取真实操作日志');
|
|
|
|
console.log('客户应收应付新增、编辑与审核回归校验通过');
|