Initial commit SteelBase - Oficiais e Funcionando
This commit is contained in:
310
js/tests/test-persistencia.js
Normal file
310
js/tests/test-persistencia.js
Normal file
@@ -0,0 +1,310 @@
|
||||
/**
|
||||
* Script de Teste para Sistema de Persistência
|
||||
* Testa as funcionalidades do AdminConfigManager e BackupManager
|
||||
*/
|
||||
|
||||
class PersistenceTest {
|
||||
constructor() {
|
||||
this.tests = [];
|
||||
this.results = [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Executa todos os testes de persistência
|
||||
*/
|
||||
async runAllTests() {
|
||||
console.log('🧪 Iniciando testes de persistência...');
|
||||
|
||||
// Aguardar carregamento dos módulos
|
||||
await this.waitForModules();
|
||||
|
||||
// Executar testes
|
||||
await this.testConfigPersistence();
|
||||
await this.testBackupSystem();
|
||||
await this.testThemePersistence();
|
||||
await this.testResetFunctionality();
|
||||
|
||||
// Mostrar resultados
|
||||
this.showResults();
|
||||
|
||||
console.log('✅ Testes de persistência concluídos!');
|
||||
}
|
||||
|
||||
/**
|
||||
* Aguarda os módulos necessários estarem carregados
|
||||
*/
|
||||
async waitForModules() {
|
||||
console.log('⏳ Aguardando módulos...');
|
||||
|
||||
let attempts = 0;
|
||||
const maxAttempts = 50; // 5 segundos
|
||||
|
||||
while (attempts < maxAttempts) {
|
||||
// Verificar instâncias globais inicializadas pelos módulos
|
||||
if (window.adminConfigManager && window.backupManager && window.toastManager) {
|
||||
console.log('✅ Módulos (instâncias) carregados');
|
||||
return;
|
||||
}
|
||||
|
||||
// Como fallback, se as classes existirem mas instâncias ainda não, tentar inicializar
|
||||
if (!window.adminConfigManager && typeof AdminConfigManager !== 'undefined') {
|
||||
try { window.adminConfigManager = new AdminConfigManager(); } catch(e) {}
|
||||
}
|
||||
if (!window.backupManager && typeof BackupManager !== 'undefined') {
|
||||
try { window.backupManager = new BackupManager(); } catch(e) {}
|
||||
}
|
||||
if (!window.toastManager && typeof ToastManager !== 'undefined') {
|
||||
try { window.toastManager = new ToastManager(); } catch(e) {}
|
||||
}
|
||||
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
attempts++;
|
||||
}
|
||||
|
||||
throw new Error('❌ Módulos não carregados após 5 segundos');
|
||||
}
|
||||
|
||||
/**
|
||||
* Testa persistência de configurações
|
||||
*/
|
||||
async testConfigPersistence() {
|
||||
console.log('📝 Testando persistência de configurações...');
|
||||
|
||||
try {
|
||||
// Criar instância do config manager
|
||||
const configManager = new AdminConfigManager();
|
||||
|
||||
// Testar configuração inicial
|
||||
const initialConfig = configManager.getConfig();
|
||||
this.addResult('Config inicial', !!initialConfig, 'Configuração inicial carregada');
|
||||
|
||||
// Testar salvamento de configuração
|
||||
configManager.updateConfig('app.name', 'Aço Calc Pro - Teste');
|
||||
configManager.updateConfig('app.version', '2.0.0');
|
||||
configManager.updateConfig('theme.name', 'light');
|
||||
|
||||
// Recarregar e verificar se persistiu
|
||||
const configManager2 = new AdminConfigManager();
|
||||
const config2 = configManager2.getConfig();
|
||||
|
||||
this.addResult('Salvamento app.name', config2.app.name === 'Aço Calc Pro - Teste', 'Nome da aplicação persistido');
|
||||
this.addResult('Salvamento app.version', config2.app.version === '2.0.0', 'Versão persistida');
|
||||
this.addResult('Salvamento theme.name', config2.theme.name === 'light', 'Tema persistido');
|
||||
|
||||
console.log('✅ Testes de persistência de configurações concluídos');
|
||||
|
||||
} catch (error) {
|
||||
this.addResult('Config Persistence', false, `Erro: ${error.message}`);
|
||||
console.error('❌ Erro nos testes de configuração:', error);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Testa sistema de backup
|
||||
*/
|
||||
async testBackupSystem() {
|
||||
console.log('💾 Testando sistema de backup...');
|
||||
|
||||
try {
|
||||
const backupManager = new BackupManager();
|
||||
|
||||
// Testar criação de backup
|
||||
const backup = await backupManager.createBackup();
|
||||
this.addResult('Criação backup', !!backup.id, 'Backup criado com ID');
|
||||
|
||||
// Testar listagem de backups
|
||||
const backups = backupManager.getBackups();
|
||||
this.addResult('Listagem backups', backups.length > 0, `${backups.length} backup(s) encontrado(s)`);
|
||||
|
||||
// Testar recuperação de backup específico (via lista)
|
||||
const specificBackup = backups.find(b => b.timestamp === backup.timestamp);
|
||||
this.addResult('Recuperação backup', !!specificBackup, 'Backup recuperado por timestamp');
|
||||
|
||||
// Testar remoção de backup (usar timestamp)
|
||||
backupManager.removeBackup(backup.timestamp);
|
||||
const backupsAfterRemove = backupManager.getBackups();
|
||||
this.addResult('Remoção backup', backupsAfterRemove.length === backups.length - 1, 'Backup removido com sucesso');
|
||||
|
||||
console.log('✅ Testes de backup concluídos');
|
||||
|
||||
} catch (error) {
|
||||
this.addResult('Backup System', false, `Erro: ${error.message}`);
|
||||
console.error('❌ Erro nos testes de backup:', error);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Testa persistência de tema
|
||||
*/
|
||||
async testThemePersistence() {
|
||||
console.log('🎨 Testando persistência de tema...');
|
||||
|
||||
try {
|
||||
const configManager = new AdminConfigManager();
|
||||
|
||||
// Testar diferentes temas
|
||||
const themes = ['dark', 'light', 'auto'];
|
||||
|
||||
for (const theme of themes) {
|
||||
configManager.updateConfig('theme.name', theme);
|
||||
|
||||
// Recarregar e verificar
|
||||
const configManager2 = new AdminConfigManager();
|
||||
const config2 = configManager2.getConfig();
|
||||
|
||||
this.addResult(`Tema ${theme}`, config2.theme.name === theme, `Tema ${theme} persistido`);
|
||||
}
|
||||
|
||||
console.log('✅ Testes de tema concluídos');
|
||||
|
||||
} catch (error) {
|
||||
this.addResult('Theme Persistence', false, `Erro: ${error.message}`);
|
||||
console.error('❌ Erro nos testes de tema:', error);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Testa funcionalidade de reset
|
||||
*/
|
||||
async testResetFunctionality() {
|
||||
console.log('🔄 Testando funcionalidade de reset...');
|
||||
|
||||
try {
|
||||
const configManager = new AdminConfigManager();
|
||||
|
||||
// Modificar configurações
|
||||
configManager.updateConfig('app.name', 'Nome Modificado');
|
||||
configManager.updateConfig('app.version', '9.9.9');
|
||||
|
||||
// Resetar
|
||||
configManager.resetConfig();
|
||||
|
||||
// Verificar se voltou ao padrão
|
||||
const config = configManager.getConfig();
|
||||
// Estrutura padrão usa chaves top-level: appName e version
|
||||
const isDefaultName = config.appName === 'AÇO CALC PRO';
|
||||
const isDefaultVersion = config.version === '1.0.0';
|
||||
|
||||
this.addResult('Reset app.name', isDefaultName, 'Nome resetado para padrão');
|
||||
this.addResult('Reset app.version', isDefaultVersion, 'Versão resetada para padrão');
|
||||
|
||||
console.log('✅ Testes de reset concluídos');
|
||||
|
||||
} catch (error) {
|
||||
this.addResult('Reset Functionality', false, `Erro: ${error.message}`);
|
||||
console.error('❌ Erro nos testes de reset:', error);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Adiciona resultado de teste
|
||||
*/
|
||||
addResult(testName, success, message) {
|
||||
this.results.push({
|
||||
name: testName,
|
||||
success: success,
|
||||
message: message,
|
||||
timestamp: new Date().toISOString()
|
||||
});
|
||||
|
||||
const status = success ? '✅' : '❌';
|
||||
console.log(`${status} ${testName}: ${message}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* Mostra resultados dos testes
|
||||
*/
|
||||
showResults() {
|
||||
const totalTests = this.results.length;
|
||||
const passedTests = this.results.filter(r => r.success).length;
|
||||
const failedTests = totalTests - passedTests;
|
||||
|
||||
console.log('\n📊 RESUMO DOS TESTES:');
|
||||
console.log(`Total de testes: ${totalTests}`);
|
||||
console.log(`✅ Passou: ${passedTests}`);
|
||||
console.log(`❌ Falhou: ${failedTests}`);
|
||||
console.log(`Taxa de sucesso: ${((passedTests / totalTests) * 100).toFixed(1)}%`);
|
||||
|
||||
// Mostrar falhas em detalhes
|
||||
if (failedTests > 0) {
|
||||
console.log('\n📋 FALHAS DETALHADAS:');
|
||||
this.results.filter(r => !r.success).forEach(result => {
|
||||
console.log(`❌ ${result.name}: ${result.message}`);
|
||||
});
|
||||
}
|
||||
|
||||
// Testar se o ToastManager está disponível para mostrar resultado
|
||||
if (window.toastManager) {
|
||||
const successRate = (passedTests / totalTests) * 100;
|
||||
if (successRate === 100) {
|
||||
window.toastManager.success(`🧪 Todos os testes de persistência passaram! (${passedTests}/${totalTests})`);
|
||||
} else if (successRate >= 80) {
|
||||
window.toastManager.warning(`🧪 ${passedTests}/${totalTests} testes passaram (${successRate.toFixed(1)}%)`);
|
||||
} else {
|
||||
window.toastManager.error(`🧪 Apenas ${passedTests}/${totalTests} testes passaram (${successRate.toFixed(1)}%)`);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Função para testar persistência após reload
|
||||
function testarPersistenciaAposReload() {
|
||||
console.log('🔄 Testando persistência após reload da página...');
|
||||
|
||||
// Salvar configuração de teste
|
||||
if (window.adminConfigManager) {
|
||||
window.adminConfigManager.updateConfig('app.name', 'Aço Calc Pro - Teste Reload');
|
||||
window.adminConfigManager.updateConfig('theme.name', 'light');
|
||||
|
||||
console.log('✅ Configurações de teste salvas');
|
||||
console.log('🔄 Recarregando página em 2 segundos...');
|
||||
|
||||
setTimeout(() => {
|
||||
location.reload();
|
||||
}, 2000);
|
||||
} else {
|
||||
// Verificar se as configurações persistiram após reload
|
||||
if (window.adminConfigManager) {
|
||||
const config = window.adminConfigManager.getConfig();
|
||||
|
||||
if (config.app.name === 'Aço Calc Pro - Teste Reload') {
|
||||
console.log('✅ Persistência após reload: SUCESSO!');
|
||||
if (window.toastManager) {
|
||||
window.toastManager.success('✅ Configurações persistiram após reload!');
|
||||
}
|
||||
} else {
|
||||
console.log('❌ Persistência após reload: FALHA');
|
||||
if (window.toastManager) {
|
||||
window.toastManager.error('❌ Configurações não persistiram após reload');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Auto-executar testes quando os módulos estiverem prontos
|
||||
if (typeof window !== 'undefined') {
|
||||
window.addEventListener('load', async () => {
|
||||
console.log('🧪 Sistema de testes de persistência carregado');
|
||||
|
||||
// Aguardar um pouco para garantir que tudo está carregado
|
||||
setTimeout(async () => {
|
||||
try {
|
||||
const tester = new PersistenceTest();
|
||||
await tester.runAllTests();
|
||||
} catch (error) {
|
||||
console.error('❌ Erro ao executar testes:', error);
|
||||
}
|
||||
}, 1000);
|
||||
});
|
||||
}
|
||||
|
||||
// Disponibilizar funções globalmente para testes manuais
|
||||
window.testarPersistencia = () => {
|
||||
const tester = new PersistenceTest();
|
||||
tester.runAllTests();
|
||||
};
|
||||
|
||||
window.testarPersistenciaAposReload = testarPersistenciaAposReload;
|
||||
|
||||
console.log('🧪 Sistema de testes de persistência inicializado');
|
||||
Reference in New Issue
Block a user