import unittest from unittest.mock import patch, MagicMock from app import extrair_texto, processar_texto, chat_inteligente import os class TestAcceptance(unittest.TestCase): """ Simula o fluxo completo do usuário: 1. Upload de arquivo 2. Extração de texto 3. Processamento de NLU 4. Pergunta via Chat """ @patch('app.nlu.analyze') @patch('app.obter_iam_token') @patch('app.requests.post') def test_full_user_flow(self, mock_post, mock_token, mock_analyze): # 1. Setup test_filename = "user_doc.txt" content = "Este é um documento de teste sobre Watsonx AI." with open(test_filename, "w", encoding="utf-8") as f: f.write(content) try: # 2. Extração texto = extrair_texto(test_filename) self.assertEqual(texto, content) # 3. Análise NLU (Mocking) mock_analyze.side_effect = [ MagicMock(get_result=lambda: {'summarization': {'text': 'Resumo'}}), MagicMock(get_result=lambda: {'keywords': [{'text': 'watsonx'}]}), MagicMock(get_result=lambda: {'categories': [{'label': '/tech'}]}) ] resumo, topicos, classificacao = processar_texto(texto) self.assertEqual(resumo, "Resumo") # 4. Chat (Mocking) mock_token.return_value = "token123" mock_resp = MagicMock() mock_resp.status_code = 200 mock_resp.json.return_value = {'choices': [{'message': {'content': 'Resposta da IA'}}]} mock_post.return_value = mock_resp resposta = chat_inteligente("O que é Watsonx?", texto) self.assertEqual(resposta, "Resposta da IA") finally: if os.path.exists(test_filename): os.remove(test_filename) if __name__ == "__main__": unittest.main()