Files
Deep-Package-Inspection/test/field_alignment.js
T

105 lines
3.3 KiB
JavaScript

// test/field_alignment.js
// Check field name alignment between backend and frontend
const fs = require('fs');
const dash = fs.readFileSync('backend/routes/dashboard.js','utf8') +
fs.readFileSync('backend/routes/dashboard/helpers.js','utf8') +
fs.readFileSync('backend/routes/dashboard/summary.js','utf8') +
fs.readFileSync('backend/routes/dashboard/apps.js','utf8') +
fs.readFileSync('backend/routes/dashboard/devices.js','utf8') +
fs.readFileSync('backend/routes/dashboard/flows.js','utf8') +
fs.readFileSync('backend/routes/dashboard/threats.js','utf8') +
fs.readFileSync('backend/routes/dashboard/geo.js','utf8') +
fs.readFileSync('backend/routes/dashboard/tls.js','utf8') +
fs.readFileSync('backend/routes/dashboard/telemetry.js','utf8') +
fs.readFileSync('backend/routes/dashboard/events.js','utf8');
const api = fs.readFileSync('src/lib/api.ts','utf8') +
fs.readFileSync('src/lib/api-types.ts','utf8');
console.log('=== Field Name Alignment: Backend ↔ Frontend ===\n');
function check(label, backendHas, frontendExpects, mismatchDesc = '') {
if (backendHas && frontendExpects) {
console.log(` ✓ PASS: ${label} is aligned`);
} else if (backendHas && !frontendExpects) {
console.log(` ⚠ WARNING: Backend defines ${label} but Frontend doesn't expect it`);
} else if (!backendHas && frontendExpects) {
console.log(` ✗ FAIL: ${label} is missing in backend routing!`);
if (mismatchDesc) console.log(` → ${mismatchDesc}`);
}
}
// /protocols
console.log('[/protocols]');
check(
'protocol_label',
dash.includes('protocol_label'),
api.includes('protocol_label'),
'Backend doesn\'t return protocol_label to frontend'
);
console.log('');
// /timeline
console.log('[/timeline]');
check(
'fetched_at',
dash.includes('fetched_at'),
api.includes('fetched_at'),
'Backend sends timestamp, frontend reads fetched_at'
);
console.log('');
// /countries
console.log('[/countries]');
check(
'country_name',
dash.includes('country_name'),
api.includes('country_name'),
'Backend does not return country_name'
);
check(
'country_code',
dash.includes('country_code'),
api.includes('country_code'),
'Backend does not return country_code'
);
console.log('');
// /dns
console.log('[/dns]');
check(
'domain',
dash.includes('domain'),
api.includes('domain'),
'Backend does not map domain field'
);
console.log('');
// /summary
console.log('[/summary]');
check('total_devices', dash.includes('total_devices'), api.includes('total_devices'));
check('bandwidth_down', dash.includes('bandwidth_down'), api.includes('bandwidth_down'));
check('download_speed', dash.includes('download_speed'), api.includes('download_speed'));
console.log('');
// /apps
console.log('[/apps]');
check('app_label', dash.includes('app_label'), api.includes('app_label'));
console.log('');
// /flows
console.log('[/flows]');
check('src_ip', dash.includes('src_ip'), api.includes('src_ip'));
check('dst_port', dash.includes('dst_port'), api.includes('dst_port'));
console.log('');
// app-categories
console.log('[/app-categories]');
check(
'category_label',
dash.includes('category_label'),
api.includes('category_label'),
'Backend sends label, frontend expects category_label'
);
console.log('');