feat(M08-B): 补微信转账预检

This commit is contained in:
Codex
2026-06-29 11:23:49 +08:00
parent 1fada09249
commit 9506021b29
14 changed files with 410 additions and 22 deletions
+30 -1
View File
@@ -24,6 +24,34 @@ const actor = {
traceId: 'cleaning-payout-test'
};
{
const harness = createHarness({});
const result = await harness.service.preflightWechatTransfer({
...actor,
settlementId: '501'
});
assert.equal(result.ready, true);
assert.equal(result.account.merchantIdMasked, '19***0109');
assert.equal(result.credential.reportInfoCount, 1);
assert.equal(result.cleaner.openidConfigured, true);
assert.equal(result.checks.find((item) => item.key === 'transfer_scene_id').status, 'PASS');
}
{
const harness = createHarness({
credentialPatch: { transferSceneId: '', transferSceneReportInfos: [] },
openid: ''
});
const result = await harness.service.preflightWechatTransfer({
...actor,
settlementId: '501'
});
assert.equal(result.ready, false);
assert.equal(result.checks.find((item) => item.key === 'transfer_scene_id').status, 'FAIL');
assert.equal(result.checks.find((item) => item.key === 'transfer_scene_report_infos').status, 'WARN');
assert.equal(result.checks.find((item) => item.key === 'cleaner_openid').status, 'FAIL');
}
{
const harness = createHarness({ transferState: 'SUCCESS' });
const result = await harness.service.executeWechatTransfer({
@@ -176,7 +204,7 @@ function createHarness(options = {}) {
return [[state.account], []];
}
if (sql.includes('FROM qipai_user_identities')) {
return [[{ openid: 'openid-cleaner' }], []];
return [options.openid === '' ? [] : [{ openid: options.openid ?? 'openid-cleaner' }], []];
}
throw new Error(`Unexpected SQL: ${sql}`);
}
@@ -235,6 +263,7 @@ function createHarness(options = {}) {
transferSceneId: '1000',
transferSceneReportInfos: [{ infoType: '岗位类型', infoContent: '保洁员' }]
};
Object.assign(credential, options.credentialPatch ?? {});
return {
state,
repository,
+22
View File
@@ -152,6 +152,17 @@ const app = await buildApp({
}
},
payoutService: {
async preflightWechatTransfer(input) {
calls.push(['preflightWechatTransfer', input]);
return {
ready: true,
settlement: { id: input.settlementId, settlementNo: 'CLS-501', status: 'CONFIRMED' },
account: { configured: true, merchantIdMasked: '19***0109' },
credential: { configured: true, transferSceneId: '1000', reportInfoCount: 1 },
cleaner: { openidConfigured: true },
checks: [{ key: 'transfer_scene_id', status: 'PASS', message: 'ok' }]
};
},
async executeWechatTransfer(input) {
calls.push(['executeWechatTransfer', input]);
return {
@@ -419,6 +430,17 @@ assert.equal(calls.at(-1)[0], 'executeWechatTransfer');
assert.equal(calls.at(-1)[1].settlementId, '501');
assert.equal(calls.at(-1)[1].mode, 'API');
const wechatTransferPreflight = await app.inject({
method: 'GET',
url: '/admin-api/cleaning/settlements/501/wechat-transfer/preflight',
headers: { authorization: `Bearer ${token}` }
});
assert.equal(wechatTransferPreflight.statusCode, 200);
assert.equal(wechatTransferPreflight.json().data.ready, true);
assert.equal(wechatTransferPreflight.json().data.account.merchantIdMasked, '19***0109');
assert.equal(calls.at(-1)[0], 'preflightWechatTransfer');
assert.equal(calls.at(-1)[1].settlementId, '501');
const syncedWechatTransfer = await app.inject({
method: 'POST',
url: '/admin-api/cleaning/settlements/501/wechat-transfer/sync',