test: make price-book acceptance portable
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
import assert from 'node:assert/strict'
|
||||
import fs from 'node:fs'
|
||||
import path from 'node:path'
|
||||
import test from 'node:test'
|
||||
import { fileURLToPath } from 'node:url'
|
||||
|
||||
const here = path.dirname(fileURLToPath(import.meta.url))
|
||||
const source = fs.readFileSync(path.join(here, 'pricing.mjs'), 'utf8')
|
||||
|
||||
test('price-book acceptance is portable and reuses a deployed active source by default', () => {
|
||||
assert.match(source, /process\.env\.ADMIN_TEST_PRICE_BOOK_FILE/)
|
||||
assert.match(source, /activeBefore\[0\]/)
|
||||
assert.match(source, /requestBinary\('GET', `\$\{PRICE_BOOK_PATH\}\/\$\{encodeURIComponent\(activeFixture\.id\)\}\/source`\)/)
|
||||
assert.match(source, /复用当前生效价格源作为本轮隔离上传夹具/)
|
||||
assert.doesNotMatch(source, /WXWork|Users\\BY-OY|DEFAULT_PRICE_BOOK_FILE/)
|
||||
})
|
||||
@@ -5,7 +5,6 @@ import { basename } from 'node:path'
|
||||
const PRICE_BOOK_PATH = '/api/platform/v1/fba-pricing/carrier-rates/price-books'
|
||||
const DOMESTIC_WAREHOUSE_PATH = '/api/platform/v1/warehouse-admin?page=1&size=200&status=ACTIVE&warehouseType=DOMESTIC'
|
||||
const OVERSEAS_WAREHOUSE_PATH = '/api/platform/v1/warehouse-admin?page=1&size=200&status=ACTIVE&warehouseType=OVERSEAS'
|
||||
const DEFAULT_PRICE_BOOK_FILE = 'C:\\Users\\BY-OY\\Documents\\WXWork\\1688854456873012\\Cache\\File\\2026-08\\2026.08.03柏悦价格表 船期2026.08.12.xlsx'
|
||||
const EXPECTED_CHANNEL_CODES = [
|
||||
'MATSON_CLX_TRUCK', 'MATSON_MAX_TRUCK', 'EXX_TRUCK', 'HEDE_TRUCK', 'EXX_RAIL_NY',
|
||||
'OA_LA_TRUCK', 'OA_LA_FULL_TRUCK', 'OA_CHICAGO_RAIL', 'OA_HOUSTON_TRUCK',
|
||||
@@ -134,18 +133,37 @@ export async function run(context) {
|
||||
Array.isArray(versionsBefore) && activeBefore.length <= 1,
|
||||
`versions=${Array.isArray(versionsBefore) ? versionsBefore.length : 'n/a'}, active=${activeBefore.length}`, blocker)
|
||||
|
||||
const sourcePath = process.env.ADMIN_TEST_PRICE_BOOK_FILE || DEFAULT_PRICE_BOOK_FILE
|
||||
const sourcePath = process.env.ADMIN_TEST_PRICE_BOOK_FILE
|
||||
let sourceBytes
|
||||
try {
|
||||
sourceBytes = await readFile(sourcePath)
|
||||
} catch (error) {
|
||||
context.addStep(module, '读取船期价格测试文件', null, false,
|
||||
`path=${sourcePath}, error=${error instanceof Error ? error.message : String(error)}`, blocker)
|
||||
finishScenario(context, module, scenario, start)
|
||||
return
|
||||
let sourceName
|
||||
if (sourcePath) {
|
||||
try {
|
||||
sourceBytes = await readFile(sourcePath)
|
||||
sourceName = basename(sourcePath)
|
||||
} catch (error) {
|
||||
context.addStep(module, '读取显式船期价格测试文件', null, false,
|
||||
`path=${sourcePath}, error=${error instanceof Error ? error.message : String(error)}`, blocker)
|
||||
finishScenario(context, module, scenario, start)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
const activeFixture = activeBefore[0]
|
||||
const sourceResponse = activeFixture?.id
|
||||
? await context.requestBinary('GET', `${PRICE_BOOK_PATH}/${encodeURIComponent(activeFixture.id)}/source`)
|
||||
: null
|
||||
const zipMagic = sourceResponse?.bytes?.[0] === 0x50 && sourceResponse?.bytes?.[1] === 0x4b
|
||||
const fixtureReady = sourceResponse?.http === 200 && sourceResponse.bytes?.length > 0 && zipMagic
|
||||
context.addStep(module, '复用当前生效价格源作为本轮隔离上传夹具', sourceResponse, fixtureReady,
|
||||
`activeVersionId=${activeFixture?.id || 'missing'}, bytes=${sourceResponse?.bytes?.length || 0}, zipMagic=${zipMagic}`, blocker)
|
||||
if (!fixtureReady) {
|
||||
finishScenario(context, module, scenario, start)
|
||||
return
|
||||
}
|
||||
sourceBytes = sourceResponse.bytes
|
||||
sourceName = activeFixture.originalFileName || `price-book-${activeFixture.id}.xlsx`
|
||||
}
|
||||
const sourceHash = sha256(sourceBytes)
|
||||
const uploadName = `${context.marker}-${basename(sourcePath)}`
|
||||
const uploadName = `${context.marker}-${sourceName}`
|
||||
context.addStep(module, '船期价格测试文件已隔离', null,
|
||||
sourceBytes.length > 0 && uploadName.includes(context.marker) && uploadName.toLowerCase().endsWith('.xlsx'),
|
||||
`fileName=${uploadName}, bytes=${sourceBytes.length}, sha256=${sourceHash}`, blocker)
|
||||
|
||||
Reference in New Issue
Block a user