12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- import os
- from json import dumps
- from typing import Literal
- import httpx._api as httpx
- import pytest
- import requests.api as requests
- from _pytest.monkeypatch import MonkeyPatch
- from httpx import Request as HttpxRequest
- from requests import Response as RequestsResponse
- from yarl import URL
- MOCK = os.getenv('MOCK_SWITCH', 'false') == 'true'
- class MockedHttp:
- def requests_request(method: Literal['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'], url: str,
- **kwargs) -> RequestsResponse:
- """
- Mocked requests.request
- """
- response = RequestsResponse()
- response.url = str(URL(url) % kwargs.get('params', {}))
- response.headers = kwargs.get('headers', {})
- if url == 'http://404.com':
- response.status_code = 404
- response._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')
- if files is not None:
- resp = dumps(files).encode('utf-8')
- else:
- resp = b'OK'
- response.status_code = 200
- response._content = resp
- return response
- def httpx_request(method: Literal['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'],
- url: str, **kwargs) -> httpx.Response:
- """
- Mocked httpx.request
- """
- response = httpx.Response(
- status_code=200,
- request=HttpxRequest(method, url)
- )
- response.headers = kwargs.get('headers', {})
- if url == 'http://404.com':
- response.status_code = 404
- response.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')
- if files is not None:
- resp = dumps(files).encode('utf-8')
- else:
- resp = b'OK'
- response.status_code = 200
- response._content = resp
- return response
- @pytest.fixture
- def setup_http_mock(request, monkeypatch: MonkeyPatch):
- if not MOCK:
- yield
- return
- monkeypatch.setattr(requests, "request", MockedHttp.requests_request)
- monkeypatch.setattr(httpx, "request", MockedHttp.httpx_request)
- yield
- monkeypatch.undo()
|