60 lines
2.1 KiB
Python
60 lines
2.1 KiB
Python
import httpx
|
|
import pytest
|
|
|
|
from src import main
|
|
|
|
|
|
@pytest.mark.anyio
|
|
async def test_work_page_endpoint_normalizes_requested_page_and_is_not_cacheable(monkeypatch):
|
|
requested = []
|
|
|
|
async def page_loader(stream, page):
|
|
requested.append((stream, page))
|
|
return {
|
|
"stream": stream,
|
|
"page": page,
|
|
"total": 84,
|
|
"has_more": False,
|
|
"items": [{
|
|
"id": 51, "number": 51, "title": "Older issue", "state": "open",
|
|
"labels": [], "assignees": [{"login": "timmy"}],
|
|
"repository": {"full_name": "stackchain/api"},
|
|
"updated_at": "2026-08-07T10:00:00Z",
|
|
"html_url": "https://forge.example/stackchain/api/issues/51",
|
|
}],
|
|
}
|
|
|
|
monkeypatch.setattr(main.gitea_proxy, "work_page", page_loader)
|
|
transport = httpx.ASGITransport(app=main.app)
|
|
async with httpx.AsyncClient(transport=transport, base_url="http://test") as client:
|
|
response = await client.get("/api/v1/work/issue?page=2")
|
|
|
|
assert response.status_code == 200
|
|
assert response.headers["cache-control"] == "no-store"
|
|
assert requested == [("issue", 2)]
|
|
assert response.json() == {
|
|
"stream": "issue", "page": 2, "total": 84, "has_more": False,
|
|
"items": [{
|
|
"id": 51, "number": 51, "title": "Older issue", "state": "open",
|
|
"labels": [], "assignees": ["timmy"], "repository": "stackchain/api",
|
|
"updated_at": "2026-08-07T10:00:00Z",
|
|
"url": "https://forge.example/stackchain/api/issues/51",
|
|
}],
|
|
}
|
|
|
|
|
|
@pytest.mark.anyio
|
|
async def test_work_page_endpoint_rejects_unknown_stream_before_upstream_io(monkeypatch):
|
|
called = False
|
|
|
|
async def page_loader(stream, page):
|
|
nonlocal called
|
|
called = True
|
|
|
|
monkeypatch.setattr(main.gitea_proxy, "work_page", page_loader)
|
|
transport = httpx.ASGITransport(app=main.app)
|
|
async with httpx.AsyncClient(transport=transport, base_url="http://test") as client:
|
|
response = await client.get("/api/v1/work/unknown?page=2")
|
|
|
|
assert response.status_code == 422
|
|
assert called is False |