Files
docs/悦/货代SAAS平台后台/tests/verify-last-mile-relabel-display.cjs
T
2026-08-21 09:20:26 +08:00

75 lines
3.6 KiB
JavaScript

#!/usr/bin/env node
const fs=require('node:fs');
const path=require('node:path');
const vm=require('node:vm');
const root=path.resolve(__dirname,'..');
const manifest=JSON.parse(fs.readFileSync(path.join(root,'prototype-src','manifest.json'),'utf8'));
const html=fs.readFileSync(path.join(root,manifest.source),'utf8');
const failures=[];
function expect(condition,message){if(!condition)failures.push(message);}
function section(startMarker,endMarker){
const start=html.indexOf(startMarker);
const end=html.indexOf(endMarker,start+startMarker.length);
return start>=0&&end>start?html.slice(start,end):'';
}
function functionSource(name){
const start=html.indexOf(`function ${name}(`);
if(start<0)return '';
const braceStart=html.indexOf('{',start);
let depth=0,quote='',escaped=false;
for(let index=braceStart;index<html.length;index+=1){
const char=html[index];
if(quote){
if(escaped)escaped=false;
else if(char==='\\')escaped=true;
else if(char===quote)quote='';
continue;
}
if(char==="'"||char==='"'||char==='`'){quote=char;continue;}
if(char==='{')depth+=1;
if(char==='}'&&--depth===0)return html.slice(start,index+1);
}
return '';
}
const lastMilePage=section('<div class="page" id="page-last-mile-orders">','<!-- ==================== OVERSEAS WAREHOUSE - 尾程订单详情');
const getRelabel=functionSource('getLastMileRelabelOrder');
const statusClass=functionSource('lastMileRelabelStatusClass');
const renderList=functionSource('renderLastMileOrders');
const renderDetail=functionSource('renderLastMileOrderDetail');
expect(/>派送单号<\/th><th[^>]*>换标单号<\/th><th[^>]*>换标状态<\/th>/.test(lastMilePage),'列表应在派送单号后显示换标单号和换标状态');
expect(Boolean(getRelabel),'缺少 getLastMileRelabelOrder 函数');
expect(Boolean(statusClass),'缺少 lastMileRelabelStatusClass 函数');
expect(/getLastMileRelabelOrder/.test(renderList),'列表应实时查询关联换标单');
expect(/openFbaRelabelOrderDetail/.test(renderList),'列表换标单号应进入换标单详情');
expect(/换标状态/.test(renderDetail),'尾程详情计划信息应显示换标状态');
expect(/openFbaRelabelOrderDetail/.test(renderDetail),'尾程详情关联换标单应进入换标单详情');
expect(/lastMileNo\s*:\s*'LMO20260810001'/.test(html),'应提供尾程订单换标关联样例');
expect(/colspan="33"/.test(renderList),'列表空状态应覆盖新增后的 33 列');
if(getRelabel&&statusClass){
try{
const context={fbaRelabelOrderData:[
{orderNo:'REL-1',lastMileNo:'LMO-1',status:'待处理'},
{orderNo:'REL-2',lastMileNo:'LMO-2',status:'处理中'},
{orderNo:'REL-3',lastMileNo:'LMO-3',status:'已完成'}
]};
vm.createContext(context);
vm.runInContext(`${getRelabel}\n${statusClass}`,context,{timeout:1000});
expect(context.getLastMileRelabelOrder({no:'LMO-2'}).orderNo==='REL-2','应按尾程单号实时关联换标单');
expect(context.getLastMileRelabelOrder({no:'LMO-X'})===null,'无关联换标单应返回空值');
expect(context.lastMileRelabelStatusClass('待处理')==='tag-orange','待处理状态应显示橙色');
expect(context.lastMileRelabelStatusClass('处理中')==='tag-purple','处理中状态应显示紫色');
expect(context.lastMileRelabelStatusClass('已完成')==='tag-green','已完成状态应显示绿色');
}catch(error){failures.push(`换标关联行为执行失败:${error.message}`);}
}
if(failures.length){
console.error('LAST_MILE_RELABEL_DISPLAY_CHECK_FAIL');
failures.forEach(failure=>console.error(`- ${failure}`));
process.exitCode=1;
}else console.log('LAST_MILE_RELABEL_DISPLAY_CHECK_PASS');