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

67 lines
3.4 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 shellHtml = fs.readFileSync(path.join(root, 'prototype-src/shell.html'), 'utf8');
const appJs = fs.readFileSync(path.join(root, 'prototype-src/app.js'), 'utf8');
assert.ok(moduleHtml.includes('<th>客户是否确认</th>'), '客户对账单列表缺少客户是否确认列');
assert.ok(shellHtml.includes('.recon-action-link'), '缺少对账单紧凑操作样式');
assert.ok(appJs.includes('pushReconStmtToCustomer'), '缺少推送给客户动作');
assert.ok(appJs.includes('createSettlementFromReconStmt'), '缺少对账单生成结算单动作');
assert.ok(appJs.includes('客户确认后才可结算'), '缺少结算门槛提示');
assert.ok(appJs.includes("customerConfirmStatus:'待确认'"), '缺少待确认示例对账单');
assert.ok(appJs.includes("customerConfirmStatus:'已确认'"), '缺少已确认示例对账单');
const start = appJs.indexOf('function getReconStmtActionState');
const end = appJs.indexOf('\nfunction reconStmtNowText', start);
assert.ok(start >= 0 && end > start, '缺少可测试的对账单状态函数');
const sandbox = {};
vm.runInNewContext(
appJs.slice(start, end) +
'\nresult={getReconStmtActionState,markReconStmtPushed,buildSettlementFromReconStmt};',
sandbox
);
const api = sandbox.result;
const normalize = value => JSON.parse(JSON.stringify(value));
assert.deepEqual(
normalize(api.getReconStmtActionState({status:'待审核',customerConfirmStatus:'未推送',settlementId:''})),
{canPush:false,canSettle:false,hasSettlement:false}
);
assert.deepEqual(
normalize(api.getReconStmtActionState({status:'审核通过',customerConfirmStatus:'未推送',settlementId:''})),
{canPush:true,canSettle:false,hasSettlement:false}
);
assert.deepEqual(
normalize(api.getReconStmtActionState({status:'审核通过',customerConfirmStatus:'已确认',settlementId:''})),
{canPush:false,canSettle:true,hasSettlement:false}
);
assert.deepEqual(
normalize(api.getReconStmtActionState({status:'审核通过',customerConfirmStatus:'已确认',settlementId:'SAR-202608-009'})),
{canPush:false,canSettle:false,hasSettlement:true}
);
const pushed = {status:'审核通过',customerConfirmStatus:'未推送',pushTime:''};
assert.equal(api.markReconStmtPushed(pushed, '2026-08-14 18:30:00'), true);
assert.equal(pushed.customerConfirmStatus, '待确认');
assert.equal(pushed.pushTime, '2026-08-14 18:30:00');
assert.equal(api.markReconStmtPushed({status:'待审核'}, '2026-08-14 18:30:00'), false);
const source = {
id:'Y2607084',status:'审核通过',customerConfirmStatus:'已确认',
customer:'浙江柏悦贸易有限公司',currency:'CNY',totalAr:98000,paidAr:0,
startDate:'2026-07-01',endDate:'2026-07-31',period:30,creator:'叶珊珊',settlementId:''
};
const settlement = api.buildSettlementFromReconStmt(source, 'SAR-202608-009', '2026-08-14');
assert.equal(settlement.id, 'SAR-202608-009');
assert.equal(settlement.billNo, 'Y2607084');
assert.equal(settlement.balance, 98000);
assert.equal(settlement.status, '草稿');
assert.equal(api.buildSettlementFromReconStmt({...source,customerConfirmStatus:'待确认'}, 'SAR-X', '2026-08-14'), null);
console.log('客户对账单推送、确认状态与结算门槛校验通过');