修复匹配详情中“用户自填未经核验”等来源说明,清理未参与项的橙色注意提示,修正贷款统计口径文案;补充公积金完整可选路径提取逻辑,确保明确无额外时长要求的公积金分支可正确识别并通过。
27 lines
5.0 KiB
JavaScript
27 lines
5.0 KiB
JavaScript
// Exercise the actual UTS adapter with frozen synthetic responses; no network/model access.
|
|
const fs=require('node:fs'),path=require('node:path'),vm=require('node:vm'),assert=require('node:assert/strict');
|
|
const ts=require('D:/Develop/HBuilderX/plugins/uniapp-uts-v1/node_modules/@dcloudio/uni-uts-v1/lib/typescript/lib/typescript.js');
|
|
class Json{constructor(v={}){Object.entries(v).forEach(([k,x])=>this[k]=wrap(x));}getString(k){return typeof this[k]==='string'?this[k]:null;}getNumber(k){return typeof this[k]==='number'?this[k]:null;}getBoolean(k){return typeof this[k]==='boolean'?this[k]:null;}}
|
|
function wrap(v){return Array.isArray(v)?v.map(wrap):v&&typeof v==='object'?new Json(v):v;}
|
|
let reply,query;
|
|
function load(file){const exports={};const source=fs.readFileSync(path.join(__dirname,'..',file),'utf8').replace(/const (fieldNames|labels): UTSJSONObject = (.*)/g,'const $1: UTSJSONObject = new UTSJSONObject($2)');vm.runInNewContext(ts.transpileModule(source,{compilerOptions:{module:ts.ModuleKind.CommonJS,target:ts.ScriptTarget.ES2020}}).outputText,{exports,UTSJSONObject:Json,Error,Number,Math,require:p=>p.endsWith('api.uts')?{requestJson:async(_url,_method,params)=>{query=params;return new Json(reply);}}:p.endsWith('config.uts')?{API_BASE_URL:'http://synthetic.invalid/api/v1'}:p.endsWith('records.uts')?{revisionParams:v=>({revisionId:v})}:p.endsWith('cities.uts')?load('services/cities.uts'):load('services/money.uts')},{filename:file});return exports;}
|
|
function item(id,state,score){return {productId:id,productVersion:1,eligibility:state,score,scorePolicyVersion:'product-soft-score-v1',currentAvailability:'available',positiveReasons:[],blockingReasons:[],cautions:[],evidence:[],aiExplanation:{status:'not_requested'},productSnapshot:{productId:id,productVersion:1,productName:'合成产品'+id,bankName:'合成机构',applicantTypes:['personal'],regions:[],source:{},rules:[]}};}
|
|
function page(items){return {assessmentId:'9',revisionId:'11',resultVersion:2,matching:{status:'completed',ruleVersion:'product-matching-v2',orderingPolicyVersion:'product-score-descending-v1',catalogSnapshotId:'frozen',candidateCount:0,ineligibleCount:0,unknownCount:5},items,hasMore:true,nextCursor:'synthetic-opaque'};}
|
|
(async()=>{const service=load('packages/finance/services/matches.uts');let checks=0;
|
|
for(const [state,score,want] of [['eligible',92,'92%'],['eligible',0,'0%'],['unknown',80,'80%'],['ineligible',20,'20%'],['unknown',null,''],['ineligible',null,''],['eligible',null,'']]){assert.equal(service.matchPercentage(state,score),want);checks++;}
|
|
assert.equal(service.eligibilityLabel('unknown'),'待核实');checks++;
|
|
reply=page([item('2','unknown',30),item('5','unknown',30),item('1','unknown',20)]);
|
|
let result=await service.fetchMatchPage('9','all','','11');assert.equal(result.items.length,3);assert.equal(query.eligibility,'all');checks+=2;
|
|
assert.deepEqual(Array.from(result.items,x=>x.state),['unknown','unknown','unknown']);checks++;
|
|
reply=page([item('1','eligible',0),item('2','unknown',50),item('3','ineligible',10)]);reply.matching.candidateCount=1;reply.matching.ineligibleCount=1;reply.matching.unknownCount=1;reply.hasMore=false;reply.nextCursor=null;
|
|
result=await service.fetchMatchPage('9','all','','11');assert.equal(result.items[0].score,0);assert.equal(service.matchPercentage('eligible',0),'0%');checks+=2;
|
|
await assert.rejects(service.fetchMatchPage('9','eligible','','11'));checks++;
|
|
reply=page([item('2','unknown',30),item('2','unknown',30)]);await assert.rejects(service.fetchMatchPage('9','all','','11'));checks++;
|
|
reply=page([item('1','unrecognized',20)]);await assert.rejects(service.fetchMatchPage('9','all','','11'));checks++;
|
|
reply=page([item('1','unknown',20)]);reply.revisionId='12';await assert.rejects(service.fetchMatchPage('9','all','','11'));checks++;
|
|
reply=page([item('1','unknown',20)]);reply.hasMore=false;reply.nextCursor=null;assert.equal((await service.fetchMatchPage('9','all','','11')).items.length,1);checks++;
|
|
const age=item('1','eligible',30);age.evidence=[{evidenceId:'age',fieldRefs:['age'],actual:36,source:'ai_self_reported'}];age.positiveReasons=[{reasonId:'age-reason',code:'AI_CONDITION_PASS',text:'符合年龄要求',evidenceRefs:['age']}];
|
|
reply={assessmentId:'9',revisionId:'11',resultVersion:2,matching:page([]).matching,item:age};result=await service.fetchMatchDetailRecord('9','1','11');assert.equal(result.item.positive[0].evidence[0],'年龄:36 岁');checks++;
|
|
const province=item('1','eligible',80);province.evidence=[{evidenceId:'province',fieldRefs:['provinceCode'],actual:'440000',source:'ai_self_reported'}];province.positiveReasons=[{reasonId:'region-reason',code:'AI_CONDITION_PASS',text:'符合省份要求',evidenceRefs:['province']}];reply={assessmentId:'9',revisionId:'11',resultVersion:2,matching:page([]).matching,item:province};result=await service.fetchMatchDetailRecord('9','1','11');assert.equal(result.item.positive[0].evidence[0],'所在省份:广东省');checks++;
|
|
console.log('PASS: '+checks+' match preview UTS checks');})().catch(e=>{console.error(e);process.exitCode=1;});
|