test: improve retries and timeouts coverage (sync + async) #2615
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Note: This PR overlaps with #2615 / #2616.
If those land first, I’m happy to close this one.
The goal here is simply to improve async timeout/retry coverage and clarify per-request overrides.
Description
This PR strengthens our test suite around timeouts and retries:
✅ New async coverage (test_timeouts_async.py, test_retries.py)
Verifies per-request timeout override works for both sync and async clients.
Confirms smaller per-request timeout triggers TimeoutException.
✅ Retries with Retry-After
Ensures client respects Retry-After header for 429 responses.
Covers success-after-retry, no-retry-on-success, and max-retries-exceeded scenarios.
✅ DX improvements
Clearer comments and docstrings (given / when / then style).
OPENAI_API_KEY patched with dummy value during tests.
✅ Bugfixes
Removed inline type hints in async handlers (avoids UnboundLocalError).
Why:
Prevent regressions in retry/timeout handling across sync and async paths.
Make expected flows explicit and maintainable for future contributors.
Ensure correctness when Retry-After headers are returned by the API.
Notes:
Tests are designed to run offline with httpx.MockTransport.
No functional changes to production code.
Approved by @OscaeGTX on review.