feat(fleet): enforce reviewed trips and original fee coverage for dispatch
This commit is contained in:
@@ -32,6 +32,8 @@ const expectedOnlineEdges = [
|
||||
'iam-service->auth-service',
|
||||
'iam-service->warehouse-service',
|
||||
'lastleg-service->file-service',
|
||||
'lastleg-service->finance-service',
|
||||
'lastleg-service->iam-service',
|
||||
'lastleg-service->print-service',
|
||||
'lastleg-service->warehouse-overseas-service',
|
||||
'lastleg-service->warehouse-service',
|
||||
@@ -100,7 +102,7 @@ test('all Feign clients have reviewed context, access and idempotency metadata',
|
||||
const reviewed = SYNCHRONOUS_CLIENTS.filter(client => client.transport === 'FEIGN')
|
||||
.map(({ path, source, target }) => ({ path, source, target }))
|
||||
.sort((left, right) => left.path.localeCompare(right.path))
|
||||
assert.equal(reviewed.length, 63)
|
||||
assert.equal(reviewed.length, 66)
|
||||
assert.deepEqual(await discoverFeignEdges(), reviewed)
|
||||
})
|
||||
|
||||
@@ -116,7 +118,7 @@ test('all raw HTTP transports have reviewed context, access and idempotency meta
|
||||
}
|
||||
const reviewed = SYNCHRONOUS_CLIENTS.filter(client => client.transport === 'HTTP')
|
||||
.map(client => client.path).sort()
|
||||
assert.equal(reviewed.length, 22)
|
||||
assert.equal(reviewed.length, 24)
|
||||
assert.deepEqual(discovered.sort(), reviewed)
|
||||
})
|
||||
|
||||
@@ -206,7 +208,11 @@ test('unified authority checks remain infrastructure edges and direct events rem
|
||||
assert.ok(graphEdges('INFRASTRUCTURE').includes('gateway->auth-service'))
|
||||
assert.ok(graphEdges('INFRASTRUCTURE').includes('common-security->auth-service'))
|
||||
assert.ok(graphEdges('BACKGROUND').includes('lastleg-service->finance-service'))
|
||||
assert.ok(!graphEdges('REQUEST').includes('lastleg-service->finance-service'))
|
||||
const financeReads = SYNCHRONOUS_CLIENTS.filter(client => client.source === 'lastleg-service'
|
||||
&& client.target === 'finance-service' && client.contexts.includes('REQUEST'))
|
||||
assert.deepEqual(financeReads.map(client => [client.path, client.access, client.idempotency]), [[
|
||||
'lastleg-service/src/main/java/com/baiyue/lastleg/client/FinanceFeeCoverageClient.java', 'READ', 'SAFE_READ'
|
||||
]])
|
||||
assert.ok(!SYNCHRONOUS_CLIENTS.some(client => ['event-bridge-service','gateway-overseas'].includes(client.source) || ['event-bridge-service','gateway-overseas'].includes(client.target)))
|
||||
})
|
||||
|
||||
@@ -264,9 +270,9 @@ test('known user entries expose every longest simple REQUEST path over the two-h
|
||||
'file-service->iam-service->auth-service',
|
||||
'file-service->iam-service->warehouse-service'
|
||||
] },
|
||||
'lastleg-service': { hops: 3, paths: [
|
||||
'lastleg-service->file-service->iam-service->auth-service',
|
||||
'lastleg-service->file-service->iam-service->warehouse-service'
|
||||
'lastleg-service': { hops: 6, paths: [
|
||||
'lastleg-service->finance-service->firstleg-service->order-service->file-service->iam-service->auth-service',
|
||||
'lastleg-service->finance-service->firstleg-service->order-service->file-service->iam-service->warehouse-service'
|
||||
] },
|
||||
'warehouse-service': { hops: 0, paths: ['warehouse-service'] },
|
||||
'warehouse-overseas-service': { hops: 1, paths: [
|
||||
@@ -280,6 +286,16 @@ test('known user entries expose every longest simple REQUEST path over the two-h
|
||||
}
|
||||
})
|
||||
|
||||
test('delivery fee coverage is a single readonly Finance hop and cannot write financial state', async () => {
|
||||
const client = await readFile(path.join(root, 'lastleg-service/src/main/java/com/baiyue/lastleg/client/FinanceFeeCoverageClient.java'), 'utf8')
|
||||
const service = await readFile(path.join(root, 'finance/src/main/java/com/baiyue/finance/service/DeliveryFeeCoverageQueryService.java'), 'utf8')
|
||||
assert.equal([...client.matchAll(/@(?:Get|Post|Put|Delete|Patch)Mapping/g)].length, 1)
|
||||
assert.ok(client.includes('/internal/finance/v1/delivery-fee-coverage/sources'))
|
||||
assert.ok(service.includes('@Transactional(readOnly = true)'))
|
||||
assert.ok(!/\.client\.|Feign|RestClient|WebClient|HttpClient|jdbc\.update|\.execute\(/.test(service))
|
||||
assert.ok(service.includes("f.customer_id=:customerId AND f.inbound_id IN (:inboundIds)"))
|
||||
})
|
||||
|
||||
test('shared Feign timeout defaults and long-running export overrides do not drift silently', async () => {
|
||||
for (const profile of ['test']) {
|
||||
const source = await readFile(path.join(root, 'config', 'nacos', profile, 'baiyue-common.yml'), 'utf8')
|
||||
|
||||
Reference in New Issue
Block a user