diff --git a/stacktach/stacky_server.py b/stacktach/stacky_server.py index fae1b70..9e63e9f 100644 --- a/stacktach/stacky_server.py +++ b/stacktach/stacky_server.py @@ -613,5 +613,8 @@ def search(request): routing_key_status = routing_key_type(event.routing_key) results = event.search_results(results, when, routing_key_status) return rsp(json.dumps(results)) - except ObjectDoesNotExist or FieldError: - return rsp([]) + except ObjectDoesNotExist: + return error_response(404, 'Not Found', ["The requested object does not exist"]) + except FieldError: + 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 dbda963..24e4f28 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 @@ -1374,6 +1375,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 = {}