diff options
author | Zara Gebru <zgebru@thoughtworks.com> | 2016-04-08 14:59:45 +0200 |
---|---|---|
committer | Zara Gebru <zgebru@thoughtworks.com> | 2016-04-08 14:59:45 +0200 |
commit | 22a48f48963053e8e00777e305a42d5ec012874f (patch) | |
tree | dada446c31b92531b5fc509b27c35208fa48dc5a /service | |
parent | 373c9e043b15226dd92c150e6953052ad3d62cfa (diff) |
Issue #431: add errback on logout
Diffstat (limited to 'service')
-rw-r--r-- | service/pixelated/resources/logout_resource.py | 17 | ||||
-rw-r--r-- | service/test/unit/resources/test_logout_resources.py | 24 |
2 files changed, 37 insertions, 4 deletions
diff --git a/service/pixelated/resources/logout_resource.py b/service/pixelated/resources/logout_resource.py index 01092b05..e26ec4b2 100644 --- a/service/pixelated/resources/logout_resource.py +++ b/service/pixelated/resources/logout_resource.py @@ -1,11 +1,15 @@ -from twisted.web.server import NOT_DONE_YET +import logging -from pixelated.resources import BaseResource -from twisted.web import util from twisted.internet import defer +from twisted.web import util +from twisted.web.http import INTERNAL_SERVER_ERROR +from twisted.web.server import NOT_DONE_YET +from pixelated.resources import BaseResource from pixelated.resources.login_resource import LoginResource +log = logging.getLogger(__name__) + class LogoutResource(BaseResource): BASE_URL = "logout" @@ -23,7 +27,14 @@ class LogoutResource(BaseResource): request.write(content) request.finish() + def handle_error(e): + log.error(e) + request.setResponseCode(INTERNAL_SERVER_ERROR) + request.write('Something went wrong!') + request.finish() + d = self._execute_logout(request) d.addCallback(_redirect_to_login) + d.addErrback(handle_error) return NOT_DONE_YET diff --git a/service/test/unit/resources/test_logout_resources.py b/service/test/unit/resources/test_logout_resources.py index 312d2ba4..e8b88171 100644 --- a/service/test/unit/resources/test_logout_resources.py +++ b/service/test/unit/resources/test_logout_resources.py @@ -1,12 +1,16 @@ +import logging + from mock import patch, MagicMock -from twisted.trial import unittest from twisted.internet import defer +from twisted.trial import unittest from twisted.web.error import UnsupportedMethod from twisted.web.test.requesthelper import DummyRequest from pixelated.resources.logout_resource import LogoutResource from test.unit.resources import DummySite +logging.getLogger('pixelated.resources').addHandler(logging.NullHandler()) + class TestLogoutResource(unittest.TestCase): def setUp(self): @@ -40,3 +44,21 @@ class TestLogoutResource(unittest.TestCase): request.method = 'GET' self.assertRaises(UnsupportedMethod, self.web.get, request) + + def test_errback_is_called(self): + request = DummyRequest(['/logout']) + request.method = 'POST' + + session = self.resource.get_session(request) + exception = Exception('haha') + session.expire = MagicMock(side_effect=exception) + + d = self.web.get(request) + + def assert_500_when_exception_is_thrown(_): + self.assertEqual(500, request.responseCode) + self.assertEqual('Something went wrong!', request.written[0]) + + d.addCallback(assert_500_when_exception_is_thrown) + return d + |