|
|
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): |
|
|
|
|
|
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: |
|
|
|
|
|
texto = extrair_texto(test_filename) |
|
|
self.assertEqual(texto, content) |
|
|
|
|
|
|
|
|
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") |
|
|
|
|
|
|
|
|
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() |
|
|
|