Skip to content

Commit 263343a

Browse files
maxi297octavia-squidington-iii
andauthored
feat(HttpMocker): adding support for PUT requests and bytes responses (#342)
Co-authored-by: octavia-squidington-iii <[email protected]>
1 parent dcff834 commit 263343a

File tree

3 files changed

+44
-5
lines changed

3 files changed

+44
-5
lines changed

airbyte_cdk/test/mock_http/mocker.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ class SupportedHttpMethods(str, Enum):
1717
GET = "get"
1818
PATCH = "patch"
1919
POST = "post"
20+
PUT = "put"
2021
DELETE = "delete"
2122

2223

@@ -77,14 +78,18 @@ def _mock_request_method(
7778
additional_matcher=self._matches_wrapper(matcher),
7879
response_list=[
7980
{
80-
"text": response.body,
81+
self._get_body_field(response): response.body,
8182
"status_code": response.status_code,
8283
"headers": response.headers,
8384
}
8485
for response in responses
8586
],
8687
)
8788

89+
@staticmethod
90+
def _get_body_field(response: HttpResponse) -> str:
91+
return "text" if isinstance(response.body, str) else "content"
92+
8893
def get(self, request: HttpRequest, responses: Union[HttpResponse, List[HttpResponse]]) -> None:
8994
self._mock_request_method(SupportedHttpMethods.GET, request, responses)
9095

@@ -98,6 +103,9 @@ def post(
98103
) -> None:
99104
self._mock_request_method(SupportedHttpMethods.POST, request, responses)
100105

106+
def put(self, request: HttpRequest, responses: Union[HttpResponse, List[HttpResponse]]) -> None:
107+
self._mock_request_method(SupportedHttpMethods.PUT, request, responses)
108+
101109
def delete(
102110
self, request: HttpRequest, responses: Union[HttpResponse, List[HttpResponse]]
103111
) -> None:

airbyte_cdk/test/mock_http/response.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,22 @@
11
# Copyright (c) 2023 Airbyte, Inc., all rights reserved.
22

33
from types import MappingProxyType
4-
from typing import Mapping
4+
from typing import Mapping, Union
55

66

77
class HttpResponse:
88
def __init__(
9-
self, body: str, status_code: int = 200, headers: Mapping[str, str] = MappingProxyType({})
9+
self,
10+
body: Union[str, bytes],
11+
status_code: int = 200,
12+
headers: Mapping[str, str] = MappingProxyType({}),
1013
):
1114
self._body = body
1215
self._status_code = status_code
1316
self._headers = headers
1417

1518
@property
16-
def body(self) -> str:
19+
def body(self) -> Union[str, bytes]:
1720
return self._body
1821

1922
@property

unit_tests/test/mock_http/test_mocker.py

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Copyright (c) 2023 Airbyte, Inc., all rights reserved.
2-
2+
import gzip
33
from unittest import TestCase
44

55
import pytest
@@ -75,6 +75,34 @@ def test_given_post_request_match_when_decorate_then_return_response(self, http_
7575
assert response.text == _A_RESPONSE_BODY
7676
assert response.status_code == 474
7777

78+
@HttpMocker()
79+
def test_given_put_request_match_when_decorate_then_return_response(self, http_mocker):
80+
http_mocker.put(
81+
HttpRequest(_A_URL, _SOME_QUERY_PARAMS, _SOME_HEADERS, _SOME_REQUEST_BODY_STR),
82+
HttpResponse(_A_RESPONSE_BODY, 474),
83+
)
84+
85+
response = requests.put(
86+
_A_URL, params=_SOME_QUERY_PARAMS, headers=_SOME_HEADERS, data=_SOME_REQUEST_BODY_STR
87+
)
88+
89+
assert response.text == _A_RESPONSE_BODY
90+
assert response.status_code == 474
91+
92+
@HttpMocker()
93+
def test_given_response_in_bytes_when_decorate_then_match(self, http_mocker):
94+
response_content = gzip.compress(bytes("This is the response within the gzip", "utf-8"))
95+
http_mocker.put(
96+
HttpRequest(_A_URL, _SOME_QUERY_PARAMS, _SOME_HEADERS, _SOME_REQUEST_BODY_STR),
97+
HttpResponse(response_content, 474),
98+
)
99+
100+
response = requests.put(
101+
_A_URL, params=_SOME_QUERY_PARAMS, headers=_SOME_HEADERS, data=_SOME_REQUEST_BODY_STR
102+
)
103+
104+
assert response.content == response_content
105+
78106
@HttpMocker()
79107
def test_given_multiple_responses_when_decorate_get_request_then_return_response(
80108
self, http_mocker

0 commit comments

Comments
 (0)