Ejemplo n.º 1
0
 def setUp(self):
     self.app = ResponsiveFlask(__name__)
     self.client = self.app.test_client()
# coding: utf-8
"""
messaging_api_v2
~~~~~~~~~~~~~~~~

API version 2.

"""
from api_utils import ResponsiveFlask

app = ResponsiveFlask(__name__)
app.debug = True

from . import views
Ejemplo n.º 3
0
class ErrorHandlingByResponsiveFlaskTest(FlaskTestCase):
    def setUp(self):
        self.app = ResponsiveFlask(__name__)
        self.client = self.app.test_client()

    def test_error_was_is_formatted_as_text_html_by_default(self):
        self.app.add_url_rule('/', view_func=hello_bad_request)

        r = self.client.get('/')
        expected_status_code = 400

        self.assertEqual(r.status_code, expected_status_code)
        self.assertEqual(r.mimetype, 'text/html')

    def test_400_error_is_json_formatted_when_view_raises_key_error(self):
        self.app.add_url_rule('/', view_func=hello_bad_request)
        self.app.default_errorhandler(code_and_message)

        r = self.client.get('/')
        r_json = json.loads(r.data)
        expected_status_code = 400

        self.assertEqual(r.status_code, expected_status_code)
        self.assertEqual(r_json['code'], expected_status_code)
        self.assertEqual(r.mimetype, 'application/json')

    def test_error_response_contains_code_and_message_fields(self):
        self.app.add_url_rule('/', view_func=hello_bad_request)
        self.app.default_errorhandler(code_and_message)

        r = self.client.get('/')
        r_json = json.loads(r.data)

        self.assertIn('code', r_json)
        self.assertIn('message', r_json)
Ejemplo n.º 4
0
class ResponsiveFlaskTest(FlaskTestCase):
    def setUp(self):
        self.app = ResponsiveFlask(__name__)
        self.client = self.app.test_client()

    def test_json_response_when_accept_header_is_not_given(self):
        self.app.add_url_rule('/', view_func=hello_world)

        headers = {}
        r = self.client.get('/', headers=headers)
        r_json = json.loads(r.data)

        self.assertEqual(r_json, expected_json)
        self.assertEqual(r.mimetype, 'application/json')

    def test_json_response_when_accept_header_means_all_media_types(self):
        self.app.add_url_rule('/', view_func=hello_world)

        headers = {
            'Accept': '*/*',
        }
        r = self.client.get('/', headers=headers)
        r_json = json.loads(r.data)

        self.assertEqual(r_json, expected_json)
        self.assertEqual(r.mimetype, 'application/json')

    def test_406_when_accept_header_is_given_but_format_is_unknown(self):
        self.app.add_url_rule('/', view_func=hello_world)

        headers = {
            'Accept': 'application/vnd.company.myapp.product-v2+xml',
        }
        r = self.client.get('/', headers=headers)
        not_acceptable_status_code = 406

        self.assertEqual(r.status_code, not_acceptable_status_code)
        self.assertEqual(r.mimetype, 'application/json')

    def test_list_of_mimetypes_is_in_json_when_format_is_unknown(self):
        self.app.add_url_rule('/', view_func=hello_world)

        headers = {
            'Accept': 'blah/*',
        }
        r = self.client.get('/', headers=headers)
        r_json = json.loads(r.data)
        expected_json = {
            'mimetypes': ['application/json'],
        }

        self.assertEqual(r_json, expected_json)
        self.assertEqual(r.mimetype, 'application/json')

    def test_json_is_used_because_xml_formatter_is_not_set(self):
        self.app.add_url_rule('/', view_func=hello_world)

        headers = {
            'Accept': 'application/xml,application/json',
        }
        r = self.client.get('/', headers=headers)
        r_json = json.loads(r.data)

        self.assertEqual(r_json, expected_json)
        self.assertEqual(r.mimetype, 'application/json')

    def test_xml_is_used_because_xml_formatter_is_set_manually(self):
        self.app.add_url_rule('/', view_func=hello_world)
        self.app.response_formatters['application/xml'] = dummy_xml_formatter

        headers = {
            'Accept': 'application/xml,application/json',
        }
        r = self.client.get('/', headers=headers)

        self.assertEqual(r.data, expected_xml)
        self.assertEqual(r.mimetype, 'application/xml')

    def test_xml_is_used_because_default_mimetype_is_set_manually(self):
        self.app.add_url_rule('/', view_func=hello_world)
        self.app.default_mimetype = 'application/xml'
        self.app.response_formatters['application/xml'] = dummy_xml_formatter

        headers = {
            'Accept': '*/*',
        }
        r = self.client.get('/', headers=headers)

        self.assertEqual(r.data, expected_xml)
        self.assertEqual(r.mimetype, 'application/xml')

    def test_json_response_is_returned_due_to_quality_factor(self):
        self.app.add_url_rule('/', view_func=hello_world)
        self.app.response_formatters['application/xml'] = dummy_xml_formatter

        headers = {
            'Accept': 'application/xml;q=0.5,application/json',
        }
        r = self.client.get('/', headers=headers)
        r_json = json.loads(r.data)

        self.assertEqual(r_json, expected_json)
        self.assertEqual(r.mimetype, 'application/json')

    def test_rv_as_dict_response_and_status_code(self):
        def hello_world_201_status():
            return {'hello': 'world'}, 201
        self.app.add_url_rule('/', view_func=hello_world_201_status)

        r = self.client.get('/')
        r_json = json.loads(r.data)
        expected_status_code = 201

        self.assertEqual(r.status_code, expected_status_code)
        self.assertEqual(r_json, expected_json)
        self.assertEqual(r.mimetype, 'application/json')

    def test_mimetype_is_text_html_when_view_returns_non_dict(self):
        def index():
            return 'hello world'
        self.app.add_url_rule('/', view_func=index)

        r = self.client.get('/')

        self.assertEqual(r.data, b'hello world')
        self.assertEqual(r.mimetype, 'text/html')
