import unittest
import os
import sys
import json
from datetime import datetime
from pathlib import Path

# Ajouter le répertoire parent au sys.path pour importer les modules
sys.path.append(str(Path(__file__).parent.parent))

from agents.base_agent import Agent

class TestAgent(unittest.TestCase):
    """Tests pour la classe Agent de base"""
    
    def setUp(self):
        """Initialisation pour chaque test"""
        self.agent = Agent(nom="TestAgent")
        
    def test_initialisation(self):
        """Test de l'initialisation correcte de l'agent"""
        self.assertEqual(self.agent.nom, "TestAgent")
        self.assertEqual(len(self.agent.historique), 0)
        
    def test_ajouter_historique(self):
        """Test de l'ajout d'entrées dans l'historique"""
        self.agent.ajouter_historique("test_action", "données d'entrée", "données de sortie")
        
        self.assertEqual(len(self.agent.historique), 1)
        entry = self.agent.historique[0]
        
        self.assertEqual(entry["action"], "test_action")
        self.assertEqual(entry["input"], "données d'entrée")
        self.assertEqual(entry["output"], "données de sortie")
        self.assertTrue("timestamp" in entry)
        
    def test_obtenir_historique(self):
        """Test de la récupération de l'historique"""
        # Ajouter plusieurs entrées
        self.agent.ajouter_historique("action1", "entrée1", "sortie1")
        self.agent.ajouter_historique("action2", "entrée2", "sortie2")
        
        historique = self.agent.obtenir_historique()
        
        self.assertEqual(len(historique), 2)
        self.assertEqual(historique[0]["action"], "action1")
        self.assertEqual(historique[1]["action"], "action2")
        
    def test_executer_not_implemented(self):
        """Test que la méthode executer lève une NotImplementedError"""
        with self.assertRaises(NotImplementedError):
            self.agent.executer()
            
    def test_limite_taille_historique(self):
        """Test de la limite de taille dans l'historique"""
        # Créer une entrée avec une chaîne très longue
        longue_chaine = "x" * 1000
        self.agent.ajouter_historique("test_limite", longue_chaine, longue_chaine)
        
        entry = self.agent.historique[0]
        self.assertEqual(len(entry["input"]), 500)  # Limite à 500 caractères
        self.assertEqual(len(entry["output"]), 500)  # Limite à 500 caractères
        
if __name__ == "__main__":
    unittest.main() 