Ejemplo n.º 1
0
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()
Ejemplo n.º 2
0
 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()))
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
    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')
Ejemplo n.º 6
0
 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())
Ejemplo n.º 7
0
 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)