| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- """Tests de la configuration (MAX_TOKENS et mémoire). Lancer depuis la racine du projet : python -m unittest"""
- import unittest
- from unittest import mock
- from bot.config import ConfigError, load_settings, memory_max_tokens, memory_warning
- BASE = {"DISCORD_TOKEN": "x", "ANTHROPIC_API_KEY": "x", "CHANNEL_ID": "1",
- "CLAUDE_MODEL": "claude-sonnet-5-5", "MEMORY": "on", "MEMORY_SERVER_LIMIT": "5000"}
- def settings(**env):
- # Sans le .env du projet : seulement les variables données.
- with mock.patch.dict("os.environ", {**BASE, **env}, clear=True), mock.patch("bot.config.load_dotenv"):
- return load_settings()
- class MemoryMaxTokensTest(unittest.TestCase):
- def test_margin_follows_effort(self):
- # 5000 caractères : 2000 tokens de contenu, plus 2000 pour le reste de l'appel.
- self.assertEqual(memory_max_tokens(settings(THINKING="off")), (4000, 4000))
- self.assertEqual(memory_max_tokens(settings(THINKING="on", EFFORT="medium")), (4000, 6000))
- self.assertEqual(memory_max_tokens(settings(THINKING="on")), (4000, 8000))
- self.assertEqual(memory_max_tokens(settings(THINKING="on", EFFORT="max")), (4000, 12000))
- def test_opus_thinks_even_with_thinking_off(self):
- s = settings(CLAUDE_MODEL="claude-opus-5-5", THINKING="off", EFFORT="low")
- self.assertEqual(memory_max_tokens(s), (4000, 6000))
- def test_too_small_refused(self):
- with self.assertRaises(ConfigError) as ctx:
- settings(MAX_TOKENS="3999")
- self.assertIn("au moins 4000", str(ctx.exception))
- def test_memory_off_not_checked(self):
- self.assertEqual(settings(MEMORY="off", MAX_TOKENS="1000").max_tokens, 1000)
- self.assertIsNone(memory_warning(settings(MEMORY="off", MAX_TOKENS="1000", THINKING="on")))
- def test_warning_when_reflection_does_not_fit(self):
- # Le scénario de l'audit : pile le minimum, mais la réflexion à effort high n'y tient pas.
- s = settings(MAX_TOKENS="4000", THINKING="on", EFFORT="high")
- self.assertIn("au moins 8000", memory_warning(s))
- self.assertIsNone(memory_warning(settings(MAX_TOKENS="8000", THINKING="on", EFFORT="high")))
- self.assertIsNone(memory_warning(settings(MAX_TOKENS="4000", THINKING="off")))
- if __name__ == "__main__":
- unittest.main()
|