File size: 4,123 Bytes
6b29104 |
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 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
"""
Testes básicos para o AgentPDF.
Este módulo contém testes unitários básicos para verificar
o funcionamento dos componentes principais.
"""
import unittest
import os
import sys
from pathlib import Path
# Adiciona o diretório raiz ao path
root_dir = Path(__file__).parent.parent
sys.path.insert(0, str(root_dir))
from utils.config import Config
from utils.logger import setup_logger
from agents.state import PDFState, ProcessingStatus
class TestConfig(unittest.TestCase):
"""Testes para a configuração."""
def test_config_attributes(self):
"""Testa se os atributos de configuração existem."""
self.assertTrue(hasattr(Config, 'DEFAULT_MODEL'))
self.assertTrue(hasattr(Config, 'CHUNK_SIZE'))
self.assertTrue(hasattr(Config, 'TOP_K_DOCUMENTS'))
def test_model_config(self):
"""Testa a configuração do modelo."""
model_config = Config.get_model_config()
self.assertIn('model', model_config)
self.assertIn('temperature', model_config)
self.assertIn('max_tokens', model_config)
def test_text_splitter_config(self):
"""Testa a configuração do text splitter."""
splitter_config = Config.get_text_splitter_config()
self.assertIn('chunk_size', splitter_config)
self.assertIn('chunk_overlap', splitter_config)
class TestState(unittest.TestCase):
"""Testes para as estruturas de estado."""
def test_processing_status(self):
"""Testa os status de processamento."""
self.assertEqual(ProcessingStatus.IDLE, "idle")
self.assertEqual(ProcessingStatus.LOADING_PDF, "loading_pdf")
self.assertEqual(ProcessingStatus.ERROR, "error")
def test_pdf_state_structure(self):
"""Testa a estrutura do PDFState."""
# Verifica se PDFState é um TypedDict válido
self.assertTrue(hasattr(PDFState, '__annotations__'))
# Verifica se tem os campos essenciais
annotations = PDFState.__annotations__
self.assertIn('messages', annotations)
self.assertIn('pdf_path', annotations)
self.assertIn('processing_status', annotations)
class TestLogger(unittest.TestCase):
"""Testes para o sistema de logging."""
def test_logger_creation(self):
"""Testa a criação do logger."""
logger = setup_logger("test", "INFO")
self.assertIsNotNone(logger)
self.assertEqual(logger.name, "test")
class TestDirectories(unittest.TestCase):
"""Testes para estrutura de diretórios."""
def test_required_directories_exist(self):
"""Testa se os diretórios necessários existem."""
required_dirs = [
'agents',
'nodes',
'utils',
'gradio',
'uploaded_data'
]
for dir_name in required_dirs:
self.assertTrue(
os.path.exists(dir_name),
f"Diretório {dir_name} não encontrado"
)
class TestImports(unittest.TestCase):
"""Testa se todos os módulos podem ser importados."""
def test_import_config(self):
"""Testa importação do módulo config."""
try:
from utils.config import Config
self.assertTrue(True)
except ImportError as e:
self.fail(f"Erro ao importar config: {e}")
def test_import_state(self):
"""Testa importação do módulo state."""
try:
from agents.state import PDFState
self.assertTrue(True)
except ImportError as e:
self.fail(f"Erro ao importar state: {e}")
def test_import_main_graph(self):
"""Testa importação do grafo principal."""
try:
from main_graph import AgentPDFGraph
self.assertTrue(True)
except ImportError as e:
self.fail(f"Erro ao importar main_graph: {e}")
if __name__ == '__main__':
# Configura logging para testes
setup_logger("AgentPDF.Tests", "WARNING")
# Executa os testes
unittest.main(verbosity=2)
|