feat: new settings, CLI skeleton and interface skeletons

Adds the pydantic-settings Settings with validated GITEA_URL, OAuth scopes
and toolsets, the argparse CLI skeleton, catalog.model, identity and
GiteaAPIError. Test fixtures now isolate env, cwd and state paths in tmp.
This commit is contained in:
Latte committed 2026-10-14 15:40:37 +02:00
1 parent 4ac9626eb5
commit b82e2866cb
24 files changed
+1512 -605

No files matched your search

+46
View File
@@ -0,0 +1,46 @@
"""Tests for response size bounds."""
from __future__ import annotations
import pytest
from aegis_gitea_mcp.config import reset_settings
from aegis_gitea_mcp.response_limits import ResponseLimitError, limit_items, limit_text
def test_limit_items_uses_configured_default(
mock_env: None, monkeypatch: pytest.MonkeyPatch
) -> None:
monkeypatch.setenv("MAX_TOOL_RESPONSE_ITEMS", "3")
reset_settings()
items = [{"i": n} for n in range(5)]
trimmed, omitted = limit_items(items)
assert trimmed == items[:3]
assert omitted == 2
def test_limit_items_within_bound(mock_env: None) -> None:
items = [{"i": 1}]
assert limit_items(items) == (items, 0)
assert limit_items(items, configured_limit=1) == (items, 0)
assert limit_items([{"i": 1}, {"i": 2}], configured_limit=1) == ([{"i": 1}], 1)
def test_limit_text(mock_env: None) -> None:
assert limit_text("abcdef", configured_limit=3) == "abc"
assert limit_text("abc", configured_limit=10) == "abc"
def test_limit_text_default_from_settings(mock_env: None, monkeypatch: pytest.MonkeyPatch) -> None:
monkeypatch.setenv("MAX_TOOL_RESPONSE_CHARS", "5")
reset_settings()
assert limit_text("abcdefghij") == "abcde"
def test_invalid_limits_raise(mock_env: None) -> None:
with pytest.raises(ResponseLimitError):
limit_items([], configured_limit=-1)
with pytest.raises(ResponseLimitError):
limit_text("x", configured_limit=-1)