|
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