summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--service/pixelated/resources/logout_resource.py17
-rw-r--r--service/test/unit/resources/test_logout_resources.py24
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
+