diff options
Diffstat (limited to 'service/test/unit/resources/test_auth.py')
-rw-r--r-- | service/test/unit/resources/test_auth.py | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/service/test/unit/resources/test_auth.py b/service/test/unit/resources/test_auth.py new file mode 100644 index 00000000..3dc3e29f --- /dev/null +++ b/service/test/unit/resources/test_auth.py @@ -0,0 +1,73 @@ +from mockito import mock, when, any as ANY + +from pixelated.application import get_static_folder +from pixelated.resources.auth import SessionChecker, PixelatedRealm, PixelatedAuthSessionWrapper +from pixelated.resources.login_resource import LoginResource +from pixelated.resources.root_resource import RootResource +from test.unit.resources import DummySite +from twisted.cred import error +from twisted.cred.checkers import ANONYMOUS, AllowAnonymousAccess +from twisted.cred.portal import Portal +from twisted.internet.defer import succeed, fail +from twisted.python import failure +from twisted.trial import unittest +from twisted.web._auth.wrapper import UnauthorizedResource +from twisted.web.resource import IResource, getChildForRequest +from twisted.web.test.requesthelper import DummyRequest + + +class TestPixelatedRealm(unittest.TestCase): + + def setUp(self): + self.authenticated_root_resource = mock() + self.public_root_resource = mock() + self.realm = PixelatedRealm(self.authenticated_root_resource, self.public_root_resource) + + def test_anonymous_user_gets_anonymous_resource(self): + interface, avatar, logout_handler = self.realm.requestAvatar(ANONYMOUS, None, IResource) + self.assertEqual(interface, IResource) + self.assertIs(avatar, self.public_root_resource) + + def test_authenticated_user_gets_root_resource(self): + interface, avatar, logout_handler = self.realm.requestAvatar('username', None, IResource) + self.assertEqual(interface, IResource) + self.assertIs(avatar, self.authenticated_root_resource) + + +class TestPixelatedAuthSessionWrapper(unittest.TestCase): + + def setUp(self): + self.realm_mock = mock() + services_factory = mock() + session_checker = SessionChecker(services_factory) + self.portal = Portal(self.realm_mock, [session_checker, AllowAnonymousAccess()]) + self.user_uuid_mock = mock() + self.root_resource = RootResource(services_factory, get_static_folder()) + self.anonymous_resource = RootResource(services_factory, get_static_folder(), public=True) + + self.session_wrapper = PixelatedAuthSessionWrapper(self.portal) + self.request = DummyRequest([]) + self.request.prepath = [''] + self.request.path = '/' + + def test_root_url_should_delegate_to_public_root_resource_for_unauthenticated_user(self): + when(self.realm_mock).requestAvatar(ANONYMOUS, None, IResource).thenReturn((IResource, self.anonymous_resource, lambda: None)) + request = DummyRequest(['']) + deferred_resource = getChildForRequest(self.session_wrapper, request) + d = deferred_resource.d + + def assert_public_root_resource(resource): + self.assertIs(resource, self.anonymous_resource) + + return d.addCallback(assert_public_root_resource) + + def test_root_url_should_delegate_to_protected_root_resource_for_authenticated_user(self): + when(self.realm_mock).requestAvatar(ANY(), None, IResource).thenReturn((IResource, self.root_resource, lambda: None)) + request = DummyRequest(['']) + deferred_resource = getChildForRequest(self.session_wrapper, request) + d = deferred_resource.d + + def assert_protected_root_resource(resource): + self.assertIsInstance(resource, RootResource) + + return d.addCallback(assert_protected_root_resource) |