1
0

test_prompts.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. """Tests des textes envoyés à Claude et aux membres. Lancer depuis la racine du projet : python -m unittest"""
  2. import os
  3. import tempfile
  4. import unittest
  5. from pathlib import Path
  6. from types import SimpleNamespace
  7. from bot.claude_client import DEFAULT_PERSONALITY, MEMBER_MEMORY_NOTE, ClaudeClient
  8. class PromptsTest(unittest.TestCase):
  9. def test_memory_note_formats(self):
  10. # Une accolade de trop ou un champ oublié ferait planter chaque message avec MEMORY=on.
  11. note = MEMBER_MEMORY_NOTE.format(member_limit=3000, server_limit=5000, max_nicknames=5, max_nickname_length=32)
  12. self.assertNotIn("{", note)
  13. self.assertIn("ne récite jamais la fiche", note)
  14. class PersonalityTest(unittest.TestCase):
  15. def setUp(self):
  16. self._tmp = tempfile.TemporaryDirectory()
  17. self.path = Path(self._tmp.name) / "personality_prompt.txt"
  18. # Sans __init__ : pas de client Anthropic à créer.
  19. self.client = ClaudeClient.__new__(ClaudeClient)
  20. self.client.settings = SimpleNamespace(personality_file=self.path)
  21. self.client._personality_cache = None
  22. def tearDown(self):
  23. self._tmp.cleanup()
  24. def write(self, data: bytes, mtime: int):
  25. self.path.write_bytes(data)
  26. os.utime(self.path, (mtime, mtime)) # deux écritures rapprochées auraient la même date
  27. def test_not_utf8_keeps_last_valid(self):
  28. self.write("Tu es Rika, très gentille.".encode("utf-8"), 1000)
  29. self.assertEqual(self.client.personality(), "Tu es Rika, très gentille.")
  30. self.write("Tu es Rika, très méchante.".encode("cp1252"), 2000)
  31. with self.assertLogs("chatbot.claude", "ERROR") as logs:
  32. self.assertEqual(self.client.personality(), "Tu es Rika, très gentille.")
  33. self.assertIn("UTF-8", logs.output[0])
  34. self.assertIn("dernière valide", logs.output[0])
  35. with self.assertNoLogs("chatbot.claude", "ERROR"): # une seule erreur par version du fichier
  36. self.client.personality()
  37. self.write("Tu es Rika, réparée.".encode("utf-8"), 3000)
  38. self.assertEqual(self.client.personality(), "Tu es Rika, réparée.")
  39. def test_not_utf8_at_start_uses_default(self):
  40. self.write("Tu es Rika, très méchante.".encode("cp1252"), 1000)
  41. with self.assertLogs("chatbot.claude", "ERROR") as logs:
  42. self.assertEqual(self.client.personality(), DEFAULT_PERSONALITY)
  43. self.assertIn("par défaut", logs.output[0])
  44. def test_directory(self):
  45. self.path.mkdir()
  46. with self.assertLogs("chatbot.claude", "ERROR") as logs:
  47. self.assertEqual(self.client.personality(), DEFAULT_PERSONALITY)
  48. self.assertIn("est un dossier", logs.output[0])
  49. if __name__ == "__main__":
  50. unittest.main()