From 423ca8f9fb7636b336b24ba28bde5d61538bf5fc Mon Sep 17 00:00:00 2001 From: NavaL Date: Wed, 26 Oct 2016 15:55:29 +0200 Subject: authentication now returns Authentication leap session creation is only done post-interstitial and that logic is also extracted into its own class #795 --- service/test/unit/config/test_leap.py | 70 ++++++++++++++++++++++++++++++- service/test/unit/config/test_services.py | 58 +++++++++++++++++++++++-- 2 files changed, 122 insertions(+), 6 deletions(-) (limited to 'service/test/unit/config') diff --git a/service/test/unit/config/test_leap.py b/service/test/unit/config/test_leap.py index ce533c7f..8f582dd8 100644 --- a/service/test/unit/config/test_leap.py +++ b/service/test/unit/config/test_leap.py @@ -1,8 +1,8 @@ from leap.soledad.common.errors import InvalidAuthTokenError -from mock import MagicMock, patch +from mock import MagicMock, patch, Mock from twisted.trial import unittest from twisted.internet import defer -from pixelated.config.leap import create_leap_session +from pixelated.config.leap import create_leap_session, BootstrapUserServices from pixelated.config.sessions import LeapSessionFactory, SessionCache @@ -35,3 +35,69 @@ class TestAuth(unittest.TestCase): self.assertFalse(session.first_required_sync.called) self.assertEqual(session, returned_session) + + +class TestUserBootstrap(unittest.TestCase): + + def setUp(self): + self._service_factory = Mock() + self._provider = Mock() + self._user_bootstrap = BootstrapUserServices(self._service_factory, self._provider) + + username = 'ayoyo' + password = 'ayoyo_password' + self.username = username + self.password = password + + user_auth = Mock() + user_auth.username = username + self.uuid = 'some_user_uuid' + user_auth.uuid = self.uuid + self.user_auth = user_auth + + leap_session = Mock() + leap_session.user_auth = user_auth + leap_session.fresh_account = False + self.leap_session = leap_session + + @patch('pixelated.config.leap.create_leap_session') + def test_should_create_leap_session(self, mock_create_leap_session): + mock_create_leap_session.return_value = self.leap_session + self._service_factory.has_session.return_value = False + + self._user_bootstrap.setup(self.user_auth, self.password) + + mock_create_leap_session.called_once_with(self._provider, self.username, self.password, self.user_auth) + + @patch('pixelated.config.leap.create_leap_session') + def test_should_setup_user_services_and_map_email(self, mock_create_leap_session): + mock_create_leap_session.return_value = self.leap_session + self._service_factory.has_session.return_value = False + + self._user_bootstrap.setup(self.user_auth, self.password) + + self._service_factory.create_services_from.assert_called_once_with(self.leap_session) + self._service_factory.map_email.assert_called_once_with(self.username, self.uuid) + + @patch('pixelated.config.leap.create_leap_session') + def test_should_not_user_services_if_there_is_already_a_session(self, mock_create_leap_session): + mock_create_leap_session.return_value = self.leap_session + self._service_factory.has_session.return_value = True + + self._user_bootstrap.setup(self.user_auth, self.password) + + self.assertFalse(self._service_factory.create_services_from.called) + + @patch('pixelated.config.leap.add_welcome_mail') + @patch('pixelated.config.leap.create_leap_session') + def test_should_add_welcome_email_on_a_fresh_account(self, mock_create_leap_session, mock_add_welcome_email): + self.leap_session.fresh_account = True + mail_store = Mock() + self.leap_session.mail_store = mail_store + mock_create_leap_session.return_value = self.leap_session + self._service_factory.has_session.return_value = False + some_language = 'en-US' + + self._user_bootstrap.setup(self.user_auth, self.password, '') + + mock_add_welcome_email.called_once_with(mail_store, some_language) diff --git a/service/test/unit/config/test_services.py b/service/test/unit/config/test_services.py index 8277c919..ed221261 100644 --- a/service/test/unit/config/test_services.py +++ b/service/test/unit/config/test_services.py @@ -15,6 +15,7 @@ # along with Pixelated. If not, see . import unittest +from mock import Mock, ANY, patch from mockito import mock, verify from pixelated.config.services import Services, ServicesFactory @@ -36,9 +37,58 @@ class ServicesTest(unittest.TestCase): class ServicesFactoryTest(unittest.TestCase): + def setUp(self): + self.service_factory = ServicesFactory(Mock()) + + def test_users_has_no_default_sessions(self): + user_id = ANY + self.assertFalse(self.service_factory.has_session(user_id)) + + def test_add_user_sessions(self): + user_id = 'irrelevant' + some_service = Mock() + + self.service_factory.add_session(user_id, some_service) + + self.assertTrue(self.service_factory.has_session(user_id)) + self.assertEqual(some_service, self.service_factory.services(user_id)) + def test_online_sessions_counts_logged_in_users(self): - service_factory = ServicesFactory(mock()) - service_factory.add_session('some_id1', mock()) - service_factory.add_session('some_id2', mock()) + self.service_factory.add_session('some_id1', mock()) + self.service_factory.add_session('some_id2', mock()) + + self.assertEqual(2, self.service_factory.online_sessions()) + + @patch('pixelated.config.services.Services.setup') + def test_create_services_from_leap_session_sets_up_services_and_add_a_user_session(self, mock_setup_services): + leap_session = Mock() + user_id = 'irrelevant' + leap_session.user_auth.uuid = user_id + + self.service_factory.create_services_from(leap_session) + + self.assertTrue(mock_setup_services.called) + self.assertTrue(self.service_factory.has_session(user_id)) + + def test_destroy_session_using_close_user_services_and_deletes_sessions(self): + user_id = 'irrelevant' + some_service = Mock() + self.service_factory.add_session(user_id, some_service) + + self.service_factory.destroy_session(user_id) + + self.assertFalse(self.service_factory.has_session(user_id)) + self.assertTrue(some_service.close.called) + + def test_sessions_can_be_destroyed_using_email_rather_than_uuid(self): + user_id = 'irrelevant' + username = 'haha' + email = '%s@ha.ha' % username + some_service = Mock() + self.service_factory.add_session(user_id, some_service) + self.service_factory.map_email(username, user_id) + + self.service_factory.destroy_session(email, using_email=True) - self.assertEqual(2, service_factory.online_sessions()) + self.assertFalse(self.service_factory.has_session(user_id)) + self.assertTrue(some_service.close.called) -- cgit v1.2.3