Ejemplo n.º 5
0
 def setUp(self):
     self.app = ResponsiveFlask(__name__)
     self.client = self.app.test_client()
Ejemplo n.º 6
0
class ResponsiveFlaskTest(FlaskTestCase):
    def setUp(self):
        self.app = ResponsiveFlask(__name__)
        self.client = self.app.test_client()

    def test_json_response_when_accept_header_is_not_given(self):
        self.app.add_url_rule('/', view_func=hello_world)

        headers = {}
        r = self.client.get('/', headers=headers)
        r_json = json.loads(r.data)

        self.assertEqual(r_json, expected_json)
        self.assertEqual(r.mimetype, 'application/json')

    def test_json_response_when_accept_header_means_all_media_types(self):
        self.app.add_url_rule('/', view_func=hello_world)

        headers = {
            'Accept': '*/*',
        }
        r = self.client.get('/', headers=headers)
        r_json = json.loads(r.data)

        self.assertEqual(r_json, expected_json)
        self.assertEqual(r.mimetype, 'application/json')

    def test_406_when_accept_header_is_given_but_format_is_unknown(self):
        self.app.add_url_rule('/', view_func=hello_world)

        headers = {
            'Accept': 'application/vnd.company.myapp.product-v2+xml',
        }
        r = self.client.get('/', headers=headers)
        not_acceptable_status_code = 406

        self.assertEqual(r.status_code, not_acceptable_status_code)
        self.assertEqual(r.mimetype, 'application/json')

    def test_list_of_mimetypes_is_in_json_when_format_is_unknown(self):
        self.app.add_url_rule('/', view_func=hello_world)

        headers = {
            'Accept': 'blah/*',
        }
        r = self.client.get('/', headers=headers)
        r_json = json.loads(r.data)
        expected_json = {
            'mimetypes': ['application/json'],
        }

        self.assertEqual(r_json, expected_json)
        self.assertEqual(r.mimetype, 'application/json')

    def test_json_is_used_because_xml_formatter_is_not_set(self):
        self.app.add_url_rule('/', view_func=hello_world)

        headers = {
            'Accept': 'application/xml,application/json',
        }
        r = self.client.get('/', headers=headers)
        r_json = json.loads(r.data)

        self.assertEqual(r_json, expected_json)
        self.assertEqual(r.mimetype, 'application/json')

    def test_xml_is_used_because_xml_formatter_is_set_manually(self):
        self.app.add_url_rule('/', view_func=hello_world)
        self.app.response_formatters['application/xml'] = dummy_xml_formatter

        headers = {
            'Accept': 'application/xml,application/json',
        }
        r = self.client.get('/', headers=headers)

        self.assertEqual(r.data, expected_xml)
        self.assertEqual(r.mimetype, 'application/xml')

    def test_xml_is_used_because_default_mimetype_is_set_manually(self):
        self.app.add_url_rule('/', view_func=hello_world)
        self.app.default_mimetype = 'application/xml'
        self.app.response_formatters['application/xml'] = dummy_xml_formatter

        headers = {
            'Accept': '*/*',
        }
        r = self.client.get('/', headers=headers)

        self.assertEqual(r.data, expected_xml)
        self.assertEqual(r.mimetype, 'application/xml')

    def test_json_response_is_returned_due_to_quality_factor(self):
        self.app.add_url_rule('/', view_func=hello_world)
        self.app.response_formatters['application/xml'] = dummy_xml_formatter

        headers = {
            'Accept': 'application/xml;q=0.5,application/json',
        }
        r = self.client.get('/', headers=headers)
        r_json = json.loads(r.data)

        self.assertEqual(r_json, expected_json)
        self.assertEqual(r.mimetype, 'application/json')

    def test_rv_as_dict_response_and_status_code(self):
        def hello_world_201_status():
            return {'hello': 'world'}, 201

        self.app.add_url_rule('/', view_func=hello_world_201_status)

        r = self.client.get('/')
        r_json = json.loads(r.data)
        expected_status_code = 201

        self.assertEqual(r.status_code, expected_status_code)
        self.assertEqual(r_json, expected_json)
        self.assertEqual(r.mimetype, 'application/json')

    def test_mimetype_is_text_html_when_view_returns_non_dict(self):
        def index():
            return 'hello world'

        self.app.add_url_rule('/', view_func=index)

        r = self.client.get('/')

        self.assertEqual(r.data, b'hello world')
        self.assertEqual(r.mimetype, 'text/html')
