fix bugs
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
import test from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import {readFile} from 'node:fs/promises';
|
||||
const source = await readFile(new URL('../pages/dashboard/dashboard.vue',import.meta.url),'utf8');
|
||||
const script = source.match(/<script>([\s\S]*?)<\/script>/)[1]
|
||||
.replace(/import[\s\S]*?from\s+['"][^'"]+['"];?[^\n]*/g,'').replace('export default','return');
|
||||
function setup(data) {
|
||||
let requests=0;
|
||||
const page = new Function('mgmHeader','uni','getTodoDashboard',script)({},
|
||||
{showLoading(){},hideLoading(){}},async()=>{requests++;return typeof data === 'function' ? data() : {success:true,data};});
|
||||
const vm={$t:k=>k};
|
||||
Object.assign(vm,page.data.call(vm),{userData:{userId:'80001'}});
|
||||
for(const [key,fn] of Object.entries(page.methods)) vm[key]=fn.bind(vm);
|
||||
return {vm,requests:()=>requests};
|
||||
}
|
||||
test('Dashboard request accepts both response casings and sets IM totals and data date',async()=>{
|
||||
for(const pascal of [false,true]) {
|
||||
const records=[{currentValue:0,itemName:'MF Turnover',userSegment:'IM',type:'Achievement',targetValue:100},
|
||||
{itemName:'2026-09-09',type:'DataAsOf'}];
|
||||
const data=pascal?{Records:records.map(r=>Object.fromEntries(Object.entries(r).map(([k,v])=>[k[0].toUpperCase()+k.slice(1),v])))}:{records};
|
||||
const {vm,requests}=setup(data);
|
||||
await vm.getTodoDashboardByuserId();
|
||||
assert.equal(requests(),1);
|
||||
assert.equal(vm.showDashboardView,true);
|
||||
assert.equal(vm.userSegment,'IM');
|
||||
assert.equal(vm.MFValue,0);
|
||||
assert.equal(vm.dataAsOf,'2026-09-09');
|
||||
}
|
||||
});
|
||||
test('Dashboard shows only populated sections and preserves IM turnover-only Achievement',async()=>{
|
||||
for(const [records,achievement,kpi] of [
|
||||
[[{type:'KPI',itemName:'Rate'}],false,true],
|
||||
[[{type:'Achievement',itemName:'Target'}],true,false],
|
||||
[[{type:'Achievement',itemName:'MF Turnover',userSegment:'IM',currentValue:0}],true,false]
|
||||
]) {
|
||||
const {vm}=setup({records}); await vm.getTodoDashboardByuserId();
|
||||
assert.equal(vm.showAchievement,achievement); assert.equal(vm.showKPI,kpi);
|
||||
}
|
||||
});
|
||||
test('Dashboard empty refresh clears old data and hides both sections',async()=>{
|
||||
const data={records:[{type:'Achievement',itemName:'MF Turnover',userSegment:'IM',currentValue:99}]};
|
||||
const {vm}=setup(data); await vm.getTodoDashboardByuserId();
|
||||
data.records=[]; await vm.getTodoDashboardByuserId();
|
||||
assert.deepEqual(vm.dashboardData,[]); assert.equal(vm.MFValue,'0');
|
||||
assert.equal(vm.showDashboardView,false); assert.equal(vm.showAchievement,false); assert.equal(vm.showKPI,false);
|
||||
});
|
||||
test('Dashboard failed refresh hides previously displayed data',async()=>{
|
||||
let fail=false;
|
||||
const {vm}=setup(()=>{if(fail)throw Error('network');return {success:true,data:{records:[{type:'KPI',itemName:'Rate'}]}};});
|
||||
await vm.getTodoDashboardByuserId(); fail=true; await vm.getTodoDashboardByuserId();
|
||||
assert.equal(vm.showDashboardView,false); assert.equal(vm.showKPI,false); assert.equal(vm.showAchievement,false);
|
||||
});
|
||||
test('Dashboard normalization preserves camelCase zero over PascalCase fallback',()=>{
|
||||
const {vm}=setup({});
|
||||
const record={currentValue:0,CurrentValue:99,targetValue:0,TargetValue:100};
|
||||
const normalized=vm.normalizeDashboardRecord(record);
|
||||
assert.equal(normalized.currentValue,0);
|
||||
assert.equal(normalized.targetValue,0);
|
||||
assert.equal(record.CurrentValue,99);
|
||||
});
|
||||
Reference in New Issue
Block a user