Skip to content

Commit c7505b6

Browse files
committed
test: test error wrapping
1 parent 86a9025 commit c7505b6

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed

tests/test_error.py

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
from datetime import datetime
2+
import pytest
3+
from typed_api_response.schemas import ResponseMeta, ErrorPayload, ApiErrorResponse, ErrorPayloadData
4+
from typed_api_response.response import build_api_response
5+
6+
7+
class CustomExceptionForTest(Exception):
8+
pass
9+
10+
def test_error_shape():
11+
try:
12+
_ = 1 / 0
13+
except Exception as e:
14+
response = build_api_response(error=e, status=418)
15+
16+
assert response.status == 418
17+
assert isinstance(response, ApiErrorResponse)
18+
assert isinstance(response.meta, ResponseMeta)
19+
assert isinstance(response.payload, ErrorPayload)
20+
assert isinstance(response.payload.error, ErrorPayloadData)
21+
assert response.payload.error.type == e.__class__.__name__
22+
assert response.payload.error.msg == str(e)
23+
assert response.payload.success == False
24+
assert response.payload.data == None
25+
else:
26+
pytest.fail("How???")
27+
28+
def test_custom_exception():
29+
try:
30+
raise CustomExceptionForTest("The app is broken")
31+
except CustomExceptionForTest as e:
32+
response = build_api_response(error=e, status=500)
33+
assert response.payload.error.type == "CustomExceptionForTest"
34+
assert response.payload.error.msg == "The app is broken"
35+
36+
def test_error_with_custom_meta():
37+
meta = ResponseMeta(method="post", path="/fail")
38+
try:
39+
raise RuntimeError("bad things")
40+
except Exception as e:
41+
response = build_api_response(error=e, status=500, meta=meta)
42+
43+
assert response.meta is not None
44+
assert isinstance(response.meta, ResponseMeta)
45+
assert response.meta.method == "POST"
46+
assert response.meta.path == "/fail"
47+
assert response.payload.error.type == e.__class__.__name__
48+
assert response.payload.error.msg == str(e)
49+
assert response.payload.success == False
50+
assert response.payload.data == None
51+
else:
52+
pytest.fail("No error raised. Did you change error behavior?")
53+
54+
def test_timestamp_is_set():
55+
foo = [1, 2, 3, 4]
56+
try:
57+
foo[9999]
58+
except IndexError as e:
59+
response = build_api_response(error=e, status=404)
60+
assert response.meta is not None
61+
assert response.meta.timestamp is not None
62+
assert isinstance(response.meta.timestamp, datetime)
63+
else:
64+
pytest.fail("No error raised. Did you change error behavior?")

0 commit comments

Comments
 (0)