""" Teste Básico do Sistema Testa funcionalidades básicas sem dependências pesadas """ import sys import os # Adicionar diretório app ao path sys.path.append(os.path.join(os.path.dirname(__file__), 'app')) def test_structure(): """Testa estrutura do projeto""" print("📁 Testando estrutura do projeto...") required_files = [ 'app/italian_tutor_agent.py', 'app/translation_module.py', 'app/grammar_module.py', 'app/quiz_module.py', 'app/memory_manager.py', 'app/gradio_interface.py', 'app/__init__.py', 'app.py', 'requirements.txt', 'README.md' ] missing_files = [] for file_path in required_files: if not os.path.exists(file_path): missing_files.append(file_path) if missing_files: print(f"❌ Arquivos faltando: {missing_files}") return False else: print("✅ Todos os arquivos necessários estão presentes") return True def test_syntax(): """Testa sintaxe dos arquivos Python""" print("🔍 Testando sintaxe dos arquivos...") python_files = [ 'app/italian_tutor_agent.py', 'app/translation_module.py', 'app/grammar_module.py', 'app/quiz_module.py', 'app/memory_manager.py', 'app/gradio_interface.py', 'app.py' ] syntax_errors = [] for file_path in python_files: try: with open(file_path, 'r', encoding='utf-8') as f: code = f.read() # Compilar para verificar sintaxe compile(code, file_path, 'exec') print(f"✅ {file_path}") except SyntaxError as e: syntax_errors.append(f"{file_path}: {e}") print(f"❌ {file_path}: {e}") except Exception as e: print(f"⚠️ {file_path}: {e}") if syntax_errors: print(f"❌ Erros de sintaxe encontrados: {len(syntax_errors)}") return False else: print("✅ Todos os arquivos têm sintaxe válida") return True def test_basic_logic(): """Testa lógica básica sem importações pesadas""" print("⚡ Testando lógica básica...") try: # Testar detecção de idioma (lógica simples) def detect_language_simple(text): text_lower = text.lower() pt_words = ['o', 'a', 'que', 'não', 'muito', 'obrigado'] it_words = ['il', 'la', 'che', 'non', 'molto', 'grazie'] pt_score = sum(1 for word in pt_words if word in text_lower) it_score = sum(1 for word in it_words if word in text_lower) if pt_score > it_score: return 'pt' elif it_score > pt_score: return 'it' else: return 'unknown' # Testes assert detect_language_simple("Muito obrigado") == 'pt' assert detect_language_simple("Grazie molto") == 'it' print("✅ Detecção de idioma funcionando") # Testar identificação de tópicos gramaticais def identify_topic_simple(text): text_lower = text.lower() if any(word in text_lower for word in ['verbo', 'conjugação', 'essere', 'avere']): return 'verbos' elif any(word in text_lower for word in ['substantivo', 'masculino', 'feminino']): return 'substantivos' elif any(word in text_lower for word in ['preposição', 'di', 'a', 'da']): return 'preposições' else: return 'geral' assert identify_topic_simple("Como conjugar verbos?") == 'verbos' assert identify_topic_simple("Substantivos masculinos") == 'substantivos' print("✅ Identificação de tópicos funcionando") # Testar geração de ID único import uuid quiz_id = str(uuid.uuid4())[:8] assert len(quiz_id) == 8 print("✅ Geração de IDs funcionando") return True except Exception as e: print(f"❌ Erro na lógica básica: {e}") return False def test_file_contents(): """Testa conteúdo dos arquivos principais""" print("📄 Testando conteúdo dos arquivos...") try: # Verificar README with open('README.md', 'r', encoding='utf-8') as f: readme_content = f.read() required_sections = ['Agente de IA para Ensino de Italiano', 'Arquitetura', 'Funcionalidades'] for section in required_sections: if section not in readme_content: print(f"❌ Seção '{section}' não encontrada no README") return False print("✅ README contém seções necessárias") # Verificar requirements.txt with open('requirements.txt', 'r', encoding='utf-8') as f: requirements = f.read() required_packages = ['langchain', 'gradio', 'transformers'] for package in required_packages: if package not in requirements: print(f"❌ Pacote '{package}' não encontrado em requirements.txt") return False print("✅ requirements.txt contém pacotes necessários") # Verificar app.py principal with open('app.py', 'r', encoding='utf-8') as f: app_content = f.read() if 'launch_app' not in app_content: print("❌ Função launch_app não encontrada em app.py") return False print("✅ app.py contém função principal") return True except Exception as e: print(f"❌ Erro ao verificar conteúdo: {e}") return False def main(): """Executa todos os testes básicos""" print("🧪 TESTES BÁSICOS DO SISTEMA") print("=" * 40) tests = [ ("Estrutura do Projeto", test_structure), ("Sintaxe dos Arquivos", test_syntax), ("Lógica Básica", test_basic_logic), ("Conteúdo dos Arquivos", test_file_contents) ] passed = 0 total = len(tests) for test_name, test_func in tests: print(f"\n{test_name}:") try: if test_func(): passed += 1 print(f"✅ {test_name} PASSOU") else: print(f"❌ {test_name} FALHOU") except Exception as e: print(f"❌ {test_name} ERRO: {e}") print("\n" + "=" * 40) print(f"📊 RESULTADO: {passed}/{total} testes passaram") if passed == total: print("🎉 TODOS OS TESTES BÁSICOS PASSARAM!") print("✅ Estrutura do projeto está correta") else: print("⚠️ ALGUNS TESTES FALHARAM") print("🔧 Verifique os erros acima") return passed == total if __name__ == "__main__": success = main() sys.exit(0 if success else 1)