48 lines
1.5 KiB
Python
48 lines
1.5 KiB
Python
import httpx
|
|
import pytest
|
|
|
|
from src import gitea_proxy, main
|
|
|
|
|
|
@pytest.mark.anyio
|
|
async def test_mark_notification_read_calls_supported_gitea_thread_endpoint(monkeypatch):
|
|
calls = []
|
|
|
|
class Response:
|
|
def raise_for_status(self):
|
|
return None
|
|
|
|
class Client:
|
|
async def patch(self, path, headers):
|
|
calls.append((path, headers))
|
|
return Response()
|
|
|
|
monkeypatch.setattr(gitea_proxy, "_get_client", lambda: Client())
|
|
monkeypatch.setattr(gitea_proxy, "_auth", lambda: {"Authorization": "token test"})
|
|
|
|
await gitea_proxy.mark_notification_read(42)
|
|
|
|
assert calls == [
|
|
("/api/v1/notifications/threads/42?to-status=read", {"Authorization": "token test"})
|
|
]
|
|
|
|
|
|
@pytest.mark.anyio
|
|
async def test_mark_notification_read_api_is_bounded_and_never_cacheable(monkeypatch):
|
|
marked = []
|
|
|
|
async def mark(thread_id):
|
|
marked.append(thread_id)
|
|
|
|
monkeypatch.setattr(main, "mark_notification_read", mark)
|
|
transport = httpx.ASGITransport(app=main.app)
|
|
async with httpx.AsyncClient(transport=transport, base_url="http://test") as client:
|
|
response = await client.patch("/api/v1/notifications/42/read")
|
|
invalid = await client.patch("/api/v1/notifications/0/read")
|
|
|
|
assert response.status_code == 200
|
|
assert response.json() == {"id": 42, "status": "read"}
|
|
assert response.headers["cache-control"] == "no-store"
|
|
assert invalid.status_code == 422
|
|
assert marked == [42]
|