2525 AuthenticationError ,
2626 SimpleUser ,
2727)
28+ from starlette .exceptions import HTTPException
2829from starlette .middleware import Middleware
2930from starlette .middleware .authentication import AuthenticationMiddleware
3031from starlette .middleware .trustedhost import TrustedHostMiddleware
@@ -258,7 +259,7 @@ async def my_send(*args, **kwargs):
258259
259260
260261@pytest .mark .asyncio
261- async def test_starlettrequestextractor_content_length (sentry_init ):
262+ async def test_starletterequestextractor_content_length (sentry_init ):
262263 scope = SCOPE .copy ()
263264 scope ["headers" ] = [
264265 [b"content-length" , str (len (json .dumps (BODY_JSON ))).encode ()],
@@ -270,7 +271,7 @@ async def test_starlettrequestextractor_content_length(sentry_init):
270271
271272
272273@pytest .mark .asyncio
273- async def test_starlettrequestextractor_cookies (sentry_init ):
274+ async def test_starletterequestextractor_cookies (sentry_init ):
274275 starlette_request = starlette .requests .Request (SCOPE )
275276 extractor = StarletteRequestExtractor (starlette_request )
276277
@@ -281,7 +282,7 @@ async def test_starlettrequestextractor_cookies(sentry_init):
281282
282283
283284@pytest .mark .asyncio
284- async def test_starlettrequestextractor_json (sentry_init ):
285+ async def test_starletterequestextractor_json (sentry_init ):
285286 starlette_request = starlette .requests .Request (SCOPE )
286287
287288 # Mocking async `_receive()` that works in Python 3.7+
@@ -295,7 +296,7 @@ async def test_starlettrequestextractor_json(sentry_init):
295296
296297
297298@pytest .mark .asyncio
298- async def test_starlettrequestextractor_form (sentry_init ):
299+ async def test_starletterequestextractor_form (sentry_init ):
299300 scope = SCOPE .copy ()
300301 scope ["headers" ] = [
301302 [b"content-type" , b"multipart/form-data; boundary=fd721ef49ea403a6" ],
@@ -323,7 +324,7 @@ async def test_starlettrequestextractor_form(sentry_init):
323324
324325
325326@pytest .mark .asyncio
326- async def test_starlettrequestextractor_body_consumed_twice (
327+ async def test_starletterequestextractor_body_consumed_twice (
327328 sentry_init , capture_events
328329):
329330 """
@@ -361,7 +362,7 @@ async def test_starlettrequestextractor_body_consumed_twice(
361362
362363
363364@pytest .mark .asyncio
364- async def test_starlettrequestextractor_extract_request_info_too_big (sentry_init ):
365+ async def test_starletterequestextractor_extract_request_info_too_big (sentry_init ):
365366 sentry_init (
366367 send_default_pii = True ,
367368 integrations = [StarletteIntegration ()],
@@ -392,7 +393,7 @@ async def test_starlettrequestextractor_extract_request_info_too_big(sentry_init
392393
393394
394395@pytest .mark .asyncio
395- async def test_starlettrequestextractor_extract_request_info (sentry_init ):
396+ async def test_starletterequestextractor_extract_request_info (sentry_init ):
396397 sentry_init (
397398 send_default_pii = True ,
398399 integrations = [StarletteIntegration ()],
@@ -423,7 +424,7 @@ async def test_starlettrequestextractor_extract_request_info(sentry_init):
423424
424425
425426@pytest .mark .asyncio
426- async def test_starlettrequestextractor_extract_request_info_no_pii (sentry_init ):
427+ async def test_starletterequestextractor_extract_request_info_no_pii (sentry_init ):
427428 sentry_init (
428429 send_default_pii = False ,
429430 integrations = [StarletteIntegration ()],
@@ -1078,3 +1079,57 @@ def test_transaction_name_in_middleware(
10781079 assert (
10791080 transaction_event ["transaction_info" ]["source" ] == expected_transaction_source
10801081 )
1082+
1083+
1084+ @pytest .mark .parametrize (
1085+ "failed_request_status_codes,status_code,expected_error" ,
1086+ [
1087+ (None , 500 , True ),
1088+ (None , 400 , False ),
1089+ ([500 , 501 ], 500 , True ),
1090+ ([500 , 501 ], 401 , False ),
1091+ ([range (400 , 499 )], 401 , True ),
1092+ ([range (400 , 499 )], 500 , False ),
1093+ ([range (400 , 499 ), range (500 , 599 )], 300 , False ),
1094+ ([range (400 , 499 ), range (500 , 599 )], 403 , True ),
1095+ ([range (400 , 499 ), range (500 , 599 )], 503 , True ),
1096+ ([range (400 , 403 ), 500 , 501 ], 401 , True ),
1097+ ([range (400 , 403 ), 500 , 501 ], 405 , False ),
1098+ ([range (400 , 403 ), 500 , 501 ], 501 , True ),
1099+ ([range (400 , 403 ), 500 , 501 ], 503 , False ),
1100+ ([None ], 500 , False ),
1101+ ],
1102+ )
1103+ def test_configurable_status_codes (
1104+ sentry_init ,
1105+ capture_events ,
1106+ failed_request_status_codes ,
1107+ status_code ,
1108+ expected_error ,
1109+ ):
1110+ sentry_init (
1111+ integrations = [
1112+ StarletteIntegration (
1113+ failed_request_status_codes = failed_request_status_codes
1114+ )
1115+ ]
1116+ )
1117+
1118+ events = capture_events ()
1119+
1120+ async def _error (request ):
1121+ raise HTTPException (status_code )
1122+
1123+ app = starlette .applications .Starlette (
1124+ routes = [
1125+ starlette .routing .Route ("/error" , _error , methods = ["GET" ]),
1126+ ],
1127+ )
1128+
1129+ client = TestClient (app )
1130+ client .get ("/error" )
1131+
1132+ if expected_error :
1133+ assert len (events ) == 1
1134+ else :
1135+ assert not events
0 commit comments