72 lines
2.4 KiB
JavaScript
72 lines
2.4 KiB
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
const { JSDOM } = require('jsdom');
|
|
|
|
const filesToTest = [
|
|
'dashboard.html',
|
|
'lab.html',
|
|
'pharmacy.html',
|
|
'staff.html',
|
|
'settings.html',
|
|
'style-guide.html'
|
|
];
|
|
|
|
async function runTests() {
|
|
console.log('--- UI Frontend Tests ---');
|
|
let allPassed = true;
|
|
|
|
for (const file of filesToTest) {
|
|
const filePath = path.join(__dirname, file);
|
|
const html = fs.readFileSync(filePath, 'utf8');
|
|
|
|
// Setup DOM
|
|
const dom = new JSDOM(html, { runScripts: "dangerously" });
|
|
const { window } = dom;
|
|
const { document } = window;
|
|
|
|
// Verify globals.js is included
|
|
const scripts = Array.from(document.querySelectorAll('script'));
|
|
const hasGlobalsJS = scripts.some(s => s.src.includes('globals.js'));
|
|
if (!hasGlobalsJS) {
|
|
console.error(`❌ [FAILED] ${file}: Missing globals.js inclusion!`);
|
|
allPassed = false;
|
|
}
|
|
|
|
// Check buttons
|
|
const buttons = document.querySelectorAll('button');
|
|
let deadButtons = 0;
|
|
|
|
buttons.forEach(btn => {
|
|
const hasOnClick = btn.hasAttribute('onclick');
|
|
const hasId = btn.hasAttribute('id');
|
|
const isSubmit = btn.type === 'submit';
|
|
const hasClass = btn.className.includes('btn');
|
|
|
|
// If it's a structural button without logic, it's a dead click
|
|
if (!hasOnClick && !hasId && !isSubmit && !btn.className.includes('close')) {
|
|
deadButtons++;
|
|
console.error(`❌ [FAILED] ${file}: Dead button found -> "${btn.textContent.trim()}"`);
|
|
}
|
|
|
|
// Ensure global classes are used
|
|
if (!hasClass && !btn.className.includes('opt') && !btn.className.includes('close')) {
|
|
console.warn(`⚠️ [WARNING] ${file}: Button missing global .btn class -> "${btn.textContent.trim()}"`);
|
|
}
|
|
});
|
|
|
|
if (hasGlobalsJS && deadButtons === 0) {
|
|
console.log(`✅ [PASSED] ${file}: All ${buttons.length} buttons are wired and globals.js is loaded.`);
|
|
} else {
|
|
allPassed = false;
|
|
}
|
|
}
|
|
|
|
if (allPassed) {
|
|
console.log('\n✅✅ ALL UI TESTS PASSED! Zero dead clicks confirmed.');
|
|
} else {
|
|
console.log('\n❌❌ SOME UI TESTS FAILED. Please review the logs above.');
|
|
}
|
|
}
|
|
|
|
runTests().catch(console.error);
|