From 330d4af34f190517b3e40c9abf451dc1bc992fe3 Mon Sep 17 00:00:00 2001 From: Dolph Mathews Date: Mon, 30 Apr 2012 08:05:28 -0500 Subject: [PATCH] Misnamed exception attribute (bug 991936) - exception.NotImplemented 'action' should have been 'title' - Automated test coverage of exceptions to catch this in the future Change-Id: I238e6bc8426ae009f570f0a04d2ea28501ae23fc --- keystone/exception.py | 12 ++++++------ tests/test_exception.py | 18 ++++++++++++++---- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/keystone/exception.py b/keystone/exception.py index f1651bf008..84f1e79e13 100644 --- a/keystone/exception.py +++ b/keystone/exception.py @@ -107,12 +107,6 @@ class Conflict(Error): title = 'Conflict' -class NotImplemented(Error): - """The action you have requested has not been implemented.""" - code = 501 - action = 'Not Implemented' - - class UnexpectedError(Error): """An unexpected error prevented the server from fulfilling your request. @@ -121,3 +115,9 @@ class UnexpectedError(Error): """ code = 500 title = 'Internal Server Error' + + +class NotImplemented(Error): + """The action you have requested has not been implemented.""" + code = 501 + title = 'Not Implemented' diff --git a/tests/test_exception.py b/tests/test_exception.py index a51efff2ca..c74a60c6c5 100644 --- a/tests/test_exception.py +++ b/tests/test_exception.py @@ -42,6 +42,20 @@ class ExceptionTestCase(test.TestCase): self.assertNotIn(' ', j['error']['message']) self.assertTrue(type(j['error']['code']) is int) + def test_all_json_renderings(self): + """Everything callable in the exception module should be renderable. + + ... except for the base error class (exception.Error), which is not + user-facing. + + This test provides a custom message to bypass docstring parsing, which + should be tested seperately. + + """ + for cls in [x for x in exception.__dict__.values() if callable(x)]: + if cls is not exception.Error: + self.assertValidJsonRendering(cls(message='Overriden.')) + def test_validation_error(self): target = uuid.uuid4().hex attribute = uuid.uuid4().hex @@ -50,10 +64,6 @@ class ExceptionTestCase(test.TestCase): self.assertIn(target, str(e)) self.assertIn(attribute, str(e)) - def test_unauthorized(self): - e = exception.Unauthorized() - self.assertValidJsonRendering(e) - def test_forbidden_action(self): action = uuid.uuid4().hex e = exception.ForbiddenAction(action=action)