68 lines
2.0 KiB
JavaScript
68 lines
2.0 KiB
JavaScript
|
|
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: '' }
|
||
|
|
})
|
||
|
|
})
|