Skip to content

Commit 3fbd9c0

Browse files
authored
Use responses in filelink and utils tests (#65)
1 parent bfd98e9 commit 3fbd9c0

File tree

2 files changed

+62
-55
lines changed

2 files changed

+62
-55
lines changed

tests/filelink_test.py

Lines changed: 42 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import io
2+
import re
23
from unittest.mock import mock_open, patch, ANY
34

45
import pytest
6+
import responses
7+
58
from httmock import urlmatch, HTTMock, response
69

7-
from tests.helpers import DummyHttpResponse
810
from filestack import Filelink, Security
911
from filestack import config
1012

@@ -93,25 +95,27 @@ def api_bad(url, request):
9395
}
9496
),
9597
])
96-
@patch('filestack.models.filelink.requests.get')
97-
def test_metadata(get_mock, attributes, security, expected_params, filelink):
98-
get_mock.return_value = DummyHttpResponse(json_dict={'metadata': 'content'})
98+
@responses.activate
99+
def test_metadata(attributes, security, expected_params, filelink):
100+
responses.add(
101+
responses.GET,
102+
re.compile('https://cdn.filestackcontent.com/SOMEHANDLE/metadata.*'),
103+
json={'metadata': 'content'}
104+
)
99105
metadata_response = filelink.metadata(attributes_list=attributes, security=security)
100106
assert metadata_response == {'metadata': 'content'}
101-
expected_url = '{}/SOMEHANDLE/metadata'.format(config.CDN_URL)
102-
get_mock.assert_called_once_with(expected_url, params=expected_params)
107+
assert responses.calls[0].request.params == expected_params
103108

104109

110+
@responses.activate
105111
def test_download(filelink):
106-
@urlmatch(netloc=r'cdn\.filestackcontent\.com', method='get', scheme='https')
107-
def api_download(url, request):
108-
return response(200, b'file-content')
109-
112+
responses.add(
113+
responses.GET, 'https://cdn.filestackcontent.com/{}'.format(HANDLE), body=b'file-content'
114+
)
110115
m = mock_open()
111116
with patch('filestack.mixins.common.open', m):
112-
with HTTMock(api_download):
113-
file_size = filelink.download('tests/data/test_download.jpg')
114-
assert file_size == 12
117+
file_size = filelink.download('tests/data/test_download.jpg')
118+
assert file_size == 12
115119
m().write.assert_called_once_with(b'file-content')
116120

117121

@@ -120,22 +124,27 @@ def test_tags_without_security(filelink):
120124
filelink.tags()
121125

122126

123-
@patch('filestack.utils.requests.get')
124-
def test_tags(get_mock, secure_filelink):
125-
image_tags = {'tags': {'cat': 99}}
126-
get_mock.return_value = DummyHttpResponse(json_dict=image_tags)
127-
assert secure_filelink.tags() == image_tags
128-
get_mock.assert_called_once_with('{}/tags/{}/{}'.format(config.CDN_URL, SECURITY.as_url_string(), HANDLE))
127+
@responses.activate
128+
def test_tags(secure_filelink):
129+
responses.add(
130+
responses.GET, re.compile('https://cdn.filestackcontent.com/tags/.*/{}$'.format(HANDLE)),
131+
json={'tags': {'cat': 98}}
132+
)
133+
assert secure_filelink.tags() == {'tags': {'cat': 98}}
134+
assert responses.calls[0].request.url == '{}/tags/{}/{}'.format(config.CDN_URL, SECURITY.as_url_string(), HANDLE)
129135

130136

