import pytest import json from src import gitea_proxy from src import main @pytest.mark.anyio async def test_work_collections_use_supported_assigned_search_endpoint(monkeypatch): requested_paths = [] async def fake_fetch(path): requested_paths.append(path) return [] monkeypatch.setattr(gitea_proxy, "fetch", fake_fetch) assert await gitea_proxy.issues() == [] assert await gitea_proxy.pull_requests() == [] assert requested_paths == [ "repos/issues/search?state=open&assigned=true&type=issues&limit=50", "repos/issues/search?state=open&assigned=true&type=pulls&limit=50", ] @pytest.mark.anyio async def test_context_preserves_repository_and_update_time_for_cross_repo_work(monkeypatch): async def user(): return {"id": 1, "login": "timmy"} async def repositories(): return [] async def issues(): return [{ "id": 10, "number": 7, "title": "Ship mobile flow", "state": "open", "labels": [{"name": "P0"}], "assignees": [{"login": "timmy"}], "repository": {"full_name": "stackchain/mobile"}, "updated_at": "2026-08-06T12:00:00Z", "html_url": "https://forge.example/stackchain/mobile/issues/7", }] async def pulls(): return [{ "id": 11, "number": 7, "title": "Review API", "state": "open", "user": {"login": "alex"}, "labels": [{"name": "priority-high"}], "assignees": [{"login": "timmy"}], "repository": {"full_name": "stackchain/api"}, "updated_at": "2026-08-06T11:00:00Z", "html_url": "https://forge.example/stackchain/api/pulls/7", }] monkeypatch.setattr(main, "current_user", user) monkeypatch.setattr(main, "repos", repositories) monkeypatch.setattr(main, "issues", issues) monkeypatch.setattr(main, "pull_requests", pulls) payload = json.loads((await main.context()).body) assert payload["issues"][0]["repository"] == "stackchain/mobile" assert payload["issues"][0]["updated_at"] == "2026-08-06T12:00:00Z" assert payload["pull_requests"][0]["repository"] == "stackchain/api" assert payload["pull_requests"][0]["updated_at"] == "2026-08-06T11:00:00Z" assert payload["pull_requests"][0]["labels"] == ["priority-high"] assert payload["pull_requests"][0]["assignees"] == ["timmy"]