Files
juzi/h5/test/display-age-recommendation.js
T

20 lines
1.9 KiB
JavaScript

'use strict';
const assert=require('node:assert/strict'),SS=require('../js/skin-score'),UI=require('../js/report-ui');
// The reported case: raw34, actual44 => displayed39, product II.
const old={skinAgeRaw:34,realAge:44,skinAgeDisplay:39,dims:{firm:{P:76,S:9.28},vita:{P:76.2,S:9.29},stab:{P:95.5,S:9.87}},
recommendation:{version:'old',scores:{firm:9.28,vita:9.286,stab:9.865}},essence:{name:'25+束紧精华'},summary:'原结论',cats:{},careAdvice:[]};
const bytes=JSON.stringify(old),updated=SS.withDisplayRecommendation(old);
assert.equal(updated.recommendation.skinAge,39);assert.equal(updated.recommendation.ageBasis,'display');assert.equal(updated.essence.tier,2);
assert.equal(updated.skinAgeRaw,34);assert.equal(updated.summary,old.summary);assert.strictEqual(updated.dims,old.dims);assert.equal(JSON.stringify(old),bytes);
const saved={gradeRule:UI.gradeRule,copyRule:UI.copyRule,product:UI.products[0],views:[],care:[]},before=JSON.stringify(saved);
const presentation=UI.forDisplay(updated,{},saved);assert.equal(presentation.product.tier,2);assert.equal(JSON.stringify(saved),before);assert.strictEqual(presentation.views,saved.views);
for(const [raw,actual,display,tier] of [[24,60,55,3],[55,30,35,1],[34,44,39,2],[null,44,null,null],[34,null,34,1]]){
const vm=SS.withDisplayRecommendation({...old,skinAgeRaw:raw,realAge:actual});assert.equal(vm.skinAgeDisplay,display);assert.equal(vm.essence.tier,tier);
}
// New reports also use the exact same age displayed by the report renderer.
for(const actual of [24,40,44,60]){
const raw=JSON.parse(JSON.stringify(SS.MOCK_RESULT));raw.skin_age={value:34};const vm=SS.buildViewModel(raw,SS.MOCK_SIDE,{realAge:actual});
assert.equal(vm.recommendation.skinAge,SS.reportSkinAge(vm,raw));assert.equal(vm.skinAgeRaw,34);
}
console.log('PASS: real case raw34/display39 => II; new/history identical display-age basis; boundary/missing age; scores/copy/saved snapshots unchanged');