"""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 as _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()