43 lines
2.5 KiB
JavaScript
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,old.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');
|