test: synchronize initialization and dependency contracts

This commit is contained in:
2026-09-15 14:58:26 +08:00
parent c65389b2c2
commit 7edea222d8
9 changed files with 49 additions and 25 deletions
@@ -159,6 +159,12 @@ test('海外空库基线为固定平台管理员提供完整version0授权投影
assert.equal(inline.replace(/\r\n/g, '\n').trim(), lastlegBaseline.replace(/\r\n/g, '\n').trim())
})
test('当前海外基线不从废弃申请回填历史尾程订单', () => {
for (const source of [lastlegBaseline, overseasSql]) {
assert.doesNotMatch(source, /INSERT IGNORE INTO ll_order\s*\([\s\S]*?SELECT a\.id,a\.discard_no/)
}
})
test('国内统一初始化补齐入库费用人工调整基线字段', () => {
assert.match(sql, /baseline_chargeable_quantity DECIMAL\(18,6\) NOT NULL/)
assert.match(sql, /SET baseline_chargeable_quantity = chargeable_quantity[\s\S]*?WHERE baseline_chargeable_quantity IS NULL/)
@@ -44,7 +44,7 @@ test('backend never appends a generic STATUS_UPDATE and current operation replay
assert.match(smartLoadingTest, /void replaysBeforeVersionCheck\(\)/)
assert.match(smartLoadingTest, /void exactWarehouseRemarkReplayIsReadOnly\(\)/)
assert.match(smartLoadingTest, /replaysBeforeVersionCheck[\s\S]{0,1200}verify\(repository, never\(\)\)\.candidate/)
assert.match(smartLoadingTest, /exactWarehouseRemarkReplayIsReadOnly[\s\S]{0,1200}verify\(repository, never\(\)\)\.updateWarehouseRemark/)
assert.match(smartLoadingTest, /exactWarehouseRemarkReplayIsReadOnly[\s\S]{0,1200}verify\(repository, never\(\)\)\.updateRemarks/)
})
test('operationId is projected end-to-end for identity-based frontend deduplication', () => {
@@ -14,10 +14,17 @@ test('manual matrix retains only DRAFT and RELEASED ocean booking states', () =>
test('truck matrix remains independent while retaining its own lifecycle', () => {
for (const status of ['DRAFT', 'PENDING_DISPATCH', 'DISPATCHED', 'PICKUP_IN_PROGRESS',
'ARRIVED_WAREHOUSE', 'LOADING', 'DEPARTED', 'COMPLETED', 'RESCHEDULED', 'EXCEPTION', 'CANCELLED']) {
'ARRIVED_WAREHOUSE', 'LOADING', 'RESCHEDULED', 'EXCEPTION', 'CANCELLED']) {
assert.match(source, new RegExp(`['\"]${status}['\"]`))
}
assert.match(source, /page=1&size=100&status=/)
assert.match(source, /category=TRUCKING&status=ACTIVE/)
assert.match(source, /carrierId: id\(carrier\.id\), carrierName: carrier\.name/)
const completion = readFileSync(new URL('../../firstleg/src/main/java/com/baiyue/firstleg/service/TruckAppointmentCompletionService.java', import.meta.url), 'utf8')
const statuses = readFileSync(new URL('../../firstleg/src/main/java/com/baiyue/firstleg/domain/TruckAppointmentStatus.java', import.meta.url), 'utf8')
assert.doesNotMatch(statuses, /\bDEPARTED\b/)
assert.match(statuses, /\bCOMPLETED\b/)
assert.match(completion, /if \(!allDeparted\(rows\)\) return/)
assert.match(completion, /history\.setAction\("AUTO_COMPLETE"\)/)
assert.match(completion, /history\.setToStatus\("COMPLETED"\)/)
})
+1 -1
View File
@@ -11,7 +11,7 @@
"services": 15
},
"openapi": {
"documents": 48,
"documents": 49,
"coveredServices": 10,
"codeFirstServices": 5
},
+2 -1
View File
@@ -65,7 +65,8 @@ test('repository freezes the current topology and non-blocking aggregate summary
const summary = await buildQualitySummary(repositoryRoot)
const baseline = JSON.parse(await readFile(path.join(repositoryRoot, 'scripts', 'java-quality-baseline.json'), 'utf8'))
assert.deepEqual(summary.topology, { modules: 22, codeModules: 21, services: 15 })
assert.equal(summary.openapi.documents, 48)
assert.equal(summary.openapi.documents, 49)
assert.ok(summary.openapi.files.includes('file/src/main/resources/openapi/loading-evidence-v1.yaml'))
assert.ok(summary.openapi.files.includes('file/src/main/resources/openapi/overseas-relabel-document-v1.yaml'))
assert.ok(summary.openapi.files.includes('finance/src/main/resources/openapi/finance-container-settlement-v1.yaml'))
assert.ok(summary.openapi.files.includes('warehouse-overseas-service/src/main/resources/openapi/warehouse-pallet-batch-internal-v1.yaml'))
@@ -76,6 +76,8 @@ export const SYNCHRONOUS_CLIENTS = Object.freeze([
'在线测量/箱号/排柜读取;Order 审核 Outbox 创建 Firstleg 入库及箱号时也会后台回读订单货物'),
feign('firstleg/src/main/java/com/baiyue/firstleg/client/OrderFulfillmentSplitClient.java',
'firstleg-service', 'order-service', ['REQUEST'], 'WRITE', 'IDEMPOTENCY_KEY', 'PDA 结算拆单携带 idempotencyKey/operationId'),
feign('firstleg/src/main/java/com/baiyue/firstleg/client/OrderFulfillmentCompletionClient.java',
'firstleg-service', 'order-service', ['BACKGROUND'], 'WRITE', 'EVENT_ID', '海外派送完成事件按 eventId/payloadHash 幂等确认来源订单完成'),
feign('firstleg/src/main/java/com/baiyue/firstleg/client/PendingReviewOrderClient.java',
'firstleg-service', 'order-service', ['REQUEST'], 'READ', 'SAFE_READ', '智能排柜分页读取待审核订单投影'),
feign('firstleg/src/main/java/com/baiyue/firstleg/client/PriceBookFileClient.java',
@@ -117,6 +119,8 @@ export const SYNCHRONOUS_CLIENTS = Object.freeze([
'lastleg-service', 'warehouse-service', ['REQUEST'], 'READ', 'SAFE_READ', '读取国内共享仓库权威目录'),
feign('lastleg-service/src/main/java/com/baiyue/lastleg/masterdata/quote/client/DomesticPartnerWarehouseClient.java',
'lastleg-service', 'warehouse-service', ['REQUEST'], 'READ', 'SAFE_READ', '报价创建时读取国内合作仓快照'),
feign('warehouse-overseas-service/src/main/java/com/baiyue/warehouse/client/PrintPdfClient.java',
'warehouse-overseas-service', 'print-service', ['REQUEST'], 'READ', 'SAFE_READ', '按已授权托盘生成标签PDF,内部令牌保护,无业务状态写入'),
feign('warehouse-overseas-service/src/main/java/com/baiyue/warehouse/client/DomesticWarehouseDirectoryClient.java',
'warehouse-overseas-service', 'warehouse-service', ['REQUEST'], 'READ', 'SAFE_READ',
'海外库位、托盘和资源锁写入前读取国内共享收货仓权威目录'),
@@ -167,6 +171,8 @@ export const SYNCHRONOUS_CLIENTS = Object.freeze([
'lastleg-service', 'file-service', ['REQUEST'], 'READ_WRITE', 'MIXED', '异常处理证据上传无幂等键,归属校验可重复'),
http('lastleg-service/src/main/java/com/baiyue/lastleg/inboundplan/pda/gateway/HttpUnloadPhotoFileGateway.java',
'lastleg-service', 'file-service', ['REQUEST'], 'READ_WRITE', 'MIXED', '上传无幂等键,元数据校验可重复'),
http('lastleg-service/src/main/java/com/baiyue/lastleg/inboundplan/pda/gateway/HttpDomesticLoadingEvidenceGateway.java',
'lastleg-service', 'file-service', ['REQUEST'], 'READ', 'SAFE_READ', '当前PDA会话校验来源柜后,通过内部服务令牌只读下载国内装柜照片'),
http('lastleg-service/src/main/java/com/baiyue/lastleg/inboundplan/pda/gateway/HttpWarehouseResourceGateway.java',
'lastleg-service', 'warehouse-overseas-service', ['REQUEST'], 'READ_WRITE', 'MIXED', '查询可重复;写操作按 business/reservation key 或状态收敛'),
http('lastleg-service/src/main/java/com/baiyue/lastleg/palletops/gateway/HttpPalletPhysicalGateway.java',
@@ -42,6 +42,7 @@ const expectedOnlineEdges = [
'order-service->firstleg-service',
'order-service->iam-service',
'order-service->warehouse-service',
'warehouse-overseas-service->print-service',
'warehouse-overseas-service->warehouse-service'
]
@@ -100,15 +101,15 @@ async function discoverFeignEdges() {
return clients.sort((left, right) => left.path.localeCompare(right.path))
}
test('all 58 Feign clients have reviewed context, access and idempotency metadata', async () => {
test('all 60 Feign clients have reviewed context, access and idempotency metadata', async () => {
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, 58)
assert.equal(reviewed.length, 60)
assert.deepEqual(await discoverFeignEdges(), reviewed)
})
test('all 22 raw HTTP transports have reviewed context, access and idempotency metadata', async () => {
test('all 23 raw HTTP transports have reviewed context, access and idempotency metadata', async () => {
const discovered = []
for (const module of ['common-audit', 'event-bridge-service', 'gateway-overseas', 'lastleg-service', 'integration-service']) {
for (const file of await javaFiles(path.join(root, module, 'src', 'main', 'java'))) {
@@ -120,7 +121,7 @@ test('all 22 raw HTTP transports have reviewed context, access and idempotency m
}
const reviewed = SYNCHRONOUS_CLIENTS.filter(client => client.transport === 'HTTP')
.map(client => client.path).sort()
assert.equal(reviewed.length, 22)
assert.equal(reviewed.length, 23)
assert.deepEqual(discovered.sort(), reviewed)
})
@@ -271,6 +272,7 @@ test('known user entries expose every longest simple REQUEST path over the two-h
] },
'warehouse-service': { hops: 0, paths: ['warehouse-service'] },
'warehouse-overseas-service': { hops: 1, paths: [
'warehouse-overseas-service->print-service',
'warehouse-overseas-service->warehouse-service'
] }
})