/** * Teste completo de Backup e Log * Executar no console: runBackupAndLogTest() */ (function(){ async function run(){ const results = []; const add = (ok, msg) => { results.push({ ok, msg }); console.log(`${ok ? '✅' : '❌'} ${msg}`); }; try { if (!window.backupManager || !window.dataManager) { add(false, 'Managers não encontrados (backupManager/dataManager)'); return { results }; } console.group('🔧 Teste: Backup e Log'); // Estado inicial const beforeBackups = window.backupManager.getBackups(); console.log('Backups existentes:', beforeBackups.length); // 1) Criar backup manual const newBackup = await window.backupManager.createBackup('Backup manual - Teste'); add(typeof newBackup.timestamp === 'number', 'timestamp numérico no backup criado'); add(new Date(newBackup.createdAt).toString() !== 'Invalid Date', 'data válida no backup criado'); add(typeof newBackup.sizeBytes === 'number' && newBackup.sizeBytes > 0, 'sizeBytes válido no backup criado'); add(typeof newBackup.size === 'string' && /B|KB|MB|GB/.test(newBackup.size), 'size formatado no backup criado'); // 2) Listagem sem "Invalid Date" ou "undefined" const list = window.backupManager.getBackups(); const invalids = list.filter(b => { const d = Number(b.createdAt ?? b.timestamp); return isNaN(d) || new Date(d).toString() === 'Invalid Date' || b.size == null || b.sizeBytes == null; }); add(invalids.length === 0, 'lista de backups sem "Invalid Date"/"undefined"'); // 3) Restauração (escuta evento) let restoredEvent = false; const handler = () => { restoredEvent = true; }; document.addEventListener('backupRestored', handler, { once: true }); await window.backupManager.restoreBackup(newBackup.id); add(restoredEvent === true, 'evento de restauração disparado'); // 4) Remoção do backup criado window.backupManager.removeBackup(newBackup.id); const afterRemoval = window.backupManager.getBackups(); add(!afterRemoval.find(b => b.id === newBackup.id), 'backup de teste removido com sucesso'); // 5) Atualização de logs (metadata) const metaBefore = window.dataManager.getMetadata(); await window.dataManager.updateAllData(); const metaAfter = window.dataManager.getMetadata(); add(metaAfter && metaBefore && metaAfter.lastUpdate > metaBefore.lastUpdate, 'log: lastUpdate atualizado'); add(metaAfter && (metaAfter.successCount + metaAfter.errorCount === metaAfter.totalTypes), 'log: contagem consistente'); console.groupEnd(); return { results, backups: window.backupManager.getBackups(), metadata: window.dataManager.getMetadata() }; } catch (err) { add(false, `Erro no teste: ${err.message}`); return { results, error: err }; } } window.runBackupAndLogTest = run; })();