|
1 | 1 | import sys |
2 | 2 |
|
3 | 3 | import pytest |
4 | | -from sentry_sdk import Hub, capture_message |
| 4 | +from sentry_sdk import Hub, capture_message, last_event_id |
5 | 5 | from sentry_sdk.integrations.asgi import SentryAsgiMiddleware |
6 | 6 | from starlette.applications import Starlette |
7 | 7 | from starlette.responses import PlainTextResponse |
@@ -179,3 +179,26 @@ async def app(scope, receive, send): |
179 | 179 | "url": "ws://testserver/", |
180 | 180 | } |
181 | 181 | ) |
| 182 | + |
| 183 | + |
| 184 | +def test_starlette_last_event_id(app, sentry_init, capture_events, request): |
| 185 | + sentry_init(send_default_pii=True) |
| 186 | + events = capture_events() |
| 187 | + |
| 188 | + @app.route("/handlederror") |
| 189 | + def handlederror(request): |
| 190 | + raise ValueError("oh no") |
| 191 | + |
| 192 | + @app.exception_handler(500) |
| 193 | + def handler(*args, **kwargs): |
| 194 | + return PlainTextResponse(last_event_id(), status_code=500) |
| 195 | + |
| 196 | + client = TestClient(SentryAsgiMiddleware(app), raise_server_exceptions=False) |
| 197 | + response = client.get("/handlederror") |
| 198 | + assert response.status_code == 500 |
| 199 | + |
| 200 | + (event,) = events |
| 201 | + assert response.content.strip().decode("ascii") == event["event_id"] |
| 202 | + (exception,) = event["exception"]["values"] |
| 203 | + assert exception["type"] == "ValueError" |
| 204 | + assert exception["value"] == "oh no" |
0 commit comments