File size: 1,970 Bytes
c1b16e4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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()