'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');