Files
juzi/h5/test/display-grade.js

43 lines
2.5 KiB
JavaScript

'use strict';
const assert = require('node:assert/strict');
const SS = require('../js/skin-score'), UI = require('../js/report-ui'), Copy = require('../js/report-copy');
for (const [S, level] of [[7,'改善'],[7.94,'改善'],[7.95,'良好'],[8,'良好'],[8.94,'良好'],[8.95,'优秀'],[9,'优秀'],[9.3,'优秀'],[10,'优秀'],[null,null],[NaN,null]]) {
assert.equal(UI.levelForScore(S), level);
}
const keys = ['contour','wrinkles','color','smooth','water','sens','acne'];
for (const [P, level] of [[0,'改善'],[20,'改善'],[31.49,'改善'],[31.5,'良好'],[50,'良好'],[64.83,'良好'],[65,'优秀'],[76,'优秀'],[79,'优秀'],[100,'优秀'],[null,null]]) {
const r = structuredClone(SS.MOCK_RESULT), vm = SS.buildViewModel(r, SS.MOCK_SIDE, {});
for (const key of ['contour','wrinkles','smooth','sens','acne']) vm.cats[key].P = P;
Object.assign(vm.cats.tone.vars, {melanin:P,color_score:P,water_score:P,water_sev:0});
vm.cats.tone.vars.tone_scoring.color_score = P;
const before = JSON.stringify({vm,r}), ui = UI.build(vm,r);
for (const view of ui.views) {
assert.equal(view.level,level,view.key+' P='+P);
assert.deepEqual(view.advice,level ? Copy.care[view.key][level] : null);
assert.equal(view.S,UI.scoreOfP(P));
}
assert.equal(JSON.stringify({vm,r}),before);
assert.equal(ui.gradeRule,UI.gradeRule);
for (const care of ui.care) assert.equal(care.level,level);
assert.deepEqual(ui.views.map(v=>v.key),keys);
}
const r = structuredClone(SS.MOCK_RESULT);
r.eye_pouch_severity = {value:2};
r.score_info.wrinkle_score = 76;
const vm = SS.buildViewModel(r,SS.MOCK_SIDE,{}), ui = UI.build(vm,r);
assert.equal(UI.dimensionScore(vm.dims.firm.S),'9.3');
assert.equal(ui.views.find(v=>v.key==='contour').level,'优秀');
assert(!/眼袋|黑眼圈/.test(ui.views.find(v=>v.key==='contour').text),'contour conclusion omits eye problems at all grades');
const old = structuredClone(ui);
delete old.gradeRule;
old.views[0].level='改善';old.views[0].text='旧轮廓文案';
old.product={tier:3,title:'历史推荐不改'};
const oldBytes=JSON.stringify(old), vmBytes=JSON.stringify(vm);
const display=UI.forDisplay(vm,r,old);
assert.equal(display.views[0].level,'优秀');
assert.deepEqual(display.product,ui.product);
assert.deepEqual(display.care.map(v=>v.key),old.care.map(v=>v.key));
assert.equal(JSON.stringify(old),oldBytes);assert.equal(JSON.stringify(vm),vmBytes);
assert.equal(UI.forDisplay(vm,r,ui),ui);
console.log('PASS: seven views/advice use displayed 8/9 grades; rounding, missing, 9.3 case, unchanged contour copy, immutable history and product/order');