| """Regression: agent_tools._truncate must always return a string. | |
| It did `len(text)` directly, so `_truncate(None)` raised TypeError. Returning | |
| the raw non-string just moves the crash downstream (callers treat it as text), | |
| so non-strings are now coerced to a string and still truncated. | |
| """ | |
| from src.agent_tools import _truncate | |
| def test_non_string_coerced_to_string(): | |
| assert _truncate(None) == "" | |
| assert _truncate(123) == "123" | |
| assert isinstance(_truncate({"a": 1}), str) | |
| def test_non_string_is_also_truncated(): | |
| out = _truncate(12345, limit=3) | |
| assert out.startswith("123") and "truncated" in out | |
| def test_string_truncation_unchanged(): | |
| assert _truncate("hello", limit=100) == "hello" | |
| out = _truncate("x" * 50, limit=10) | |
| assert out.startswith("x" * 10) and "truncated" in out | |