feat(source2): push all latest files - device labeling, help system, proxy docs, database isolation fix
- Added DOKUMENTASI-FILTER-PER-SITE.md (site isolation docs) - Fixed start-with-env.js to force-load .env.production - Fixed MONGODB_URI hostname from mongodb-netify to mongodb.prod.proit.id - Updated .gitignore to exclude sensitive scripts and credential files - Minor UI and labeling improvements
This commit is contained in:
1 parent
a403f752f3
commit
dd4c8f6876
385 files changed
+31016
-8268
No files matched your search
@@ -0,0 +1,98 @@
|
||||
// test/branding_unit_test.js
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const vm = require('vm');
|
||||
|
||||
console.log('=========================================');
|
||||
console.log(' RUNNING TDD UNIT TEST FOR BRANDING LOGIC');
|
||||
console.log('=========================================\n');
|
||||
|
||||
// 1. Read and transpile src/lib/branding.ts slightly to make it run in Node.js
|
||||
const brandingCodePath = path.join(__dirname, '../src/lib/branding.ts');
|
||||
let code = fs.readFileSync(brandingCodePath, 'utf8');
|
||||
|
||||
// Strip TypeScript interfaces, return types, parameter types, and export keywords
|
||||
code = code.replace(/export\s+interface\s+\w+\s*\{[^}]*\}/g, '');
|
||||
code = code.replace(/:\s*Branding\b/g, '');
|
||||
code = code.replace(/selectedSiteUuid\?\s*:\s*string/g, 'selectedSiteUuid');
|
||||
code = code.replace(/export\s+/g, '');
|
||||
|
||||
let testCount = 0;
|
||||
let passedCount = 0;
|
||||
|
||||
function assert(label, condition) {
|
||||
testCount++;
|
||||
if (condition) {
|
||||
console.log(` ✓ PASSED: ${label}`);
|
||||
passedCount++;
|
||||
} else {
|
||||
console.error(` ✗ FAILED: ${label}`);
|
||||
}
|
||||
}
|
||||
|
||||
// Helper to run getSiteBranding with mocked environment
|
||||
function runGetSiteBranding({ selectedSiteUuid, hostname, search, localStorageVal }) {
|
||||
const sandbox = {
|
||||
window: {
|
||||
location: {
|
||||
hostname: hostname || 'localhost',
|
||||
search: search || ''
|
||||
}
|
||||
},
|
||||
localStorage: {
|
||||
getItem: () => localStorageVal || null
|
||||
},
|
||||
console
|
||||
};
|
||||
vm.createContext(sandbox);
|
||||
vm.runInContext(code, sandbox);
|
||||
return sandbox.getSiteBranding(selectedSiteUuid);
|
||||
}
|
||||
|
||||
try {
|
||||
// Test Case 1: Default branding (no local storage, localhost)
|
||||
const brand1 = runGetSiteBranding({
|
||||
hostname: 'localhost'
|
||||
});
|
||||
assert('Default branding should be BackOne', brand1.name === 'BackOne' && brand1.logo === '/backone-logo.png');
|
||||
|
||||
// Test Case 2: SIAB site UUID passed explicitly on demoplace.my.id
|
||||
const brand2 = runGetSiteBranding({
|
||||
selectedSiteUuid: '6681452d_9cae_4ff4_8ae8_0d504774265e',
|
||||
hostname: 'demoplace.my.id'
|
||||
});
|
||||
assert('SIAB site UUID on demoplace.my.id should return BackOne branding', brand2.name === 'BackOne' && brand2.logo === '/backone-logo.png');
|
||||
|
||||
// Test Case 3: SIAB site UUID in localStorage on demoplace.my.id
|
||||
const brand3 = runGetSiteBranding({
|
||||
localStorageVal: '6681452d_9cae_4ff4_8ae8_0d504774265e',
|
||||
hostname: 'demoplace.my.id'
|
||||
});
|
||||
assert('SIAB site UUID in localStorage on demoplace.my.id should return BackOne branding', brand3.name === 'BackOne' && brand3.logo === '/backone-logo.png');
|
||||
|
||||
// Test Case 4: Nexus site UUID passed explicitly
|
||||
const brand4 = runGetSiteBranding({
|
||||
selectedSiteUuid: 'd7902405_0dc2_458b_8584_ed4d24b64f24',
|
||||
hostname: 'localhost'
|
||||
});
|
||||
assert('Nexus site UUID should return Nexus branding', brand4.name === 'Nexus' && brand4.logo === '/nexus-logo.png');
|
||||
|
||||
// Test Case 5: Nexus fallback on demoplace.my.id when no site is selected
|
||||
const brand5 = runGetSiteBranding({
|
||||
hostname: 'demoplace.my.id'
|
||||
});
|
||||
assert('Fallback on demoplace.my.id should be Nexus branding', brand5.name === 'Nexus' && brand5.logo === '/nexus-logo.png');
|
||||
|
||||
console.log(`\n=========================================`);
|
||||
console.log(` RESULT: ${passedCount} / ${testCount} tests passed.`);
|
||||
console.log(`=========================================\n`);
|
||||
|
||||
if (passedCount !== testCount) {
|
||||
process.exit(1);
|
||||
} else {
|
||||
process.exit(0);
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('Test execution failed with error:', err);
|
||||
process.exit(1);
|
||||
}
|
||||
Reference in new issue
Block a user