platform-core/tests/unit/services/test_ragLimits.py
2026-05-18 07:56:53 +02:00

79 lines
3.2 KiB
Python

"""Unit tests for `_ragLimits` central helpers.
Verifies:
- defaults are returned as fresh copies (no mutation leakage)
- getStoredOverrides returns ONLY explicit overrides (walker contract)
- getRagLimits merges defaults with overrides (API/cost-estimate contract)
- non-int values in stored settings are dropped, not silently coerced
"""
from __future__ import annotations
import unittest
from modules.serviceCenter.services.serviceKnowledge import _ragLimits
class TestGetDefaults(unittest.TestCase):
def test_files_defaults_have_all_keys(self):
d = _ragLimits.getDefaults("files")
self.assertEqual(set(d.keys()), {"maxItems", "maxBytes", "maxFileSize", "maxDepth"})
self.assertEqual(d["maxBytes"], 200 * 1024 * 1024)
def test_clickup_defaults(self):
d = _ragLimits.getDefaults("clickup")
self.assertEqual(set(d.keys()), {"maxTasks", "maxWorkspaces", "maxListsPerWorkspace"})
def test_defaults_are_a_fresh_copy(self):
d1 = _ragLimits.getDefaults("files")
d1["maxBytes"] = 1
d2 = _ragLimits.getDefaults("files")
self.assertEqual(d2["maxBytes"], 200 * 1024 * 1024)
def test_unknown_kind_raises(self):
with self.assertRaises(ValueError):
_ragLimits.getDefaults("unknown")
class TestGetStoredOverrides(unittest.TestCase):
def test_no_settings_returns_empty_dict(self):
self.assertEqual(_ragLimits.getStoredOverrides({"id": "x", "settings": None}, "files"), {})
def test_only_explicit_overrides_returned(self):
ds = {"id": "x", "settings": {"ragLimits": {"maxBytes": 999}}}
self.assertEqual(_ragLimits.getStoredOverrides(ds, "files"), {"maxBytes": 999})
def test_unknown_keys_dropped(self):
ds = {"id": "x", "settings": {"ragLimits": {"maxBytes": 999, "bogus": 1}}}
self.assertEqual(_ragLimits.getStoredOverrides(ds, "files"), {"maxBytes": 999})
def test_non_int_dropped(self):
ds = {"id": "x", "settings": {"ragLimits": {"maxBytes": "not-a-number"}}}
self.assertEqual(_ragLimits.getStoredOverrides(ds, "files"), {})
def test_none_or_garbage_settings_safe(self):
self.assertEqual(_ragLimits.getStoredOverrides(None, "files"), {})
self.assertEqual(_ragLimits.getStoredOverrides({"id": "x", "settings": "garbage"}, "files"), {})
class TestGetRagLimits(unittest.TestCase):
def test_no_settings_returns_defaults(self):
result = _ragLimits.getRagLimits({"id": "x", "settings": None}, "files")
self.assertEqual(result, _ragLimits.FILES_LIMITS_DEFAULT)
def test_partial_override_merges_with_defaults(self):
ds = {"id": "x", "settings": {"ragLimits": {"maxBytes": 999}}}
result = _ragLimits.getRagLimits(ds, "files")
self.assertEqual(result["maxBytes"], 999)
self.assertEqual(result["maxItems"], _ragLimits.FILES_LIMITS_DEFAULT["maxItems"])
def test_caller_can_distinguish_unset_from_set(self):
"""Walker contract: an unset key MUST NOT appear in `getStoredOverrides`."""
ds = {"id": "x", "settings": {"ragLimits": {"maxBytes": 999}}}
overrides = _ragLimits.getStoredOverrides(ds, "files")
self.assertIn("maxBytes", overrides)
self.assertNotIn("maxItems", overrides)
if __name__ == "__main__":
unittest.main()