import test from 'node:test' import assert from 'node:assert/strict' import { verifyProcurementSample } from './procurement-sample-fulfillment.mjs' function fixture() { const events = [] const context = { marker: 'PROC-TEST', token: 'admin-token', createdResources: {}, async checkpoint() { events.push('checkpoint') }, async request(method, path) { events.push(`${method} ${path}`); throw new Error('network outcome unknown') } } const inputs = { marker: context.marker, customerId: '101', warehouseId: '201', customerName: 'QA', customerToken: 'customer-token', async upload() { throw new Error('must not upload yet') }, async readWallet() { return { actualBalance: '10.00', availableBalance: '10.00', frozenBalance: '0.00', creditUsed: '0.00' } } } return { context, inputs, events } } test('missing owned fixture is rejected before any HTTP', async () => { const { context, inputs, events } = fixture() inputs.marker = 'other-run' await assert.rejects(verifyProcurementSample(context, inputs), /本轮独立客户/) assert.deepEqual(events, []) }) test('insufficient independent cash stops before creating an order', async () => { const { context, inputs, events } = fixture() inputs.readWallet = async () => ({ actualBalance: '1.00', availableBalance: '1.00', frozenBalance: '0.00', creditUsed: '0.00' }) await assert.rejects(verifyProcurementSample(context, inputs), /现金余额/) assert.equal(events.some(event => event.startsWith('POST')), false) assert.equal(context.createdResources.procurementSample.status, 'FAILED') }) test('unknown create outcome is persisted and never automatically retried', async () => { const { context, inputs, events } = fixture() await assert.rejects(verifyProcurementSample(context, inputs), /network outcome unknown/) const proof = context.createdResources.procurementSample assert.equal(proof.requests.length, 1) assert.equal(proof.requests[0].status, 'UNKNOWN_RESULT') assert.ok(proof.requests[0].body.idempotencyKey) assert.equal(events.filter(event => event.startsWith('POST')).length, 1) const write = events.findIndex(event => event.startsWith('POST')) assert.equal(events[write - 1], 'checkpoint') assert.equal(JSON.stringify(proof).includes('customer-token'), false) await assert.rejects(verifyProcurementSample(context, inputs), /不自动重跑/) }) test('failure to persist the request prevents network dispatch', async () => { const { context, inputs, events } = fixture() context.checkpoint = async () => { throw new Error('disk write failed') } await assert.rejects(verifyProcurementSample(context, inputs), /disk write failed/) assert.equal(events.length, 0) })