Esempio n. 1
0
    def test_success(self):
        site = mommy.make_one(Site)
        user = mommy.make_one(MainUser)
        ndb.put_multi([site, user])
        create_login = CreateLogin(user, site, 'hook')
        create_login.execute()
        login = create_login.result
        self.assertIsNotNone(login)
        self.assertEqual(LOGIN_CALL, login.status)
        self.assertEqual('hook', login.hook)
        db_login = Login.query().get()
        self.assertEqual(db_login.key, login.key)

        def neighbor(cls):
            DestinationsSearch.arc_class = cls
            search = DestinationsSearch(login)
            search.execute()
            self.assertEqual(1, len(search.result), cls)
            return search.result[0]

        n_user = neighbor(LoginUser)
        self.assertEqual(n_user.key, user.key)

        n_site = neighbor(LoginSite)
        self.assertEqual(n_site.key, site.key)

        login_status = neighbor(LoginStatusArc)
        self.assertEqual(LOGIN_CALL, login_status.label)
Esempio n. 2
0
    def test_success(self):
        site = mommy.make_one(Site)
        user = mommy.make_one(MainUser)
        ndb.put_multi([site, user])
        create_login = CreateLogin(user, site, 'hook')
        create_login.execute()
        login = create_login.result
        self.assertIsNotNone(login)
        self.assertEqual(LOGIN_CALL, login.status)
        self.assertEqual('hook', login.hook)
        db_login = Login.query().get()
        self.assertEqual(db_login.key, login.key)


        def neighbor(cls):
            DestinationsSearch.arc_class = cls
            search = DestinationsSearch(login)
            search.execute()
            self.assertEqual(1, len(search.result), cls)
            return search.result[0]

        n_user = neighbor(LoginUser)
        self.assertEqual(n_user.key, user.key)

        n_site = neighbor(LoginSite)
        self.assertEqual(n_site.key, site.key)

        login_status = neighbor(LoginStatusArc)
        self.assertEqual(LOGIN_CALL, login_status.label)
Esempio n. 3
0
    def test_success(self, hook='https://pswdless.appspot.com/foo', expected_query_string='?ticket=%s'):
        lg = Login(status=LOGIN_EMAIL, hook=hook)
        lg.put()

        cmd = cookie_facade.sign('ticket', lg.key.id())
        cmd.execute()
        redirect_mock = Mock()
        validate_cmd = facade.validate_login_link(cmd.result, redirect_mock)
        validate_cmd.execute()
        self.assertDictEqual({}, validate_cmd.errors)
        login_db = validate_cmd.result
        self.assertEqual(lg.key, login_db.key)
        self.assertEqual(login_db.status, LOGIN_CLICK)
        search = LoginStatusArcSearch(login_db)
        search.execute()
        self.assertEqual(1, len(search.result))
        lg_status = search.result[0]
        self.assertIsInstance(lg_status, LoginStatus)
        self.assertEqual(lg_status.label, LOGIN_CLICK)
        redirect_mock.assert_called_once_with(hook + (expected_query_string % lg.key.id()))
Esempio n. 4
0
 def _assert_succes_with_status(self, status):
     site = mommy.make_one(Site, domain='www.pswd.com')
     user = mommy.make_one(MainUser)
     ndb.put_multi([site, user])
     create_login = CreateLogin(user, site, 'hook')
     create_login.execute()
     lg = Login.query().get()
     lg.status = status
     lg.put()
     validate_cmd = ValidateLoginCall(site.key.id(), site.token, 'http://www.pswd.com/pswdless',
         user.key.id())
     validate_cmd.execute()
     self.assertDictEqual({}, validate_cmd.errors)
Esempio n. 5
0
    def test_success(self,
                     hook='https://pswdless.appspot.com/foo',
                     expected_query_string='?ticket=%s'):
        lg = Login(status=LOGIN_EMAIL, hook=hook)
        lg.put()

        cmd = cookie_facade.sign('ticket', lg.key.id())
        cmd.execute()
        redirect_mock = Mock()
        validate_cmd = facade.validate_login_link(cmd.result, redirect_mock)
        validate_cmd.execute()
        self.assertDictEqual({}, validate_cmd.errors)
        login_db = validate_cmd.result
        self.assertEqual(lg.key, login_db.key)
        self.assertEqual(login_db.status, LOGIN_CLICK)
        search = LoginStatusArcSearch(login_db)
        search.execute()
        self.assertEqual(1, len(search.result))
        lg_status = search.result[0]
        self.assertIsInstance(lg_status, LoginStatus)
        self.assertEqual(lg_status.label, LOGIN_CLICK)
        redirect_mock.assert_called_once_with(hook + (expected_query_string %
                                                      lg.key.id()))
