test(finance): align full acceptance with current workflows

This commit is contained in:
2026-09-01 10:17:03 +08:00
parent 505188c3fd
commit 3d6216910f
6 changed files with 80 additions and 38 deletions
@@ -16,6 +16,7 @@ test('Finance AP consumes only published fin_fee_source rows and never substitut
})
const financePermissions = [
'platform:finance:customer-account:list', 'platform:finance:customer-arap:list',
'platform:finance:fee-source:edit',
'platform:finance:fee-source:review', 'platform:finance:customer-statement:list',
'platform:finance:reconciliation:create', 'platform:finance:reconciliation:review',
'platform:finance:reconciliation:issue', 'platform:finance:reconciliation:adjust',
@@ -61,6 +62,7 @@ function fakeContext(withFixture = true, permissions = financePermissions, denyF
const calls = []
const steps = []
const coverageGaps = []
const submittedSourceIds = new Set()
const reviewedSourceIds = new Set()
function responseForStatement(statement) { return structuredClone(statement) }
@@ -124,14 +126,24 @@ function fakeContext(withFixture = true, permissions = financePermissions, denyF
const feeSourceDetailMatch = requestPath.match(/\/fee-sources\/(\d+)$/)
if (method === 'GET' && feeSourceDetailMatch) {
const localId = feeSourceDetailMatch[1]
return ok({ feeSourceId: localId, reviewStatus: reviewedSourceIds.has(localId) ? 'APPROVED' : 'PENDING',
sourceStatus: 'AVAILABLE', statementGenerated: false, operationVersion: reviewedSourceIds.has(localId) ? 1 : 0 })
return ok({ feeSourceId: localId, reviewStatus: reviewedSourceIds.has(localId) ? 'APPROVED'
: submittedSourceIds.has(localId) ? 'PENDING' : 'DRAFT',
sourceStatus: 'AVAILABLE', statementGenerated: false,
operationVersion: reviewedSourceIds.has(localId) ? 2 : submittedSourceIds.has(localId) ? 1 : 0 })
}
const feeSourceSubmitMatch = requestPath.match(/\/fee-sources\/(\d+)\/submit$/)
if (method === 'POST' && feeSourceSubmitMatch) {
submittedSourceIds.add(feeSourceSubmitMatch[1])
const submitted = { feeSourceId: feeSourceSubmitMatch[1], reviewStatus: 'PENDING',
sourceStatus: 'AVAILABLE', statementGenerated: false, operationVersion: 1 }
if (idem) idempotency.set(idem, submitted)
return ok(submitted)
}
const feeSourceReviewMatch = requestPath.match(/\/fee-sources\/(\d+)\/review$/)
if (method === 'POST' && feeSourceReviewMatch) {
reviewedSourceIds.add(feeSourceReviewMatch[1])
const reviewed = { feeSourceId: feeSourceReviewMatch[1], reviewStatus: 'APPROVED',
sourceStatus: 'AVAILABLE', statementGenerated: false, operationVersion: 1 }
sourceStatus: 'AVAILABLE', statementGenerated: false, operationVersion: 2 }
if (idem) idempotency.set(idem, reviewed)
return ok(reviewed)
}