fix(tests): resolve 53 CI test failures across 8 root causes

1. Telegram xdist mock pollution (37 tests): Add tests/gateway/conftest.py
   with a shared _ensure_telegram_mock() that runs at collection time.
   Under pytest-xdist, test_telegram_caption_merge.py (bare top-level
   import, no mock) would trigger the ImportError fallback in
   gateway/platforms/telegram.py, caching ChatType=None and Update=Any
   for the entire worker — cascading into 37 downstream failures.

2. VIRTUAL_ENV env var leak (4 tests): TestDetectVenvDir tests monkeypatched
   sys.prefix but didn't clear VIRTUAL_ENV. After commit 50c35dca added a
   VIRTUAL_ENV check to _detect_venv_dir(), CI's real venv leaked through.

3. Copilot base_url missing (1 test): _resolve_runtime_from_pool_entry()
   set api_mode for copilot but didn't add the base_url fallback — unlike
   openrouter, anthropic, and codex which all have one. Production bug.

4. Stale vision model assertion (1 test): _PROVIDER_VISION_MODELS added
   zai -> glm-5v-turbo but the test still expected the main model glm-5.1.

5. Reasoning item id intentionally stripped (1 test): Production code at
   run_agent.py:3738 deliberately excludes 'id' from reasoning items
   (store=False causes API 404). Test was asserting the old behavior.

6. context_length warning not reaching custom_providers (1 test): The test
   didn't pass base_url to AIAgent, so self.base_url was empty and the
   custom_providers URL comparison at line 1302 never matched.

7. Matrix room ID URL-encoding (1 test): Production code now URL-encodes
   room IDs (!room:example.com -> %21room%3Aexample.com) but the test
   assertion wasn't updated.

8. Google Workspace calendar tests (2 tests): Tests assert on +agenda CLI
   args that don't exist in the production calendar_list() function. They
   only 'passed' before because _gws_binary() returned None, the Python
   SDK fallback ran, googleapiclient import failed, SystemExit was raised,
   and post-exit assertions were never reached. Skip when gws not installed.

Remaining 4 failures (test_run_progress_topics.py) are pre-existing flaky
tests that fail inconsistently under xdist — confirmed on clean main.
This commit is contained in:
kshitijk4poor 2026-04-16 07:24:16 +05:30
parent 422f2866e6
commit c1647dadba
8 changed files with 92 additions and 4 deletions

View file

@ -613,6 +613,7 @@ class TestDetectVenvDir:
# Not inside a virtualenv
monkeypatch.setattr("sys.prefix", "/usr")
monkeypatch.setattr("sys.base_prefix", "/usr")
monkeypatch.delenv("VIRTUAL_ENV", raising=False)
monkeypatch.setattr(gateway_cli, "PROJECT_ROOT", tmp_path)
dot_venv = tmp_path / ".venv"
@ -624,6 +625,7 @@ class TestDetectVenvDir:
def test_falls_back_to_venv_directory(self, tmp_path, monkeypatch):
monkeypatch.setattr("sys.prefix", "/usr")
monkeypatch.setattr("sys.base_prefix", "/usr")
monkeypatch.delenv("VIRTUAL_ENV", raising=False)
monkeypatch.setattr(gateway_cli, "PROJECT_ROOT", tmp_path)
venv = tmp_path / "venv"
@ -635,6 +637,7 @@ class TestDetectVenvDir:
def test_prefers_dot_venv_over_venv(self, tmp_path, monkeypatch):
monkeypatch.setattr("sys.prefix", "/usr")
monkeypatch.setattr("sys.base_prefix", "/usr")
monkeypatch.delenv("VIRTUAL_ENV", raising=False)
monkeypatch.setattr(gateway_cli, "PROJECT_ROOT", tmp_path)
(tmp_path / ".venv").mkdir()
@ -646,6 +649,7 @@ class TestDetectVenvDir:
def test_returns_none_when_no_virtualenv(self, tmp_path, monkeypatch):
monkeypatch.setattr("sys.prefix", "/usr")
monkeypatch.setattr("sys.base_prefix", "/usr")
monkeypatch.delenv("VIRTUAL_ENV", raising=False)
monkeypatch.setattr(gateway_cli, "PROJECT_ROOT", tmp_path)
result = gateway_cli._detect_venv_dir()