Files
myworkspace/Linkding Browser Extension/LinkdingSync/tests/orchestrator.js

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;