feat(expenses): add authoritative pre-review workflow
This commit is contained in:
51
web/tests/reimbursement-pre-review-service.test.mjs
Normal file
51
web/tests/reimbursement-pre-review-service.test.mjs
Normal file
@@ -0,0 +1,51 @@
|
||||
import assert from 'node:assert/strict'
|
||||
import test from 'node:test'
|
||||
|
||||
import {
|
||||
preReviewExpenseClaim,
|
||||
submitExpenseClaim
|
||||
} from '../src/services/reimbursements.js'
|
||||
|
||||
test('reimbursement service sends pre-review request identity and submit handshake payload', async () => {
|
||||
const requests = []
|
||||
const originalFetch = globalThis.fetch
|
||||
globalThis.fetch = async (url, options = {}) => {
|
||||
requests.push({ url: String(url), options })
|
||||
return {
|
||||
ok: true,
|
||||
status: 200,
|
||||
async json() {
|
||||
return { ok: true }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
await preReviewExpenseClaim('claim / 001', 'pre-review:test-request-001')
|
||||
await submitExpenseClaim('claim / 001', {
|
||||
pre_review_id: 'review-ready-001',
|
||||
input_fingerprint: 'sha256:ready-input'
|
||||
})
|
||||
} finally {
|
||||
globalThis.fetch = originalFetch
|
||||
}
|
||||
|
||||
assert.equal(requests.length, 2)
|
||||
assert.equal(
|
||||
requests[0].url,
|
||||
'/api/v1/reimbursements/claims/claim%20%2F%20001/pre-review'
|
||||
)
|
||||
assert.equal(requests[0].options.method, 'POST')
|
||||
assert.equal(requests[0].options.headers['X-Request-ID'], 'pre-review:test-request-001')
|
||||
assert.equal(requests[0].options.body, '{}')
|
||||
|
||||
assert.equal(
|
||||
requests[1].url,
|
||||
'/api/v1/reimbursements/claims/claim%20%2F%20001/submit'
|
||||
)
|
||||
assert.equal(requests[1].options.method, 'POST')
|
||||
assert.deepEqual(JSON.parse(requests[1].options.body), {
|
||||
pre_review_id: 'review-ready-001',
|
||||
input_fingerprint: 'sha256:ready-input'
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user