Esempio n. 6
0
 def _assert_succes_with_status(self, status):
     site = mommy.make_one(Site, domain='www.pswd.com')
     user = mommy.make_one(MainUser)
     ndb.put_multi([site, user])
     create_login = CreateLogin(user, site, 'hook')
     create_login.execute()
     lg = Login.query().get()
     lg.status = status
     lg.put()
     validate_cmd = ValidateLoginCall(site.key.id(), site.token,
                                      'http://www.pswd.com/pswdless',
                                      user.key.id())
     validate_cmd.execute()
     self.assertDictEqual({}, validate_cmd.errors)
Esempio n. 7
0
    def test_success_after_one_hour(self):
        site = mommy.make_one(Site, domain='www.pswd.com')
        user = mommy.make_one(MainUser)
        ndb.put_multi([site, user])
        create_login = CreateLogin(user, site, 'hook')

        create_login.execute()
        lg = Login.query().get()
        lg.creation = datetime.now() - timedelta(hours=1, minutes=1)
        lg.put()

        validate_cmd = ValidateLoginCall(site.key.id(), site.token, 'http://www.pswd.com/pswdless',
            user.key.id())
        validate_cmd.execute()
        self.assertDictEqual({}, validate_cmd.errors)
Esempio n. 8
0
    def test_success_after_one_hour(self):
        site = mommy.make_one(Site, domain='www.pswd.com')
        user = mommy.make_one(MainUser)
        ndb.put_multi([site, user])
        create_login = CreateLogin(user, site, 'hook')

        create_login.execute()
        lg = Login.query().get()
        lg.creation = datetime.now() - timedelta(hours=1, minutes=1)
        lg.put()

        validate_cmd = ValidateLoginCall(site.key.id(), site.token,
                                         'http://www.pswd.com/pswdless',
                                         user.key.id())
        validate_cmd.execute()
        self.assertDictEqual({}, validate_cmd.errors)
Esempio n. 9
0
    def test_success(self):
        site = mommy.make_one(Site, domain='appspot.com')
        user = mommy.make_one(MainUser)
        ndb.put_multi([site, user])
        login.setup_locale = Mock()
        setup_task = facade.setup_login_task(
            str(site.key.id()),
            site.token,
            'http://pswdless.appspot.com/return',
            str(user.key.id()),
            lang='pt_BR')
        task_obj = Mock()
        task_cls = Mock(return_value=task_obj)
        login.TaskQueueCommand = task_cls
        task_obj.commit = Mock(return_value=[])

        setup_task.execute()
        lg = Login.query().get()
        login.setup_locale.assert_called_once_with('pt_BR')
        self.assertIsNotNone(lg)
        task_cls.assert_called_once_with(settings.TASK_HERO,
                                         router.to_path(task.send_login_email),
                                         params={
                                             'login_id': str(lg.key.id()),
                                             'lang': 'pt_BR'
                                         },
                                         countdown=4)
        task_obj.set_up.assert_called_once_with()
        task_obj.do_business.assert_called_once_with()
        task_obj.commit.assert_called_once_with()

        def neighbor(cls):
            DestinationsSearch.arc_class = cls  # To do: removing this because can cause side effects
            search = DestinationsSearch(lg)
            search.execute()
            self.assertEqual(1, len(search.result), cls)
            return search.result[0]

        n_user = neighbor(LoginUser)
        self.assertEqual(n_user.key, user.key)

        n_site = neighbor(LoginSite)
        self.assertEqual(n_site.key, site.key)

        login_status = neighbor(LoginStatusArc)
        self.assertEqual(LOGIN_CALL, login_status.label)
