class GoogleLogin(Command): def __init__(self, google_user, response, user_cookie): super(GoogleLogin, self).__init__() self.google_user = google_user self.user_cookie = user_cookie self.response = response self._google_user_future = None self._save_google_user_future = None def set_up(self): if self.google_user: query = GoogleUser.query_by_google_id(self.google_user.user_id()) self._google_user_future = query.get_async(keys_only=True) def do_business(self, stop_on_error=True): if self._google_user_future: g_user_key = self._google_user_future.get_result() if g_user_key: self.result = DestinationsSearch(ExternalToMainUser, g_user_key).execute().result[0] else: g_user = self.google_user self._save_google_user_future = GoogleUser(google_id=g_user.user_id()).put_async() self.result = MainUser(name=g_user.nickname(), email=g_user.email()) self._save_main_user = self.result.put_async() def commit(self): if self._save_google_user_future: google_user_key = self._save_google_user_future.get_result() main_user_key = self._save_main_user.get_result() facade.write_cookie(self.response, self.user_cookie, {'id': self.result.key.id()}).execute() return ExternalToMainUser(origin=google_user_key, destination=main_user_key) if self.result: facade.write_cookie(self.response, self.user_cookie, {'id': self.result.key.id()}).execute()
def do_business(self, stop_on_error=True): if self._google_user_future: g_user_key = self._google_user_future.get_result() if g_user_key: self.result = DestinationsSearch(ExternalToMainUser, g_user_key).execute().result[0] else: g_user = self.google_user self._save_google_user_future = GoogleUser(google_id=g_user.user_id()).put_async() self.result = MainUser(name=g_user.nickname(), email=g_user.email()) self._save_main_user = self.result.put_async()
def test_google_user_logged_for_the_second_time(self): google_account_user = Mock() google_account_user.user_id = lambda: '123' g_key = GoogleUser(google_id='123').put() main_user = MainUser(name='foo', email='*****@*****.**') main_user.put() ExternalToMainUser(origin=g_key, destination=main_user.key.id()).put() user = facade.login_google(google_account_user, Mock()).execute().result self.assertEqual('*****@*****.**', user.email) self.assertEqual('foo', user.name) self.assertEqual(main_user, user) self.assertEqual(1, len(GoogleUser.query().fetch())) self.assertEqual(1, len(MainUser.query().fetch()))
def test_google_user_logged_for_the_first_time_with_conflict(self, log_main_user_in): google_account_user = self.mock_google_account_user() main_user = mommy.save_one(MainUser, email='*****@*****.**') cmd = facade.login_google(google_account_user, Mock()).execute() self.assertFalse(cmd.result) self.assertIsNone(cmd.main_user_from_external) self.assertEqual(1, len(GoogleUser.query().fetch())) self.assertEqual(1, len(MainUser.query().fetch())) self.assertIsNotNone(cmd.pending_link) self.assertEqual(PendingExternalToMainUser.query().get(), cmd.pending_link) self.assertEqual(cmd.external_user.key, cmd.pending_link.external_user) self.assertEqual(main_user.key, cmd.pending_link.main_user) self.assertEqual('123', cmd.external_user.external_id) self.assertFalse(log_main_user_in.called)
def test_google_user_logged_for_the_second_time(self, log_main_user_in): google_account_user = self.mock_google_account_user() g_key = GoogleUser(external_id='123').put() main_user = MainUser(name='foo', email='*****@*****.**') main_user.put() ExternalToMainUser(origin=g_key, destination=main_user.key.id()).put() response = Mock() cmd = facade.login_google(google_account_user, response).execute() self.assertTrue(cmd.result) user = cmd.main_user_from_external self.assertEqual('*****@*****.**', user.email) self.assertEqual('foo', user.name) self.assertEqual(main_user, user) self.assertEqual(1, len(GoogleUser.query().fetch())) self.assertEqual(1, len(MainUser.query().fetch())) self.assertIsNone(cmd.pending_link) log_main_user_in.assert_called_once_with(user, response, 'userck')
def test_no_conflict_with_different_external_users(self): g=GoogleUser(external_id='1') f=FacebookUser(external_id='1') ndb.put_multi([g,f]) self.assertEqual(1,GoogleUser.query_by_external_id('1').count())
def set_up(self): if self.google_user: query = GoogleUser.query_by_google_id(self.google_user.user_id()) self._google_user_future = query.get_async(keys_only=True)