Ejemplo n.º 7
0
class ErrorHandlingByResponsiveFlaskTest(FlaskTestCase):
    def setUp(self):
        self.app = ResponsiveFlask(__name__)
        self.client = self.app.test_client()

    def test_error_was_is_formatted_as_text_html_by_default(self):
        self.app.add_url_rule('/', view_func=hello_bad_request)

        r = self.client.get('/')
        expected_status_code = 400

        self.assertEqual(r.status_code, expected_status_code)
        self.assertEqual(r.mimetype, 'text/html')

    def test_400_error_is_json_formatted_when_view_raises_key_error(self):
        self.app.add_url_rule('/', view_func=hello_bad_request)
        self.app.default_errorhandler(code_and_message)

        r = self.client.get('/')
        r_json = json.loads(r.data)
        expected_status_code = 400

        self.assertEqual(r.status_code, expected_status_code)
        self.assertEqual(r_json['code'], expected_status_code)
        self.assertEqual(r.mimetype, 'application/json')

    def test_error_response_contains_code_and_message_fields(self):
        self.app.add_url_rule('/', view_func=hello_bad_request)
        self.app.default_errorhandler(code_and_message)

        r = self.client.get('/')
        r_json = json.loads(r.data)

        self.assertIn('code', r_json)
        self.assertIn('message', r_json)