Esempio n. 10
0
    def test_success(self):
        # Mocks
        site = Site(domain='pswdless.appspot.com', token='t')
        email = '*****@*****.**'
        user = mommy.make_one(MainUser, email=email)
        login = Login(status=LOGIN_CALL,
                      hook='https://pswdless.appspot.com/foo')
        ndb.put_multi([site, user, login])

        # Arcs
        ndb.put_multi([
            LoginUser(origin=login.key, destination=user.key),
            LoginSite(origin=login.key, destination=site.key)
        ])

        callback_flag = Mock()

        def callback(*args):
            callback_flag()
            zipped = zip([login, site, user], args)
            for expected, current in zipped:
                self.assertEqual(type(expected), type(current))
                self.assertEqual(expected.key, current.key)

        send_email = facade.send_login_email(str(login.key.id()), callback)
        send_email.execute()

        # Login changes
        login_db = login.key.get()
        self.assertEqual(LOGIN_EMAIL, login_db.status)
        search = SingleLoginStatusArcSearch(login)
        login_status = search()
        self.assertIsInstance(login_status, LoginStatus)
        self.assertEqual(LOGIN_EMAIL, login_status.label)

        # Site User creation
        user_search = SingleSiteUserSearch(site)
        db_user = user_search()
        self.assertEqual(user.key, db_user.key)

        # Callback call
        callback_flag.assert_called_once_with()
Esempio n. 11
0
    def test_success(self):
        mail_stub = self.testbed.get_stub(testbed.MAIL_SERVICE_NAME)
        # Mocks
        email = '*****@*****.**'
        site = Site(domain='pswdless.appspot.com', token='t')
        user = mommy.save_one(MainUser, email=email)
        login = Login(status=LOGIN_CALL,
                      hook='https://pswdless.appspot.com/foo')
        ndb.put_multi([site, user, login])
        task._ = lambda s: s

        # Arcs
        ndb.put_multi([
            LoginUser(origin=login.key, destination=user.key),
            LoginSite(origin=login.key, destination=site.key)
        ])

        task.send_login_email(template.render, str(login.key.id()), 'pt_BR')
        messages = mail_stub.get_sent_messages(to='*****@*****.**')
        self.assertEqual(1, len(messages))
Esempio n. 12
0
    def test_success(self):
        site = mommy.make_one(Site, domain='appspot.com')
        user = mommy.make_one(MainUser)
        ndb.put_multi([site, user])
        login.setup_locale = Mock()
        setup_task = facade.setup_login_task(str(site.key.id()), site.token, 'http://pswdless.appspot.com/return',
            str(user.key.id()), lang='pt_BR')
        task_obj = Mock()
        task_cls = Mock(return_value=task_obj)
        login.TaskQueueCommand = task_cls
        task_obj.commit = Mock(return_value=[])

        setup_task.execute()
        lg = Login.query().get()
        login.setup_locale.assert_called_once_with('pt_BR')
        self.assertIsNotNone(lg)
        task_cls.assert_called_once_with(settings.TASK_HERO, router.to_path(task.send_login_email),
                                         params={'login_id': str(lg.key.id()), 'lang': 'pt_BR'}, countdown=4)
        task_obj.set_up.assert_called_once_with()
        task_obj.do_business.assert_called_once_with()
        task_obj.commit.assert_called_once_with()

        def neighbor(cls):
            DestinationsSearch.arc_class = cls  # To do: removing this because can cause side effects
            search = DestinationsSearch(lg)
            search.execute()
            self.assertEqual(1, len(search.result), cls)
            return search.result[0]

        n_user = neighbor(LoginUser)
        self.assertEqual(n_user.key, user.key)

        n_site = neighbor(LoginSite)
        self.assertEqual(n_site.key, site.key)

        login_status = neighbor(LoginStatusArc)
        self.assertEqual(LOGIN_CALL, login_status.label)
Esempio n. 13
0
 def _assert_wrong_status(self, status):
     login = Login(status=status, hook='https://pswdless.appspot.com/foo')
     login.put()
     cmd = cookie_facade.sign('ticket', login.key.id())
     cmd.execute()
     self._assert_error(cmd.result)
Esempio n. 14
0
 def __init__(self, user, site, hook):
     super(CreateLogin, self).__init__()
     self.user = user
     self.site = site
     self.result = Login(hook=hook, status=LOGIN_CALL)
     self.login_status = LoginStatus(label=LOGIN_CALL)