134 lines
4.8 KiB
Python
134 lines
4.8 KiB
Python
from __future__ import unicode_literals
|
|
import json
|
|
import httpretty
|
|
from httpretty import GET, POST
|
|
from ddt import ddt, data
|
|
|
|
try:
|
|
import unittest2 as unittest # Python2.6
|
|
except ImportError:
|
|
import unittest
|
|
|
|
from test_http import GetOrPost
|
|
import trovebox
|
|
|
|
@ddt
|
|
class TestHttpErrors(unittest.TestCase):
|
|
test_host = "test.example.com"
|
|
test_endpoint = "test.json"
|
|
test_uri = "http://%s/%s" % (test_host, test_endpoint)
|
|
test_data = {"message": "Test Message",
|
|
"code": 200,
|
|
"result": "Test Result"}
|
|
test_oauth = {"consumer_key": "dummy",
|
|
"consumer_secret": "dummy",
|
|
"token": "dummy",
|
|
"token_secret": "dummy"}
|
|
|
|
def setUp(self):
|
|
self.client = trovebox.Trovebox(host=self.test_host,
|
|
**self.test_oauth)
|
|
|
|
def _register_uri(self, method, uri=test_uri,
|
|
data=None, body=None, status=200, **kwds):
|
|
"""Convenience wrapper around httpretty.register_uri"""
|
|
if data is None:
|
|
data = self.test_data
|
|
# Set the JSON return code to match the HTTP status
|
|
data["code"] = status
|
|
if body is None:
|
|
body = json.dumps(data)
|
|
httpretty.register_uri(method, uri=uri, body=body, status=status,
|
|
**kwds)
|
|
|
|
@httpretty.activate
|
|
@data(GET, POST)
|
|
def test_error_status(self, method):
|
|
"""
|
|
Check that an error status causes the get/post methods
|
|
to raise an exception
|
|
"""
|
|
self._register_uri(method, status=500)
|
|
with self.assertRaises(trovebox.TroveboxError):
|
|
GetOrPost(self.client, method).call(self.test_endpoint)
|
|
|
|
@httpretty.activate
|
|
@data(GET, POST)
|
|
def test_404_status(self, method):
|
|
"""
|
|
Check that a 404 status causes the get/post methods
|
|
to raise a 404 exception
|
|
"""
|
|
self._register_uri(method, status=404)
|
|
with self.assertRaises(trovebox.Trovebox404Error):
|
|
GetOrPost(self.client, method).call(self.test_endpoint)
|
|
|
|
@httpretty.activate
|
|
@data(GET, POST)
|
|
def test_with_invalid_json(self, method):
|
|
"""
|
|
Check that invalid JSON causes the get/post methods to
|
|
raise an exception
|
|
"""
|
|
self._register_uri(method, body="Invalid JSON")
|
|
with self.assertRaises(ValueError):
|
|
GetOrPost(self.client, method).call(self.test_endpoint)
|
|
|
|
@httpretty.activate
|
|
@data(GET, POST)
|
|
def test_with_error_status_and_invalid_json(self, method):
|
|
"""
|
|
Check that invalid JSON causes the get/post methods to raise
|
|
an exception, even with an error status is returned
|
|
"""
|
|
self._register_uri(method, body="Invalid JSON", status=500)
|
|
with self.assertRaises(trovebox.TroveboxError):
|
|
GetOrPost(self.client, method).call(self.test_endpoint)
|
|
|
|
@httpretty.activate
|
|
@data(GET, POST)
|
|
def test_with_404_status_and_invalid_json(self, method):
|
|
"""
|
|
Check that invalid JSON causes the get/post methods to raise
|
|
an exception, even with a 404 status is returned
|
|
"""
|
|
self._register_uri(method, body="Invalid JSON", status=404)
|
|
with self.assertRaises(trovebox.Trovebox404Error):
|
|
GetOrPost(self.client, method).call(self.test_endpoint)
|
|
|
|
@httpretty.activate
|
|
@data(GET, POST)
|
|
def test_with_duplicate_status(self, method):
|
|
"""
|
|
Check that a get/post with a duplicate status
|
|
raises a duplicate exception
|
|
"""
|
|
data = {"message": "This photo already exists", "code": 409}
|
|
self._register_uri(method, data=data, status=409)
|
|
with self.assertRaises(trovebox.TroveboxDuplicateError):
|
|
GetOrPost(self.client, method).call(self.test_endpoint)
|
|
|
|
@httpretty.activate
|
|
@data(GET, POST)
|
|
def test_with_status_code_mismatch(self, method):
|
|
"""
|
|
Check that a mismatched HTTP status code still returns the
|
|
JSON status code.
|
|
"""
|
|
data = {"message": "Test Message", "code": 202}
|
|
self._register_uri(method, data=data, status=200)
|
|
response = GetOrPost(self.client, method).call(self.test_endpoint)
|
|
self.assertEqual(response["code"], 202)
|
|
|
|
@httpretty.activate
|
|
@data(GET, POST)
|
|
def test_http_error_with_no_response_processing(self, method):
|
|
"""
|
|
Check that get/post methods work with response processing disabled
|
|
when an HTTP error code is returned.
|
|
"""
|
|
httpretty.register_uri(method, self.test_uri, status=500)
|
|
with self.assertRaises(trovebox.TroveboxError):
|
|
response = GetOrPost(self.client, method).call(self.test_endpoint,
|
|
process_response=False)
|
|
|