Skip to content

Commit 29959d6

Browse files
committed
add parser test
1 parent 7e86b28 commit 29959d6

File tree

2 files changed

+88
-0
lines changed

2 files changed

+88
-0
lines changed

specs/mixins/test_parser.py

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
import pytest
2+
import mock
3+
from amadeus import Response, Request, Client
4+
from amadeus import NetworkError, ServerError, AuthenticationError
5+
from amadeus import NotFoundError, ClientError, ParserError
6+
7+
8+
@pytest.fixture
9+
def self():
10+
self.request = mock.MagicMock(Request)
11+
self.client = mock.MagicMock(Client)
12+
self.client.log_level = 'silent'
13+
return self
14+
15+
16+
@pytest.fixture
17+
def response_setup():
18+
http_response = mock.MagicMock()
19+
request = mock.MagicMock(Request)
20+
response_setup.client = mock.MagicMock(Client)
21+
response_setup.client.log_level = 'silent'
22+
response_setup.response = Response(http_response, request)
23+
return response_setup
24+
25+
26+
def test_should_parse_body(self, response_setup):
27+
response_setup.response.status_code = '200'
28+
response_setup.response.headers = {'Content-Type': 'application/json'}
29+
response_setup.response.text = '{ "data" : { "a" : 1 } }'
30+
response = Response(response_setup.response, self.request)
31+
response = response._parse(response_setup.client)
32+
assert isinstance(response, Response)
33+
34+
35+
def test_should_raise_network_error_with_no_code(response_setup):
36+
response_setup.response.status_code = None
37+
response_setup.response.parsed = False
38+
with pytest.raises(NetworkError):
39+
response_setup.response._detect_error(response_setup.client)
40+
41+
42+
def test_should_raise_server_error_with_500(response_setup):
43+
response_setup.response.status_code = 500
44+
response_setup.response.parsed = False
45+
with pytest.raises(ServerError):
46+
response_setup.response._detect_error(response_setup.client)
47+
48+
49+
def test_should_raise_auth_error_with_401(response_setup):
50+
response_setup.response.status_code = 401
51+
response_setup.response.parsed = False
52+
with pytest.raises(AuthenticationError):
53+
response_setup.response._detect_error(response_setup.client)
54+
55+
56+
def test_should_raise_not_found_error_with_404(response_setup):
57+
response_setup.response.status_code = 404
58+
response_setup.response.parsed = False
59+
with pytest.raises(NotFoundError):
60+
response_setup.response._detect_error(response_setup.client)
61+
62+
63+
def test_should_raise_a_generic_error_with_400(response_setup):
64+
response_setup.response.status_code = 400
65+
response_setup.response.parsed = False
66+
with pytest.raises(ClientError):
67+
response_setup.response._detect_error(response_setup.client)
68+
69+
70+
def test_should_raise_error_if_not_parsed_with_200(response_setup):
71+
response_setup.response.status_code = 200
72+
response_setup.response.parsed = False
73+
with pytest.raises(ParserError):
74+
response_setup.response._detect_error(response_setup.client)
75+
76+
77+
def test_should_raise_error_when_exception(response_setup):
78+
response_setup.response.status_code = 200
79+
response_setup.response.parsed = True
80+
response_setup.response.body = None
81+
response_setup.response._detect_error(response_setup.client)
82+
83+
84+
def test_should_not_raise_error_body_with_204(response_setup):
85+
response_setup.response.status_code = 204
86+
response_setup.response.parsed = False
87+
assert response_setup.response.status_code == 204
88+
response_setup.response._detect_error(response_setup.client)

0 commit comments

Comments
 (0)