test(fba): preserve verified fleet and fulfillment acceptance workflows
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
import { verifyVehicleCare } from './vehicle-care.mjs'
|
||||
|
||||
const MODULE = 'phase4-overseas-master-data'
|
||||
const DOMESTIC_BASE = '/api/platform/v1/warehouse-admin'
|
||||
const OVERSEAS_BASE = '/api/platform/v1/last-leg/master-data'
|
||||
@@ -298,6 +300,7 @@ function vehiclePayload(context, edited = false) {
|
||||
plateNumber: `QA-${suffix}`.slice(0, 64),
|
||||
model: edited ? 'Phase4 QA Truck Edited' : 'Phase4 QA Truck',
|
||||
fuelConsumptionPer100Km: edited ? 18.75 : 18.5,
|
||||
maxPalletSpaces: edited ? 28 : 30, maxLoadKg: edited ? 17500 : 18000, maxVolumeCbm: edited ? 88 : 90,
|
||||
mileageKm: edited ? 101 : 100,
|
||||
driverOrDispatchCompany: `${context.marker} Carrier`, phone: '12135550188',
|
||||
region: 'OVERSEAS', ownership: 'OWNED',
|
||||
@@ -306,6 +309,19 @@ function vehiclePayload(context, edited = false) {
|
||||
}
|
||||
}
|
||||
|
||||
export function vehicleCapacityMatches(actual, expected) {
|
||||
return ['maxPalletSpaces', 'maxLoadKg', 'maxVolumeCbm'].every(key =>
|
||||
['number', 'string'].includes(typeof actual?.[key]) && String(actual[key]).trim() !== ''
|
||||
&& Number.isFinite(Number(actual[key])) && Number(actual[key]) > 0
|
||||
&& Number(actual[key]) === Number(expected[key]))
|
||||
}
|
||||
|
||||
function assertVehicleCapacity(context, name, response, actual, expected) {
|
||||
context.assert(MODULE, name, response, vehicleCapacityMatches(actual, expected),
|
||||
`palletSpaces=${actual?.maxPalletSpaces ?? 'missing'}, loadKg=${actual?.maxLoadKg ?? 'missing'}, volumeCbm=${actual?.maxVolumeCbm ?? 'missing'}`,
|
||||
BLOCKER)
|
||||
}
|
||||
|
||||
async function vehicleLifecycle(context, resource) {
|
||||
const createPayload = vehiclePayload(context)
|
||||
const createResponse = await context.request('POST', `${OVERSEAS_BASE}/vehicles`, createPayload)
|
||||
@@ -313,10 +329,12 @@ async function vehicleLifecycle(context, resource) {
|
||||
const id = asId(vehicle.id)
|
||||
if (!id || !recordVersion(vehicle.recordVersion)) throw new Error('车辆创建响应缺少字符串ID或recordVersion')
|
||||
resource.vehicle = { id, plateNumber: createPayload.plateNumber, recordVersion: Number(vehicle.recordVersion), finalStatus: vehicle.status }
|
||||
assertVehicleCapacity(context, '新建车辆保存三项实际容量', createResponse, vehicle, createPayload)
|
||||
const path = `${OVERSEAS_BASE}/vehicles/${encodeURIComponent(id)}`
|
||||
|
||||
const detailResponse = await context.request('GET', path)
|
||||
vehicle = requireData(context, '查询marker车辆详情', detailResponse)
|
||||
assertVehicleCapacity(context, '车辆详情回显三项实际容量', detailResponse, vehicle, createPayload)
|
||||
context.assert(MODULE, '车辆详情长ID、五态字段与版本', detailResponse,
|
||||
asId(vehicle.id) === id && ['IN_SERVICE', 'DISPATCHED', 'MAINTENANCE', 'INACTIVE', 'RETURNED'].includes(vehicle.status)
|
||||
&& recordVersion(vehicle.recordVersion),
|
||||
@@ -329,6 +347,7 @@ async function vehicleLifecycle(context, resource) {
|
||||
const updatedVersion = Number(vehicle.recordVersion)
|
||||
const updatedMileage = Number(vehicle.mileageKm)
|
||||
resource.vehicle.recordVersion = updatedVersion
|
||||
assertVehicleCapacity(context, '车辆编辑保持三项实际容量', updateResponse, vehicle, updatePayload)
|
||||
context.assert(MODULE, '车辆编辑版本递增', updateResponse,
|
||||
vehicle.model === updatePayload.model && updatedMileage === Number(updatePayload.mileageKm)
|
||||
&& updatedVersion === Number(staleVersion) + 1,
|
||||
@@ -353,14 +372,18 @@ async function vehicleLifecycle(context, resource) {
|
||||
|
||||
const listResponse = await context.request('GET', `${OVERSEAS_BASE}/vehicles?page=1&size=20&keyword=${encodeURIComponent(createPayload.plateNumber)}`)
|
||||
const page = requireData(context, '分页查询marker车辆', listResponse)
|
||||
assertVehicleCapacity(context, '车辆列表回显三项实际容量', listResponse,
|
||||
page?.records?.find(item => asId(item.id) === id), updatePayload)
|
||||
context.assert(MODULE, '车辆列表包含本轮长ID与recordVersion', listResponse,
|
||||
Array.isArray(page?.records) && page.records.some((item) => asId(item.id) === id && recordVersion(item.recordVersion)),
|
||||
`id=${id}, total=${page?.total ?? 'missing'}`, BLOCKER)
|
||||
|
||||
const csv = await context.requestBinary('GET', `${OVERSEAS_BASE}/vehicles/export?keyword=${encodeURIComponent(createPayload.plateNumber)}`)
|
||||
assertBinaryCsv(context, '导出marker车辆CSV', csv,
|
||||
'车辆ID,车牌号,车型,油耗(L/100km),当前公里码(km),司机或外派单位,联系电话,区域,车辆归属,状态,更新时间',
|
||||
[id, createPayload.plateNumber, 'MAINTENANCE'])
|
||||
'车牌号,车型,油耗(L/100km),当前公里码(km),司机或外派单位,联系电话,区域,车辆归属,状态,最大托位,最大载重(kg),可用容积(m³),更新时间',
|
||||
[createPayload.plateNumber, 'MAINTENANCE', String(updatePayload.maxLoadKg)])
|
||||
resource.vehicle.care = {}
|
||||
await verifyVehicleCare(context, MODULE, vehicle, resource.vehicle.care)
|
||||
}
|
||||
|
||||
async function verifyCanonicalPermissionDenial(context, resource) {
|
||||
|
||||
Reference in New Issue
Block a user