Comments (4)
ok, I think I understand. I guess that I wasn't using matching correctly. Thanks for the help!
from pytest_httpx.
Hello @EdLeafe ,
Can you confirm my understanding of the issue first?
- You want to mock a 401 response to URL1.
- You want to mock the auth API response with the token.
- You want to mock a 2xx response to URL1 with the provided token (in headers I assume)?
Ad placement: Please note that I am also the author of httpx-auth
, aiming at handling authentication logic for you. ;)
from pytest_httpx.
Thanks for the ad, but we're using an internal auth system. 😁
The system caches auth tokens which expire after a period of time. So the general flow is this:
async def call_api(...):
try:
await make_request(<args with cached token>)
except Unauthorized:
new_token = get_new_token()
await make_request(<args with new token>)
To test this case there are 3 async calls needed: failed auth, new token, succeed. How can I test the call_api()
method with httpx?
from pytest_httpx.
You can match on headers, so I would do something along this line (assuming you send your token in the standard way):
def test_new_token_is_used_when_token_is_expired(httpx_mock):
# Mock request with expired token response
httpx_mock.add_response(match_headers={'Authorization': 'Bearer EXPIRED_TOKEN'}, status_code=401)
# Mock new token response
httpx_mock.add_response(url="AUTH_URL", json={"token": "NEW_TOKEN"})
# Mock request with new token response
httpx_mock.add_response(match_headers={'Authorization': 'Bearer NEW_TOKEN'})
Of course you have to return the proper body and filter on the proper information but that's the spirit. All those information can be found in the documentation.
Don't hesitate to ask if something is not clear. Always a good opportunity to clean up documentation.
from pytest_httpx.
Related Issues (20)
- pyright with strict typeCheckingMode reports error: Type of "add_response" is partially unknown because of **matchers HOT 1
- Matching the `Authorization` header correctly while another parameter doesn't match causes a very confusing error message HOT 2
- Do you plan on putting back support for Python 3.8? HOT 5
- Allow to record and store requests+responses HOT 1
- Allow to add responses based on a file content
- How can I test if the request is being proxied? HOT 4
- httpx does not read the response if an event_hook raises an exception HOT 2
- How can I send multiple responses matching the same request? HOT 3
- Custom Async Client's Transport is not used HOT 7
- Ability to fail a test case if unexpected requests are received and code is swallowing exceptions HOT 4
- support for python 3.8 HOT 2
- Switch from setup.py to a build library HOT 1
- pytest_httpx breaks httpx timeout logic HOT 2
- Support for pytest 8.x.x HOT 2
- `HTTPXMock` context manager HOT 3
- Introduce decorators to setup httpx_mock
- support query param matcher
- Allow to match on different kind of timeouts
- Can one add mocked responses *after* creating the HTTPX client? HOT 2
- The following responses are mocked but not requested HOT 5
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from pytest_httpx.