test_config.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. from __future__ import annotations
  2. import json
  3. import tempfile
  4. from pathlib import Path
  5. import unittest
  6. from model_selector.config import OpenClawConfigRepository
  7. SOURCE_CONFIG = Path("/home/lucky/.openclaw/openclaw.json")
  8. class ConfigRepositoryTests(unittest.TestCase):
  9. def test_alias_update_uses_copy_and_preserves_original(self) -> None:
  10. original_bytes = SOURCE_CONFIG.read_bytes()
  11. with tempfile.TemporaryDirectory() as tmp:
  12. temp_config = Path(tmp) / "openclaw.json"
  13. temp_config.write_bytes(original_bytes)
  14. repo = OpenClawConfigRepository(temp_config)
  15. loaded = repo.load()
  16. self.assertIn("models", loaded)
  17. repo.update_alias("openai/gpt-5.4", "osiris-test")
  18. updated = json.loads(temp_config.read_text(encoding="utf-8"))
  19. self.assertEqual(updated["agents"]["defaults"]["models"]["openai/gpt-5.4"]["alias"], "osiris-test")
  20. self.assertEqual(SOURCE_CONFIG.read_bytes(), original_bytes)
  21. def test_configured_models_parses_expected_shape(self) -> None:
  22. with tempfile.TemporaryDirectory() as tmp:
  23. temp_config = Path(tmp) / "openclaw.json"
  24. temp_config.write_bytes(SOURCE_CONFIG.read_bytes())
  25. repo = OpenClawConfigRepository(temp_config)
  26. models = repo.configured_models()
  27. self.assertTrue(any(model.full_key == "openai/gpt-5.4" for model in models))
  28. self.assertTrue(any(model.provider_key == "openrouter" for model in models))
  29. def test_add_and_remove_model_updates_only_copy(self) -> None:
  30. with tempfile.TemporaryDirectory() as tmp:
  31. temp_config = Path(tmp) / "openclaw.json"
  32. original_bytes = SOURCE_CONFIG.read_bytes()
  33. temp_config.write_bytes(original_bytes)
  34. repo = OpenClawConfigRepository(temp_config)
  35. repo.add_model(
  36. "openai",
  37. {
  38. "id": "gpt-5.4-test",
  39. "name": "GPT-5.4 Test",
  40. "reasoning": True,
  41. "input": ["text"],
  42. "contextWindow": 1024,
  43. "maxTokens": 256,
  44. },
  45. )
  46. after_add = repo.load()
  47. models = after_add["models"]["providers"]["openai"]["models"]
  48. self.assertTrue(any(model["id"] == "gpt-5.4-test" for model in models))
  49. repo.remove_model("openai/gpt-5.4-test")
  50. after_remove = repo.load()
  51. models = after_remove["models"]["providers"]["openai"]["models"]
  52. self.assertFalse(any(model["id"] == "gpt-5.4-test" for model in models))
  53. self.assertEqual(SOURCE_CONFIG.read_bytes(), original_bytes)