diff --git a/stacktach/stacky_server.py b/stacktach/stacky_server.py index ca9802f..06fa0a7 100644 --- a/stacktach/stacky_server.py +++ b/stacktach/stacky_server.py @@ -601,7 +601,7 @@ def search(request): results = event.search_results(results, when, routing_key_status) return rsp(json.dumps(results)) except ObjectDoesNotExist: - return rsp(["The requested object does not exist"]) + return error_response(404, 'Not Found', ["The requested object does not exist"]) except FieldError: - return rsp(["The requested field '%s' does not exist for the corresponding object.\n" - "Note: The field names of database are case-sensitive." % field] ) + return error_response(400, 'Bad Request', "The requested field '%s' does not exist for the corresponding object.\n" + "Note: The field names of database are case-sensitive." % field) diff --git a/tests/unit/test_stacky_server.py b/tests/unit/test_stacky_server.py index c8f902d..34e14b1 100644 --- a/tests/unit/test_stacky_server.py +++ b/tests/unit/test_stacky_server.py @@ -21,6 +21,7 @@ import datetime import decimal import json +from django.core.exceptions import FieldError import mox @@ -1351,6 +1352,24 @@ class StackyServerTestCase(StacktachBaseTestCase): self._assert_on_search_nova(json_resp, raw1) self.mox.VerifyAll() + def test_search_with_wrong_field_value_returns_400_error_and_a_message(self): + fake_request = self.mox.CreateMockAnything() + fake_request.GET = {'field': 'tenant', 'value': 'tenant'} + models.RawData.objects.filter(tenant='tenant').AndRaise(FieldError) + self.mox.ReplayAll() + + resp = stacky_server.search(fake_request) + + self.assertEqual(resp.status_code, 400) + json_resp = json.loads(resp.content) + self.assertEquals(json_resp[0],[u'Error', u'Message']) + self.assertEquals(json_resp[1], + [u'Bad Request', u"The requested field" + u" 'tenant' does not exist for the corresponding object.\nNote: " + u"The field names of database are case-sensitive."]) + + self.mox.VerifyAll() + def test_model_search_default_limit(self): fake_request = self.mox.CreateMockAnything() fake_request.GET = {}