67 lines
3.4 KiB
JavaScript
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('客户对账单推送、确认状态与结算门槛校验通过');
|