fix(pda): discard failed ordinary photo drafts

This commit is contained in:
2026-10-23 02:39:14 +08:00
parent 51109ac852
commit 81f63e5d26
2 changed files with 34 additions and 0 deletions
+30
View File
@@ -90,3 +90,33 @@ test('photo failure releases the page and another click uploads the current phot
assert.equal(state.evidenceUploading, false); assert.equal(requests[1][3], 'new.jpg'); assert.equal(requests[1][2].sealNo, 'NEW')
assert.notEqual(requests[1][2].operationId, requests[0][2].operationId)
})
test('failed ordinary photo is removed from the visible and restored draft without deleting saved evidence', async () => {
const uploadMethod = page.slice(page.indexOf('async queueEvidenceUpload('), page.indexOf('async saveSealNo('))
const draftMethods = page.slice(page.indexOf('evidenceDraftKey(identity)'), page.indexOf('requireEvidenceCapture() {'))
const behavior = new Function('isRemoteReady', 'uploadEvidenceFile', 'return ({' + draftMethods + uploadMethod + '})')(
() => true, async () => { throw new Error('upload failed') }
)
const saved = { id: 'saved-photo', fileId: 'saved-file', localPath: 'saved.jpg' }
const failed = { localPath: 'failed.jpg', uploadStatus: 'PENDING' }
const seal = { localPath: 'seal.jpg', uploadStatus: 'PENDING' }
const state = {
...behavior, evidenceUploading: false, evidenceReadOnly: false,
evidenceIdentity: { taskId: 'task', warehouseId: 'warehouse' }, evidenceContextId: 1,
evidenceQueueItems: [], evidenceDrafts: {}, sealNo: 'SEAL-A',
evidenceFiles: { PHOTO_STEP_1: [saved, failed], SEAL: [seal] },
validEvidenceEntries: () => [saved], isEvidenceContextActive: () => true,
remoteFailureMessage: error => error.message, showToast() {}
}
state.rememberEvidenceDraft()
await state.queueEvidenceUpload('PHOTO_STEP_1', 'failed.jpg')
assert.deepEqual(state.evidenceFiles.PHOTO_STEP_1, [saved])
assert.equal(state.evidenceUploading, false)
assert.equal(state.remoteError, 'upload failed')
state.restoreEvidenceDraft()
assert.equal(state.evidenceFiles.PHOTO_STEP_1, undefined)
assert.deepEqual(state.evidenceFiles.SEAL, [seal])
await state.queueEvidenceUpload('SEAL', 'seal.jpg', 'SEAL-A')
assert.deepEqual(state.evidenceFiles.SEAL, [seal])
assert.equal(state.evidenceUploading, false)
})