fix(test): require precise database lock conflict during rollback

This commit is contained in:
2026-10-04 10:44:33 +08:00
parent ba4179b28c
commit 446fad33d0
2 changed files with 13 additions and 3 deletions
@@ -1,6 +1,6 @@
import test from 'node:test'
import assert from 'node:assert/strict'
import { validateRollbackScope, rollbackSql, buildRollbackRemoteScript, assertMidTransactionObservation, runTripRollback, requestRollbackDeparture } from './fleet-trip-rollback-test-env.mjs'
import { validateRollbackScope, rollbackSql, buildRollbackRemoteScript, assertMidTransactionObservation, runTripRollback, requestRollbackDeparture, assertDatabaseLockConflict } from './fleet-trip-rollback-test-env.mjs'
const scope={marker:'OWN_RUN',tripNo:'TR-OWN',firstCustomerId:'101',secondCustomerId:'102',firstDispatchId:'201',secondDispatchId:'202',firstOutboundId:'301',secondPalletId:'401',firstDispatchNo:'DS-OWN',expectedImage:'sha256:'+'a'.repeat(64)}
const rows=()=>[{collection:'lease',connectionId:11,lockId:'99'},{collection:'wait',requester:12,blocker:11,lockId:'99'},
{collection:'firstDispatch',id:'201',status:'DEPARTED',shipped:1},{collection:'firstOutbound',id:'301',status:'OUTBOUNDED'},{collection:'firstReplay',count:1}]
@@ -10,6 +10,12 @@ test('fault request allows database timeout and never retries an unknown write',
assert.equal((await requestRollbackDeparture(context,'/owned/depart',body,'owned-token')).http,0)
assert.deepEqual(calls,[['POST','/owned/depart',body,'owned-token']])
})
test('database conflict requires exact handler response and trace, not arbitrary rejection',()=>{
const response={http:200,body:{code:'A0409',message:'资源正在处理中,请稍后重试'},requestId:'request',traceId:'trace'}
assert.doesNotThrow(()=>assertDatabaseLockConflict(response))
for(const wrong of [{http:0},{http:500},{body:{code:'S0500',message:'error'}},{body:{code:'A0409',message:'请完成拣货'}},{traceId:null}])
assert.throws(()=>assertDatabaseLockConflict({...response,...wrong}))
})
test('plan and import are network-free; execution rejects missing TEST profile before any network',async()=>{
const plan=await runTripRollback({execute:false},{env:{}})
assert.equal(plan.businessSqlWrites,false);assert.equal(plan.deployment,false)