1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- import os
- from json import dumps
- from typing import Literal
- import httpx
- import pytest
- from _pytest.monkeypatch import MonkeyPatch
- MOCK = os.getenv('MOCK_SWITCH', 'false') == 'true'
- class MockedHttp:
- def httpx_request(method: Literal['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD'],
- url: str, **kwargs) -> httpx.Response:
- """
- Mocked httpx.request
- """
- if url == 'http://404.com':
- response = httpx.Response(
- status_code=404,
- request=httpx.Request(method, url),
- content=b'Not Found'
- )
- return response
- # get data, files
- data = kwargs.get('data', None)
- files = kwargs.get('files', None)
- if data is not None:
- resp = dumps(data).encode('utf-8')
- elif files is not None:
- resp = dumps(files).encode('utf-8')
- else:
- resp = b'OK'
- response = httpx.Response(
- status_code=200,
- request=httpx.Request(method, url),
- headers=kwargs.get('headers', {}),
- content=resp
- )
- return response
- @pytest.fixture
- def setup_http_mock(request, monkeypatch: MonkeyPatch):
- if not MOCK:
- yield
- return
- monkeypatch.setattr(httpx, "request", MockedHttp.httpx_request)
- yield
- monkeypatch.undo()
|