#!/usr/bin/env python3
"""Tests pour CORRECTION 4 : prompt person_notoriete directif."""
import sys
import os
import unittest

sys.path.insert(0, os.path.join(os.path.dirname(__file__), "agents_python"))


class TestPromptNotoriete(unittest.TestCase):
    """Verifie que le nouveau prompt est directif et sans prudence."""

    def setUp(self):
        from synthesizer import CONTENT_PROMPTS
        self.prompt = CONTENT_PROMPTS["person_notoriete"]

    def test_no_prudence_instruction(self):
        """Le mot PRUDENCE ne doit plus apparaitre."""
        self.assertNotIn("PRUDENCE", self.prompt)

    def test_no_inventer_fallback(self):
        """Pas de fallback 'inventer des informations'."""
        self.assertNotIn("inventer des informations", self.prompt)

    def test_no_fragmentaires(self):
        """Pas de mention de sources fragmentaires."""
        self.assertNotIn("fragmentaires", self.prompt)

    def test_osint_analyst(self):
        """Le prompt doit mentionner OSINT."""
        self.assertIn("OSINT", self.prompt)

    def test_never_say_limited(self):
        """Le prompt interdit explicitement 'informations limitees'."""
        self.assertIn("informations sont limitees", self.prompt)
        self.assertIn("NE DIS JAMAIS", self.prompt)

    def test_no_age_without_birthdate(self):
        """Le prompt interdit l'age sans date de naissance exacte."""
        self.assertIn("NE MENTIONNE JAMAIS l'age", self.prompt)
        self.assertIn("date de naissance EXACTE", self.prompt)

    def test_min_1000_chars(self):
        """La longueur minimale est conservee."""
        self.assertIn("MINIMUM 1000", self.prompt)

    def test_factuel_dense(self):
        """Le prompt demande du factuel et dense."""
        self.assertIn("factuel", self.prompt)
        self.assertIn("dense", self.prompt)

    def test_structure_present(self):
        """Les sections requises sont presentes."""
        for section in ["IDENTITE", "PARCOURS", "ACTIVITE",
                        "PUBLICATIONS", "PRESENCE PUBLIQUE"]:
            self.assertIn(section, self.prompt)


class TestSystemPromptGeneration(unittest.TestCase):
    """Verifie que get_system_prompt fonctionne avec le nouveau prompt."""

    def test_person_notoriete_prompt_valid(self):
        from synthesizer import get_system_prompt
        prompt = get_system_prompt("person_notoriete")
        self.assertIn("OSINT", prompt)
        self.assertIn("CONTRAINTES TEMPORELLES", prompt)

    def test_person_prompt_unchanged(self):
        from synthesizer import get_system_prompt
        prompt = get_system_prompt("person")
        self.assertIn("analyste biographique", prompt)
        self.assertIn("ACTUALITE RECENTE", prompt)


if __name__ == "__main__":
    unittest.main()
