Skip to content

Commit

Permalink
Error tests
Browse files Browse the repository at this point in the history
  • Loading branch information
maxhollmann committed Dec 28, 2021
1 parent 8d4559a commit 4806edf
Show file tree
Hide file tree
Showing 6 changed files with 90 additions and 5 deletions.
2 changes: 1 addition & 1 deletion bin/format
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ set -e

autoflake --in-place \
--remove-unused-variables \
--imports=requests,blueskyapi \
--imports=requests,blueskyapi,pandas \
-r src tests

black .
Expand Down
16 changes: 15 additions & 1 deletion poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ pytest-vcr = "^1.0.2"
responses = "^0.16.0"
autoflake = "^1.4"
pytest-describe = "^2.0.1"
doubles = "^1.5.3"

[tool.black]
target-version = ['py37']
Expand Down
2 changes: 1 addition & 1 deletion src/blueskyapi/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ def _get(self, endpoint, params={}):
if response.ok:
return response.content
else:
raise errors._request_error_from_response(response)
raise errors.request_error_from_response(response)

def _url(self, endpoint):
return self.base_url + endpoint
4 changes: 2 additions & 2 deletions src/blueskyapi/errors.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ class Error(Exception):


class RequestError(Error):
def __init__(self, response=None):
def __init__(self, response):
self.response = response

msg = f"API responded with {response.status_code} - {response.reason}"
Expand Down Expand Up @@ -43,6 +43,6 @@ def _error_by_status_code(code):
return RequestError


def _request_error_from_response(response):
def request_error_from_response(response):
klass = _error_by_status_code(response.status_code)
return klass(response)
70 changes: 70 additions & 0 deletions tests/blueskyapi/errors_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import inspect
import json

import requests
from doubles import InstanceDouble
from doubles import allow

from blueskyapi import errors


def describe_request_error():
def with_json_response():
response = InstanceDouble(
"requests.Response",
status_code=400,
reason="Some reason",
text=json.dumps({"some": "json"}),
)
error = errors.RequestError(response)

str(error) == inspect.cleandoc(
"""
API responded with 400 - Some reason
{
"some": "json"
}
"""
)

def with_text_response():
response = InstanceDouble(
"requests.Response",
status_code=400,
reason="Some reason",
text="Non-json text",
)
error = errors.RequestError(response)

str(error) == inspect.cleandoc(
"""
API responded with 400 - Some reason
Non-json text
"""
)


def test_error_by_status_code():
assert (
errors._error_by_status_code(requests.codes.too_many_requests)
== errors.OverRateLimit
)
assert (
errors._error_by_status_code(requests.codes.unauthorized)
== errors.InvalidApiKey
)
assert errors._error_by_status_code(1234) == errors.RequestError


def test_request_error_from_response():
response = InstanceDouble(
"requests.Response",
status_code=requests.codes.too_many_requests,
reason="Too many requests",
text=json.dumps({"some": "json"}),
)
error = errors.request_error_from_response(response)
assert type(error) == errors.OverRateLimit
assert error.response == response

0 comments on commit 4806edf

Please sign in to comment.