Files
juzi/h5/test/factual-copy.js
T

33 lines
2.7 KiB
JavaScript

'use strict';
const assert=require('node:assert/strict'), SS=require('../js/skin-score'), UI=require('../js/report-ui'), Copy=require('../js/report-copy');
const Original=require('./fixtures/report-copy-before-two-fixes.cjs');
// Strict scope guard: every care template and 20 other conclusion templates
// must be byte-for-byte identical to the released baseline.
assert.deepEqual(Copy.care,Original.care);
for(const key of Object.keys(Original.conclusion)) for(const level of Object.keys(Original.conclusion[key])) {
if(key==='wrinkles'&&level==='优秀') continue;
assert.equal(Copy.conclusion[key][level],Original.conclusion[key][level],key+' '+level+' must stay original');
}
const r=structuredClone(SS.MOCK_RESULT), vm=SS.buildViewModel(r,SS.MOCK_SIDE,{});
vm.cats.wrinkles.P=76;Object.assign(vm.cats.wrinkles.vars,{wr_cnt:10,fl_cnt:10});
vm.cats.acne.P=95;
Object.assign(vm.cats.acne.vars,{acne_cnt:2,acne_detail:'丘疹2处',acne_counts_complete:true,acne_counts:{closed_comedones:0,acne:2,acne_pustule:0,acne_nodule:0,acne_mark:0}});
const before=JSON.stringify({vm,r}),ui=UI.build(vm,r),view=k=>ui.views.find(v=>v.key===k);
assert.equal(view('wrinkles').text,'全脸共检测到皱纹 10 条、细纹 10 条;整体纹路状态较好,建议维持日常淡纹与保湿护理。');
assert.equal(view('acne').text,'检测到 2 处皮损(丘疹2处),局部皮损仍需关注。');
assert.equal(view('acne').level,'优秀');
assert.equal(JSON.stringify({vm,r}),before);
const saved={gradeRule:UI.gradeRule,copyRule:'retired',product:{tier:3,title:'旧推荐'},care:ui.views.slice().reverse().map(v=>({name:v.name,text:'旧护理'}))};
const bytes=JSON.stringify(saved),display=UI.forDisplay(vm,r,saved);
assert.equal(display.copyRule,UI.copyRule);assert.deepEqual(display.product,saved.product);
assert.deepEqual(display.care.map(v=>v.name),saved.care.map(v=>v.name));
assert.equal(JSON.stringify(saved),bytes);
for(const item of display.care){const v=view(item.key);assert.equal(item.level,v.level);assert.equal(item.text,Copy.care[item.key][v.level].care+Copy.care[item.key][v.level].lifestyle);}
assert.equal(UI.forDisplay(vm,r,{...saved,care:saved.care.slice(0,2)}).care.length,2);
const unknown={name:'未知旧项目',text:'保留原文'};
assert.deepEqual(UI.forDisplay(vm,r,{...saved,care:[unknown]}).care[0],unknown);
const missing=structuredClone(vm);Object.assign(missing.cats.wrinkles.vars,{wr_cnt:null,fl_cnt:null});
const text=UI.build(missing,{}).views.find(v=>v.key==='wrinkles').text;
assert(text.includes('计数未获取'));assert(!text.includes('皱纹 0 条'));assert(!/[{}]|undefined|NaN/.test(text));
console.log('PASS strict two-copy scope: all care and 20 other templates unchanged; excellent wrinkles, detected acne, legacy care mapping and immutable data');