Files
X-Financial/web/tests/approval-task-retry-and-route.test.mjs

68 lines
2.0 KiB
JavaScript
Raw Normal View History

import assert from 'node:assert/strict'
import test from 'node:test'
import {
resolveApprovalTaskRetryKey
} from '../src/views/scripts/approvalTaskRetry.js'
import {
appendApprovalTaskRouteQuery,
readApprovalTaskRouteState
} from '../src/views/scripts/approvalTaskRouteState.js'
test('approval retry key is stable only while the idempotent payload stays identical', () => {
const first = resolveApprovalTaskRetryKey({
action: 'approve',
scopeId: 'task-1',
payload: { reason: '核对通过', expectedTaskVersion: 3 }
})
const samePayload = resolveApprovalTaskRetryKey({
action: 'approve',
scopeId: 'task-1',
payload: { expectedTaskVersion: 3, reason: '核对通过' },
previousFingerprint: first.fingerprint,
previousRequestId: first.requestId
})
const editedPayload = resolveApprovalTaskRetryKey({
action: 'approve',
scopeId: 'task-1',
payload: { expectedTaskVersion: 3, reason: '补充核对后通过' },
previousFingerprint: first.fingerprint,
previousRequestId: first.requestId
})
assert.equal(samePayload.requestId, first.requestId)
assert.notEqual(editedPayload.requestId, first.requestId)
})
test('approval task route state restores only supported filters and compact defaults', () => {
const state = readApprovalTaskRouteState({
dc_review_page: '3',
dc_review_page_size: '10',
dc_review_q: ' REIM-100 ',
dc_review_risk: 'high',
dc_review_sla: 'overdue'
})
assert.deepEqual(state, {
page: 3,
pageSize: 10,
filters: { keyword: 'REIM-100', riskLevel: 'high', slaState: 'overdue' }
})
assert.deepEqual(appendApprovalTaskRouteQuery({}, state), {
dc_review_page: '3',
dc_review_page_size: '10',
dc_review_q: 'REIM-100',
dc_review_risk: 'high',
dc_review_sla: 'overdue'
})
assert.deepEqual(readApprovalTaskRouteState({
dc_review_page: '-1',
dc_review_page_size: '200',
dc_review_risk: 'unknown',
dc_review_sla: 'near_due'
}), {
page: 1,
pageSize: 20,
filters: { keyword: '', riskLevel: '', slaState: '' }
})
})