This commit is contained in:
2026-09-09 17:42:26 +08:00
parent 2b0e66ca7e
commit 88b489eb77
29 changed files with 1195 additions and 909 deletions
@@ -9,6 +9,7 @@ const sqlPath = resolve(warehouseRoot, 'src/main/resources/db/warehouse-public-m
const acceptedPath = resolve(warehouseRoot, 'src/main/resources/db/master-data/fba-public-addresses.accepted.csv')
const rejectedPath = resolve(warehouseRoot, 'src/main/resources/db/master-data/fba-public-addresses.rejected.csv')
const fixedWarehousePath = resolve(warehouseRoot, 'src/main/resources/db/master-data/platform-fixed-warehouses.csv')
const unifiedSqlPath = resolve(warehouseRoot, '..', 'deploy/sql/头程数据库统一增量-MySQL8.sql')
function parseCsv(text) {
const rows = []
@@ -49,25 +50,22 @@ function parseCsv(text) {
}
const sql = readFileSync(sqlPath, 'utf8')
const unifiedSql = readFileSync(unifiedSqlPath, 'utf8')
const accepted = parseCsv(readFileSync(acceptedPath, 'utf8'))
const rejected = parseCsv(readFileSync(rejectedPath, 'utf8'))
const fixedWarehouses = parseCsv(readFileSync(fixedWarehousePath, 'utf8'))
assert.equal(accepted.length, 252)
assert.equal(rejected.length, 54)
assert.equal(accepted.length, 314)
assert.equal(rejected.length, 0)
assert.equal(fixedWarehouses.length, 4)
const codes = new Set()
const warehouseIds = new Set()
const addressIds = new Set()
for (const row of accepted) {
assert.match(row.warehouse_code, /^[A-Z0-9]{3,5}$/)
assert.ok(row.warehouse_code.trim())
assert.equal(row.warehouse_code, row.warehouse_code.trim().toUpperCase())
assert.ok(row.city.trim())
assert.ok(row.state_province.trim())
assert.ok(row.address_line1.trim())
assert.ok(row.postal_code.trim())
assert.ok(row.timezone.trim())
if (row.source_internal_id) assert.match(row.source_internal_id, /^[A-Z0-9]{1,16}$/)
assert.equal(row.country_code, 'US')
assert.ok(!codes.has(row.warehouse_code), `duplicate code ${row.warehouse_code}`)
assert.ok(!warehouseIds.has(row.warehouse_id_seed), `duplicate warehouse id ${row.warehouse_id_seed}`)
@@ -75,10 +73,15 @@ for (const row of accepted) {
codes.add(row.warehouse_code)
warehouseIds.add(row.warehouse_id_seed)
addressIds.add(row.address_id_seed)
const internalCode = row.source_internal_id ? `'${row.source_internal_id}'` : 'NULL'
const tuplePrefix = `(${row.warehouse_id_seed},${row.address_id_seed},'${row.warehouse_code}','${row.warehouse_name}',${internalCode},`
assert.ok(sql.includes(tuplePrefix), `standalone SQL missing ${row.warehouse_code}`)
assert.ok(unifiedSql.includes(tuplePrefix), `unified SQL missing ${row.warehouse_code}`)
}
assert.ok(rejected.some((row) => row.reject_reason.includes('non_fba_business_node')))
assert.equal(rejected.filter((row) => row.reject_reason.includes('timezone_pending_confirmation')).length, 1)
assert.ok(accepted.some((row) => row.warehouse_code === 'FEDEX' && row.city === ''))
assert.ok(accepted.some((row) => row.warehouse_code === '纽约仓一件代发' && row.source_internal_id === 'NJDF'))
assert.equal(accepted.filter((row) => row.source_internal_id === '83').length, 2)
assert.deepEqual(fixedWarehouses.map((row) => row.warehouse_code), [
'CN-YIWU-01',
@@ -105,7 +108,9 @@ assert.match(sql, /FROM tmp_wh_fixed_platform_warehouse source[\s\S]+ON DUPLICAT
assert.match(sql, /CREATE TEMPORARY TABLE tmp_wh_fba_public_master_data/)
assert.match(sql, /JOIN wh_warehouse warehouse\s+ON warehouse\.tenant_id = 0\s+AND warehouse\.warehouse_code = source\.warehouse_code/s)
assert.match(sql, /ON DUPLICATE KEY UPDATE\s+warehouse_type = VALUES\(warehouse_type\),\s+country_code = VALUES\(country_code\),\s+timezone = VALUES\(timezone\),\s+updated_at = CURRENT_TIMESTAMP\(3\);/s)
assert.match(sql, /ON DUPLICATE KEY UPDATE\s+internal_code = VALUES\(internal_code\),\s+warehouse_type = VALUES\(warehouse_type\),\s+country_code = VALUES\(country_code\),\s+timezone = VALUES\(timezone\),\s+updated_at = CURRENT_TIMESTAMP\(3\);/s)
assert.match(sql, /internal_code VARCHAR\(16\) NULL/)
assert.match(sql, /source\.internal_code/)
assert.doesNotMatch(sql, /status\s*=\s*VALUES\(status\)/)
assert.doesNotMatch(sql, /contact_name\s*=\s*VALUES\(contact_name\)/)
assert.doesNotMatch(sql, /contact_phone\s*=\s*VALUES\(contact_phone\)/)