Skip to content

Commit 6192aa9

Browse files
authored
Replace httpretty with responses in tests (#64)
Co-authored-by: Samuel Scully
1 parent 7b4ff25 commit 6192aa9

10 files changed

+81
-77
lines changed

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
],
7272
test_suite='pytest',
7373
tests_require=[
74-
'httpretty>=1.1.4',
74+
'responses>=0.25.7',
7575
'pylint==2.17.4',
7676
'pytest>=7.4.0'
7777
],

test/test_all.py

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@
33
from pathlib import Path
44

55
import os
6-
import httpretty
6+
import responses
77

8-
from httpretty import httprettified
98
from opencage.geocoder import OpenCageGeocode
109

1110
# reduce maximum backoff retry time from 120s to 1s
@@ -22,51 +21,54 @@ def _any_result_around(results, lat=None, lon=None):
2221
return True
2322
return False
2423

25-
@httprettified
24+
@responses.activate
2625
def test_gb_postcode():
27-
httpretty.register_uri(
28-
httpretty.GET,
26+
responses.add(
27+
responses.GET,
2928
geocoder.url,
30-
body=Path('test/fixtures/uk_postcode.json').read_text(encoding="utf-8")
29+
body=Path('test/fixtures/uk_postcode.json').read_text(encoding="utf-8"),
30+
status=200
3131
)
3232

3333
results = geocoder.geocode("EC1M 5RF")
3434
assert _any_result_around(results, lat=51.5201666, lon=-0.0985142)
3535

3636

37-
@httprettified
37+
@responses.activate
3838
def test_australia():
39-
httpretty.register_uri(
40-
httpretty.GET,
39+
responses.add(
40+
responses.GET,
4141
geocoder.url,
42-
body=Path('test/fixtures/mudgee_australia.json').read_text(encoding="utf-8")
42+
body=Path('test/fixtures/mudgee_australia.json').read_text(encoding="utf-8"),
43+
status=200
4344
)
4445

4546
results = geocoder.geocode("Mudgee, Australia")
4647
assert _any_result_around(results, lat=-32.5980702, lon=149.5886383)
4748

4849

49-
@httprettified
50+
@responses.activate
5051
def test_munster():
51-
httpretty.register_uri(
52-
httpretty.GET,
52+
responses.add(
53+
responses.GET,
5354
geocoder.url,
54-
body=Path('test/fixtures/muenster.json').read_text(encoding="utf-8")
55+
body=Path('test/fixtures/muenster.json').read_text(encoding="utf-8"),
56+
status=200
5557
)
5658

5759
results = geocoder.geocode("Münster")
5860
assert _any_result_around(results, lat=51.9625101, lon=7.6251879)
5961

60-
@httprettified
62+
@responses.activate
6163
def test_donostia():
62-
httpretty.register_uri(
63-
httpretty.GET,
64+
responses.add(
65+
responses.GET,
6466
geocoder.url,
65-
body=Path('test/fixtures/donostia.json').read_text(encoding="utf-8")
66-
67+
body=Path('test/fixtures/donostia.json').read_text(encoding="utf-8"),
68+
status=200
6769
)
6870

69-
results =geocoder.geocode("Donostia")
71+
results = geocoder.geocode("Donostia")
7072
assert _any_result_around(results, lat=43.300836, lon=-1.9809529)
7173

7274
# test that the results are in unicode

test/test_error_blocked.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
11
from pathlib import Path
22

33
import pytest
4-
import httpretty
4+
import responses
55

6-
from httpretty import httprettified
76
from opencage.geocoder import OpenCageGeocode
87
from opencage.geocoder import ForbiddenError
98

109

1110
geocoder = OpenCageGeocode('2e10e5e828262eb243ec0b54681d699a') # will always return 403
1211

13-
@httprettified
12+
@responses.activate
1413
def test_api_key_blocked():
15-
httpretty.register_uri(
16-
httpretty.GET,
14+
responses.add(
15+
responses.GET,
1716
geocoder.url,
1817
body=Path('test/fixtures/403_apikey_disabled.json').read_text(encoding="utf-8"),
1918
status=403,

test/test_error_invalid_input.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
import pytest
22

3-
import httpretty
3+
import responses
44

5-
from httpretty import httprettified
65
from opencage.geocoder import OpenCageGeocode
76
from opencage.geocoder import InvalidInputError
87

98
geocoder = OpenCageGeocode('abcde')
109

11-
@httprettified
10+
@responses.activate
1211
def test_must_be_unicode_string():
13-
httpretty.register_uri(
14-
httpretty.GET,
12+
responses.add(
13+
responses.GET,
1514
geocoder.url,
16-
body='{"results":{}}'
15+
body='{"results":{}}',
16+
status=200
1717
)
1818

1919
# Should not give errors

test/test_error_not_authorized.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
11
from pathlib import Path
22

3-
import httpretty
43
import pytest
4+
import responses
55

6-
from httpretty import httprettified
76
from opencage.geocoder import OpenCageGeocode
87
from opencage.geocoder import NotAuthorizedError
98

109
geocoder = OpenCageGeocode('unauthorized-key')
1110

12-
@httprettified
11+
@responses.activate
1312
def test_api_key_not_authorized():
14-
httpretty.register_uri(
15-
httpretty.GET,
13+
responses.add(
14+
responses.GET,
1615
geocoder.url,
1716
body=Path('test/fixtures/401_not_authorized.json').read_text(encoding="utf-8"),
1817
status=401,

test/test_error_ratelimit_exceeded.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,34 @@
11
from pathlib import Path
22

3-
import httpretty
43
import pytest
4+
import responses
55

6-
from httpretty import httprettified
76
from opencage.geocoder import OpenCageGeocode
87
from opencage.geocoder import RateLimitExceededError
98

109
geocoder = OpenCageGeocode('abcde')
1110

12-
@httprettified
11+
@responses.activate
1312
def test_no_rate_limit():
14-
httpretty.register_uri(
15-
httpretty.GET,
13+
responses.add(
14+
responses.GET,
1615
geocoder.url,
17-
body=Path('test/fixtures/no_ratelimit.json').read_text(encoding="utf-8")
16+
body=Path('test/fixtures/no_ratelimit.json').read_text(encoding="utf-8"),
17+
status=200
1818
)
1919
# shouldn't raise an exception
2020
geocoder.geocode("whatever")
2121

2222

23-
@httprettified
23+
@responses.activate
2424
def test_rate_limit_exceeded():
2525
# 4372eff77b8343cebfc843eb4da4ddc4 will always return 402
26-
httpretty.register_uri(
27-
httpretty.GET,
26+
responses.add(
27+
responses.GET,
2828
geocoder.url,
2929
body=Path('test/fixtures/402_rate_limit_exceeded.json').read_text(encoding="utf-8"),
3030
status=402,
31-
adding_headers={
31+
headers={
3232
'X-RateLimit-Limit': '2500',
3333
'X-RateLimit-Remaining': '0',
3434
'X-RateLimit-Reset': '1402185600'

test/test_error_unknown.py

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
import pytest
22

3-
import httpretty
3+
import responses
44

5-
from httpretty import httprettified
65
from opencage.geocoder import OpenCageGeocode
76
from opencage.geocoder import UnknownError
87

98
geocoder = OpenCageGeocode('abcde')
109

11-
@httprettified
10+
@responses.activate
1211
def test_http_500_status():
13-
httpretty.register_uri(
14-
httpretty.GET,
12+
responses.add(
13+
responses.GET,
1514
geocoder.url,
15+
body='{}',
1616
status=500,
1717
)
1818

@@ -21,14 +21,14 @@ def test_http_500_status():
2121

2222
assert str(excinfo.value) == '500 status code from API'
2323

24-
@httprettified
24+
@responses.activate
2525
def test_non_json():
2626
"These kinds of errors come from webserver and may not be JSON"
27-
httpretty.register_uri(
28-
httpretty.GET,
27+
responses.add(
28+
responses.GET,
2929
geocoder.url,
3030
body='<html><body><h1>503 Service Unavailable</h1></body></html>',
31-
forcing_headers={
31+
headers={
3232
'Content-Type': 'text/html',
3333
},
3434
status=503
@@ -39,12 +39,13 @@ def test_non_json():
3939

4040
assert str(excinfo.value) == 'Non-JSON result from server'
4141

42-
@httprettified
42+
@responses.activate
4343
def test_no_results_key():
44-
httpretty.register_uri(
45-
httpretty.GET,
44+
responses.add(
45+
responses.GET,
4646
geocoder.url,
4747
body='{"spam": "eggs"}',
48+
status=200, # Need to specify status code with responses
4849
)
4950

5051
with pytest.raises(UnknownError) as excinfo:

test/test_headers.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,8 @@
44

55
import os
66
import re
7-
import httpretty
7+
import responses
88

9-
from httpretty import httprettified
109
from opencage.geocoder import OpenCageGeocode
1110

1211
# reduce maximum backoff retry time from 120s to 1s
@@ -16,15 +15,19 @@
1615

1716
user_agent_format = re.compile(r'^opencage-python/[\d\.]+ Python/[\d\.]+ (requests|aiohttp)/[\d\.]+ \(OpenCage Test\)$')
1817

19-
@httprettified
18+
@responses.activate
2019
def test_sync():
21-
httpretty.register_uri(
22-
httpretty.GET,
20+
responses.add(
21+
responses.GET,
2322
geocoder.url,
24-
body=Path('test/fixtures/uk_postcode.json').read_text(encoding="utf-8")
23+
body=Path('test/fixtures/uk_postcode.json').read_text(encoding="utf-8"),
24+
status=200
2525
)
2626

2727
geocoder.geocode("EC1M 5RF")
28-
user_agent = httpretty.last_request().headers['User-Agent']
28+
29+
# Check the User-Agent header in the most recent request
30+
request = responses.calls[-1].request
31+
user_agent = request.headers['User-Agent']
2932

3033
assert user_agent_format.match(user_agent) is not None

test/test_session.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,9 @@
22

33
from pathlib import Path
44

5-
import httpretty
65
import pytest
6+
import responses
77

8-
from httpretty import httprettified
98
from opencage.geocoder import OpenCageGeocode
109
from opencage.geocoder import NotAuthorizedError
1110

@@ -16,23 +15,24 @@ def _any_result_around(results, lat=None, lon=None):
1615
return True
1716
return False
1817

19-
@httprettified
18+
@responses.activate
2019
def test_success():
2120
with OpenCageGeocode('abcde') as geocoder:
22-
httpretty.register_uri(
23-
httpretty.GET,
21+
responses.add(
22+
responses.GET,
2423
geocoder.url,
25-
body=Path('test/fixtures/uk_postcode.json').read_text(encoding="utf-8")
24+
body=Path('test/fixtures/uk_postcode.json').read_text(encoding="utf-8"),
25+
status=200
2626
)
2727

2828
results = geocoder.geocode("EC1M 5RF")
2929
assert _any_result_around(results, lat=51.5201666, lon=-0.0985142)
3030

31-
@httprettified
31+
@responses.activate
3232
def test_failure():
3333
with OpenCageGeocode('unauthorized-key') as geocoder:
34-
httpretty.register_uri(
35-
httpretty.GET,
34+
responses.add(
35+
responses.GET,
3636
geocoder.url,
3737
body=Path('test/fixtures/401_not_authorized.json').read_text(encoding="utf-8"),
3838
status=401,

tox.ini

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ python =
1212

1313
[testenv]
1414
deps =
15-
httpretty
15+
responses
1616
pytest
1717
pytest-aiohttp
1818
pytest-asyncio
@@ -22,7 +22,7 @@ commands =
2222
[testenv:lint]
2323
usedevelop = True
2424
deps =
25-
httpretty
25+
responses
2626
pylint==2.17.4
2727
pytest
2828
commands =

0 commit comments

Comments
 (0)