|
4 | 4 | from mock import patch, Mock
|
5 | 5 | from requests import Session
|
6 | 6 |
|
| 7 | +from twilio.base.version import Version |
| 8 | +from twilio.base.exceptions import TwilioRestException |
7 | 9 | from twilio.http.http_client import TwilioHttpClient
|
8 | 10 | from twilio.http.response import Response
|
9 | 11 |
|
@@ -64,7 +66,7 @@ def test_request_where_class_timeout_manually_set(self):
|
64 | 66 | self.client.timeout = 30
|
65 | 67 |
|
66 | 68 | response = self.client.request(
|
67 |
| - 'doesnt matter', 'doesnt matter') |
| 69 | + 'doesnt matter', 'doesnt matter') |
68 | 70 | self.assertEqual('other.twilio.com', self.request_mock.headers['Host'])
|
69 | 71 | self.assertEqual(200, response.status_code)
|
70 | 72 | self.assertEqual('testing-unicode: Ω≈ç√, 💩', response.content)
|
@@ -143,6 +145,28 @@ def test_request_behind_proxy(self):
|
143 | 145 | self.client.request('doesnt matter', 'doesnt matter')
|
144 | 146 | self.assertEqual(proxies, self.session_mock.proxies)
|
145 | 147 |
|
| 148 | + def test_exception_with_details(self): |
| 149 | + v1 = MyVersion(self.client) |
| 150 | + error_text = """{ |
| 151 | + "code": 20001, |
| 152 | + "message": "Bad request", |
| 153 | + "more_info": "https://www.twilio.com/docs/errors/20001", |
| 154 | + "status": 400, |
| 155 | + "details": { |
| 156 | + "foo":"bar" |
| 157 | + } |
| 158 | + }""" |
| 159 | + self.session_mock.send.return_value = Response(400, error_text) |
| 160 | + try: |
| 161 | + v1.fetch("get", "none", None, None, None, None, None) |
| 162 | + self.fail('should not happen') |
| 163 | + except TwilioRestException as err: |
| 164 | + self.assertEqual(400, err.status) |
| 165 | + self.assertEqual(20001, err.code) |
| 166 | + self.assertEqual("get", err.method) |
| 167 | + self.assertEqual("Unable to fetch record: Bad request", err.msg) |
| 168 | + self.assertEqual({"foo": "bar"}, err.details) |
| 169 | + |
146 | 170 |
|
147 | 171 | class TestHttpClientSession(unittest.TestCase):
|
148 | 172 |
|
@@ -186,3 +210,10 @@ def test_session_not_preserved(self):
|
186 | 210 | # Used different session, responses should be different
|
187 | 211 | self.assertEqual(response_1.content, 'response_1')
|
188 | 212 | self.assertEqual(response_2.content, 'response_2')
|
| 213 | + |
| 214 | + |
| 215 | +class MyVersion(Version): |
| 216 | + def __init__(self, domain): |
| 217 | + super(MyVersion, self).__init__(domain) |
| 218 | + self.version = 'v1' |
| 219 | + self._credentials = None |
0 commit comments