131-
@patch('filestack.utils.requests.get')
132-
def test_tags_on_transformation(get_mock, secure_filelink):
137+
@responses.activate
138+
def test_tags_on_transformation(secure_filelink):
133139
transformation = secure_filelink.resize(width=100)
134140
image_tags = {'tags': {'cat': 99}}
135-
get_mock.return_value = DummyHttpResponse(json_dict=image_tags)
141+
responses.add(
142+
responses.GET, re.compile('{}/resize.*/{}$'.format(config.CDN_URL, HANDLE)),
143+
json=image_tags
144+
)
136145
assert transformation.tags() == image_tags
137-
get_mock.assert_called_once_with(
138-
'{}/resize=width:100/tags/{}/{}'.format(config.CDN_URL, SECURITY.as_url_string(), HANDLE)
146+
assert responses.calls[0].request.url == '{}/resize=width:100/tags/{}/{}'.format(
147+
config.CDN_URL, SECURITY.as_url_string(), HANDLE
139148
)
140149

141150

@@ -144,22 +153,22 @@ def test_sfw_without_security(filelink):
144153
filelink.sfw()
145154

146155

147-
@patch('filestack.utils.requests.get')
148-
def test_sfw(get_mock, secure_filelink):
156+
@responses.activate
157+
def test_sfw(secure_filelink):
149158
sfw_response = {'sfw': False}
150-
get_mock.return_value = DummyHttpResponse(json_dict=sfw_response)
159+
responses.add(responses.GET, re.compile('{}.*'.format(config.CDN_URL)), json=sfw_response)
151160
assert secure_filelink.sfw() == sfw_response
152-
get_mock.assert_called_once_with('{}/sfw/{}/{}'.format(config.CDN_URL, SECURITY.as_url_string(), HANDLE))
161+
assert responses.calls[0].request.url == '{}/sfw/{}/{}'.format(config.CDN_URL, SECURITY.as_url_string(), HANDLE)
153162

154163

155-
@patch('filestack.utils.requests.get')
156-
def test_sfw_on_transformation(get_mock, secure_filelink):
164+
@responses.activate
165+
def test_sfw_on_transformation(secure_filelink):
157166
transformation = secure_filelink.resize(width=100)
158167
sfw_response = {'sfw': True}
159-
get_mock.return_value = DummyHttpResponse(json_dict=sfw_response)
168+
responses.add(responses.GET, re.compile('{}/resize.*'.format(config.CDN_URL)), json=sfw_response)
160169
assert transformation.sfw() == sfw_response
161-
get_mock.assert_called_once_with(
162-
'{}/resize=width:100/sfw/{}/{}'.format(config.CDN_URL, SECURITY.as_url_string(), HANDLE)
170+
assert responses.calls[0].request.url == '{}/resize=width:100/sfw/{}/{}'.format(
171+
config.CDN_URL, SECURITY.as_url_string(), HANDLE
163172
)
164173

165174

tests/utils_test.py

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,36 @@
1-
import re
2-
from unittest.mock import patch
3-
41
import pytest
2+
import responses
53

6-
from tests.helpers import DummyHttpResponse
74
from filestack import __version__
85
from filestack.utils import requests
96

10-
TEST_URL = 'http://just.some.url'
7+
TEST_URL = 'http://just.some.url/'
118

129

13-
@patch('filestack.utils.original_requests.post')
14-
def test_req_wrapper_overwrite_headers(post_mock):
10+
@responses.activate
11+
def test_req_wrapper_overwrite_headers():
12+
responses.add(responses.POST, TEST_URL)
1513
requests.post(TEST_URL)
16-
post_args, post_kwargs = post_mock.call_args
17-
headers_sent = post_kwargs['headers']
18-
assert post_args[0] == TEST_URL
19-
assert headers_sent['User-Agent'] == 'filestack-python {}'.format(__version__)
20-
assert headers_sent['Filestack-Source'] == 'Python-{}'.format(__version__)
21-
assert re.match(r'\d+-[a-zA-Z0-9]{10}', headers_sent['Filestack-Trace-Id'])
22-
assert re.match(r'pythonsdk-[a-zA-Z0-9]{10}', headers_sent['Filestack-Trace-Span'])
14+
mocked_request = responses.calls[0].request
15+
assert mocked_request.url == TEST_URL
16+
assert 'Filestack-Trace-Id' in mocked_request.headers
17+
assert 'Filestack-Trace-Span' in mocked_request.headers
18+
assert 'filestack-python {}'.format(__version__) == mocked_request.headers['User-Agent']
19+
assert 'Python-{}'.format(__version__) == mocked_request.headers['Filestack-Source']
2320

2421

25-
@patch('filestack.utils.original_requests.post')
26-
def test_req_wrapper_use_provided_headers(post_mock):
22+
@responses.activate
23+
def test_req_wrapper_use_provided_headers():
24+
responses.add(responses.POST, TEST_URL)
2725
custom_headers = {'something': 'used explicitly'}
2826
requests.post(TEST_URL, headers=custom_headers)
29-
post_args, post_kwargs = post_mock.call_args
30-
assert post_args[0] == TEST_URL
31-
assert post_kwargs['headers'] == custom_headers
27+
print(responses.calls[0].request.headers)
28+
assert responses.calls[0].request.url == TEST_URL
29+
assert responses.calls[0].request.headers['something'] == 'used explicitly'
3230

3331

34-
@patch('filestack.utils.original_requests.post')
35-
def test_req_wrapper_raise_exception(post_mock):
36-
post_mock.return_value = DummyHttpResponse(ok=False, content=b'oops!')
32+
@responses.activate
33+
def test_req_wrapper_raise_exception():
34+
responses.add(responses.POST, TEST_URL, status=500, body=b'oops!')
3735
with pytest.raises(Exception, match='oops!'):
3836
requests.post(TEST_URL)

0 commit comments

Comments
 (0)