PedroM2626's picture
chore: add project configuration, tests, and documentation
c1b16e4
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()