优化
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
const MODULE = 'finance-reconciliation-full'
|
||||
const SCENARIO = 'finance-full-reconciliation'
|
||||
const BASE = '/api/platform/finance/v1'
|
||||
const CLIENT_BASE = '/api/client/finance/v1'
|
||||
const OPTIONS = { scenario: SCENARIO, deploymentBlocker: true }
|
||||
const STATEMENT_LIST_PERMISSION = 'platform:finance:customer-statement:list'
|
||||
const LEGACY_STATEMENT_VIEW_PERMISSION = 'platform:finance:bill:view'
|
||||
@@ -119,6 +120,51 @@ function finish(context, start) {
|
||||
})
|
||||
}
|
||||
|
||||
async function confirmIssuedStatementAsClient(context, fixture, statement) {
|
||||
const username = process.env.MERCHANT_TEST_USERNAME
|
||||
const password = process.env.MERCHANT_TEST_PASSWORD
|
||||
const targetId = statementId(statement)
|
||||
if (!username || !password || !targetId) {
|
||||
context.assert(MODULE, '客户确认对账单凭据与单据门禁', null, false,
|
||||
`username=${username ? 'present' : 'missing'}, password=${password ? 'present' : 'missing'}, statementId=${targetId || 'missing'}`, OPTIONS)
|
||||
return null
|
||||
}
|
||||
const loginResponse = await context.request('POST', '/api/auth/login', { username, password }, '')
|
||||
const login = context.apiSuccess(MODULE, 'Client 客户登录用于确认对账单', loginResponse,
|
||||
`username=${username}`, OPTIONS)
|
||||
const clientToken = login?.accessToken
|
||||
if (!clientToken) return null
|
||||
const listResponse = await context.request('GET', `${CLIENT_BASE}/statements`, undefined, clientToken)
|
||||
const statements = context.apiSuccess(MODULE, 'Client 查询本企业对账单', listResponse,
|
||||
`customerId=${fixture.customerId}, statementId=${targetId}`, OPTIONS)
|
||||
const before = rows(statements).find((item) => statementId(item) === targetId)
|
||||
context.assert(MODULE, 'Client 仅取得本企业待确认已出账对账单', listResponse,
|
||||
id(before?.customerId) === fixture.customerId && before?.status === 'ISSUED'
|
||||
&& before?.customerConfirmationStatus === 'PENDING_CONFIRMATION',
|
||||
`statementId=${statementId(before) || 'missing'}, status=${before?.status ?? 'missing'}, confirmation=${before?.customerConfirmationStatus ?? 'missing'}`, OPTIONS)
|
||||
if (!before) return null
|
||||
const headers = { 'Idempotency-Key': key(context, `client-confirm-${targetId}`) }
|
||||
const body = { expectedVersion: Number(before.version) }
|
||||
const confirmResponse = await context.request('POST',
|
||||
`${CLIENT_BASE}/statements/${encodeURIComponent(targetId)}/confirm`, body, clientToken, headers)
|
||||
const confirmed = context.apiSuccess(MODULE, 'Client 确认本人已出账对账单', confirmResponse,
|
||||
`statementId=${targetId}`, OPTIONS)
|
||||
context.assert(MODULE, '客户确认状态、确认人和版本已落地', confirmResponse,
|
||||
statementId(confirmed) === targetId && confirmed?.confirmationStatus === 'CONFIRMED'
|
||||
&& present(confirmed?.confirmedBy) && present(confirmed?.confirmedByName)
|
||||
&& present(confirmed?.confirmedAt) && Number(confirmed?.version) === Number(before.version) + 1,
|
||||
`statementId=${statementId(confirmed) || 'missing'}, confirmation=${confirmed?.confirmationStatus ?? 'missing'}, version=${confirmed?.version ?? 'missing'}`, OPTIONS)
|
||||
const replayResponse = await context.request('POST',
|
||||
`${CLIENT_BASE}/statements/${encodeURIComponent(targetId)}/confirm`, body, clientToken, headers)
|
||||
const replay = context.apiSuccess(MODULE, 'Client 客户确认幂等重放', replayResponse,
|
||||
`statementId=${targetId}`, OPTIONS)
|
||||
context.assert(MODULE, '客户确认幂等不重复递增版本', replayResponse,
|
||||
statementId(replay) === targetId && Number(replay?.version) === Number(confirmed?.version),
|
||||
`firstVersion=${confirmed?.version ?? 'missing'}, replayVersion=${replay?.version ?? 'missing'}`, OPTIONS)
|
||||
fixture.root.clientConfirmation = confirmed
|
||||
return confirmed
|
||||
}
|
||||
|
||||
async function approveFixtureSources(context, fixture) {
|
||||
const approved = []
|
||||
for (const source of fixture.sources) {
|
||||
@@ -539,6 +585,8 @@ export async function run(context) {
|
||||
}
|
||||
}
|
||||
|
||||
await confirmIssuedStatementAsClient(context, fixture, issuedStatements[0])
|
||||
|
||||
const receivableSettlements = []
|
||||
for (let index = 0; index < issuedStatements.length; index += 1) {
|
||||
const settlement = await createReceivable(context, issuedStatements[index], index + 1)
|
||||
|
||||
Reference in New Issue
Block a user