@@ -32,6 +32,16 @@ class _LowercaseMethodRequest:
3232 url = "https://example.com/lowercase"
3333
3434
35+ class _InvalidMethodTokenRequest :
36+ method = "GET /invalid"
37+ url = "https://example.com/invalid-method"
38+
39+
40+ class _WhitespaceInsideUrlRequest :
41+ method = "GET"
42+ url = "https://example.com/with space"
43+
44+
3545class _RequestErrorWithFailingRequestProperty (httpx .RequestError ):
3646 @property
3747 def request (self ): # type: ignore[override]
@@ -62,6 +72,18 @@ def request(self): # type: ignore[override]
6272 return _LowercaseMethodRequest ()
6373
6474
75+ class _RequestErrorWithInvalidMethodToken (httpx .RequestError ):
76+ @property
77+ def request (self ): # type: ignore[override]
78+ return _InvalidMethodTokenRequest ()
79+
80+
81+ class _RequestErrorWithWhitespaceInsideUrl (httpx .RequestError ):
82+ @property
83+ def request (self ): # type: ignore[override]
84+ return _WhitespaceInsideUrlRequest ()
85+
86+
6587class _DummyResponse :
6688 def __init__ (self , json_value , text : str = "" ) -> None :
6789 self ._json_value = json_value
@@ -123,6 +145,24 @@ def test_extract_request_error_context_normalizes_method_to_uppercase():
123145 assert url == "https://example.com/lowercase"
124146
125147
148+ def test_extract_request_error_context_rejects_invalid_method_tokens ():
149+ method , url = extract_request_error_context (
150+ _RequestErrorWithInvalidMethodToken ("network down" )
151+ )
152+
153+ assert method == "UNKNOWN"
154+ assert url == "https://example.com/invalid-method"
155+
156+
157+ def test_extract_request_error_context_rejects_urls_with_whitespace ():
158+ method , url = extract_request_error_context (
159+ _RequestErrorWithWhitespaceInsideUrl ("network down" )
160+ )
161+
162+ assert method == "GET"
163+ assert url == "unknown URL"
164+
165+
126166def test_format_request_failure_message_uses_fallback_values ():
127167 message = format_request_failure_message (
128168 httpx .RequestError ("network down" ),
@@ -154,6 +194,16 @@ def test_format_request_failure_message_normalizes_blank_fallback_values():
154194 assert message == "Request UNKNOWN unknown URL failed"
155195
156196
197+ def test_format_request_failure_message_normalizes_lowercase_fallback_method ():
198+ message = format_request_failure_message (
199+ httpx .RequestError ("network down" ),
200+ fallback_method = "post" ,
201+ fallback_url = "https://example.com/fallback" ,
202+ )
203+
204+ assert message == "Request POST https://example.com/fallback failed"
205+
206+
157207def test_extract_error_message_handles_recursive_list_payloads ():
158208 recursive_payload = []
159209 recursive_payload .append (recursive_payload )
0 commit comments