def test_validation_error_field_single(self):
     error = APIException({'non_field_errors': ['Error message.']})
     response = exception_handler(error, None)
     assert response.data == {
         'code': 'error',
         'message': 'Error message.',
     }
 def test_api_exc_string_w_code(self):
     error = APIException('Error message.', code='testcode')
     response = exception_handler(error, None)
     assert response.data == {
         'code': 'testcode',
         'message': 'Error message.',
     }
 def test_http_permission_denied(self):
     error = PermissionDenied('Permission denied.')
     response = exception_handler(error, None)
     assert response.data == {
         'code': 'permission_denied',
         'message': 'You do not have permission to perform this action.',
     }
 def test_http_not_found(self):
     error = Http404('Not found.')
     response = exception_handler(error, None)
     assert response.data == {
         'code': 'not_found',
         'message': 'Not found.',
     }
 def test_validation_error_field_multi(self):
     error = APIException(
         {'non_field_errors': ['Error message 1.', 'Error message 2.']})
     response = exception_handler(error, None)
     assert response.data == {
         'code':
         'error',
         'message':
         'A server error occurred.',
         'errors': [
             {
                 'code': 'error',
                 'message': 'Error message 1.'
             },
             {
                 'code': 'error',
                 'message': 'Error message 2.'
             },
         ]
     }
 def test_api_exc_list(self):
     error = APIException([
         'Error message 1.',
         'Error message 2.',
     ])
     response = exception_handler(error, None)
     assert response.data == {
         'code':
         'error',
         'message':
         'A server error occurred.',
         'errors': [
             {
                 'code': 'error',
                 'message': 'Error message 1.'
             },
             {
                 'code': 'error',
                 'message': 'Error message 2.'
             },
         ]
     }
    def test_validation_error_fields(self):
        error = ValidationError({
            'foo':
            'Foo error message.',
            'bar': [
                ErrorDetail('First bar message.', code='conflict'),
                'Second bar message.'
            ],
            'non_field_errors': ['Other message.'],
        })
        response = exception_handler(error, None)

        data = response.data
        errors = sorted(data['errors'], key=operator.itemgetter('message'))
        assert data['code'] == 'invalid'
        assert data['message'] == 'Invalid input.'
        assert errors == [
            {
                'code': 'conflict',
                'message': 'First bar message.',
                'field': 'bar',
            },
            {
                'code': 'invalid',
                'message': 'Foo error message.',
                'field': 'foo'
            },
            {
                'code': 'invalid',
                'message': 'Other message.'
            },
            {
                'code': 'invalid',
                'message': 'Second bar message.',
                'field': 'bar'
            },
        ]