test: synchronize initialization and dependency contracts
This commit is contained in:
@@ -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"\)/)
|
||||
})
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
"services": 15
|
||||
},
|
||||
"openapi": {
|
||||
"documents": 48,
|
||||
"documents": 49,
|
||||
"coveredServices": 10,
|
||||
"codeFirstServices": 5
|
||||
},
|
||||
|
||||
@@ -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'
|
||||
] }
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user