183 lines
4.9 KiB
JavaScript
183 lines
4.9 KiB
JavaScript
/*
|
|
* LinkdingSync Test Orchestrator
|
|
* Main entry point for running test modules
|
|
*
|
|
* Usage in Firefox DevTools Console:
|
|
* 1. Load this file and utils/test modules
|
|
* 2. Fill in CONFIG in tests/utils.js
|
|
* 3. Run runAllTests() or specific test modules
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
// ====================================================================
|
|
// ORCHESTRATOR - Main Test Runner
|
|
// ====================================================================
|
|
|
|
const LinkdingSyncTests = window.LinkdingSyncTests || {};
|
|
|
|
// Test modules registry
|
|
const TestModules = {
|
|
isolation: null,
|
|
conflicts: null,
|
|
deletion: null,
|
|
bundles: null
|
|
};
|
|
|
|
// Load test modules
|
|
function loadModules() {
|
|
// Load isolation tests
|
|
if (typeof TestIsolation !== 'undefined') {
|
|
TestModules.isolation = TestIsolation;
|
|
}
|
|
|
|
// Load conflicts tests
|
|
if (typeof TestConflicts !== 'undefined') {
|
|
TestModules.conflicts = TestConflicts;
|
|
}
|
|
|
|
// Load deletion tests
|
|
if (typeof TestDeletion !== 'undefined') {
|
|
TestModules.deletion = TestDeletion;
|
|
}
|
|
|
|
// Load bundles tests
|
|
if (typeof TestBundles !== 'undefined') {
|
|
TestModules.bundles = TestBundles;
|
|
}
|
|
|
|
console.log('[Orchestrator] Modules loaded:', Object.keys(TestModules).filter(k => TestModules[k]).join(', '));
|
|
}
|
|
|
|
// Run all tests
|
|
async function runAllTests() {
|
|
console.log(''.padEnd(60, '='));
|
|
console.log(' LINKDINGSYNC - Complete Test Suite');
|
|
console.log('='.repeat(60));
|
|
console.log('');
|
|
|
|
LinkdingSyncTests.Formatters.consoleHeader('Test Suite Execution');
|
|
|
|
const results = [];
|
|
let passed = 0;
|
|
let failed = 0;
|
|
|
|
try {
|
|
// Run isolation tests
|
|
if (TestModules.isolation) {
|
|
LinkdingSyncTests.Formatters.consoleHeader('Isolation Tests');
|
|
const result = await TestModules.isolation.run();
|
|
results.push(...result);
|
|
updateCounts(result);
|
|
}
|
|
|
|
// Run conflicts tests
|
|
if (TestModules.conflicts) {
|
|
LinkdingSyncTests.Formatters.consoleHeader('Conflict Resolution Tests');
|
|
const result = await TestModules.conflicts.run();
|
|
results.push(...result);
|
|
updateCounts(result);
|
|
}
|
|
|
|
// Run deletion tests
|
|
if (TestModules.deletion) {
|
|
LinkdingSyncTests.Formatters.consoleHeader('Deletion Tests');
|
|
const result = await TestModules.deletion.run();
|
|
results.push(...result);
|
|
updateCounts(result);
|
|
}
|
|
|
|
// Run bundles tests
|
|
if (TestModules.bundles) {
|
|
LinkdingSyncTests.Formatters.consoleHeader('Bundle Tests');
|
|
const result = await TestModules.bundles.run();
|
|
results.push(...result);
|
|
updateCounts(result);
|
|
}
|
|
|
|
} catch (error) {
|
|
console.error('Test suite error:', error.message);
|
|
console.log('');
|
|
console.log('[Orchestrator] Attempting cleanup...');
|
|
try {
|
|
await LinkdingSyncTests.Helpers.resetBookmarks();
|
|
} catch (cleanupError) {
|
|
console.error('Cleanup failed:', cleanupError.message);
|
|
}
|
|
}
|
|
|
|
// Summary
|
|
LinkdingSyncTests.Formatters.consoleHeader('Test Summary');
|
|
console.log(` Total: ${results.length}`);
|
|
console.log(` Passed: ${passed}`);
|
|
console.log(` Failed: ${failed}`);
|
|
console.log(` Warning: ${results.length - passed - failed}`);
|
|
console.log(''.padEnd(60, '='));
|
|
|
|
return results;
|
|
}
|
|
|
|
// Update pass/fail counts
|
|
function updateCounts(results) {
|
|
results.forEach(r => {
|
|
if (r.pass === true) passed++;
|
|
else if (r.pass === false) failed++;
|
|
});
|
|
}
|
|
|
|
// Run specific test module
|
|
async function runModule(moduleName) {
|
|
if (!TestModules[moduleName]) {
|
|
console.error(`[Orchestrator] Unknown module: ${moduleName}`);
|
|
return [];
|
|
}
|
|
|
|
console.log(`\nRunning ${moduleName} tests...`);
|
|
return await TestModules[moduleName].run();
|
|
}
|
|
|
|
// Reset and run all tests
|
|
async function runAllTestsWithReset() {
|
|
console.log(''.padEnd(60, '='));
|
|
console.log(' LINKDINGSYNC - Test Suite with Reset');
|
|
console.log('='.repeat(60));
|
|
|
|
try {
|
|
await LinkdingSyncTests.Helpers.resetBookmarks();
|
|
console.log('[Reset] Test bookmarks cleaned');
|
|
} catch (error) {
|
|
console.error('[Reset] Failed:', error.message);
|
|
}
|
|
|
|
return await runAllTests();
|
|
}
|
|
|
|
// ====================================================================
|
|
// EXPOSE FUNCTIONS
|
|
// ====================================================================
|
|
|
|
window.LinkdingSyncTests = {
|
|
runAllTests,
|
|
runAllTestsWithReset,
|
|
runModule,
|
|
TestModules
|
|
};
|
|
|
|
console.log('');
|
|
console.log('LinkdingSync Test Orchestrator loaded');
|
|
console.log('');
|
|
console.log('Commands:');
|
|
console.log(' runAllTests() - Run all tests');
|
|
console.log(' runAllTestsWithReset() - Run with cleanup first');
|
|
console.log(' runModule("name") - Run specific test module');
|
|
console.log(' reset() - Clean up test bookmarks');
|
|
console.log('');
|
|
|
|
// Export reset function
|
|
async function reset() {
|
|
console.log('[Orchestrator] Resetting test bookmarks...');
|
|
await LinkdingSyncTests.Helpers.resetBookmarks();
|
|
console.log('[Orchestrator] Reset complete');
|
|
}
|
|
|
|
window.LinkdingSyncTests.reset = reset; |