def test_logged_user(self, facade):
     user = MainUser()
     user.put()
     cmd_mock = Mock()
     cmd_mock.execute = Mock(return_value=cmd_mock)
     cmd_mock.result = user
     facade.logged_user = Mock(return_value=cmd_mock)
     dependency = {}
     middleware.LoggedUserMiddleware(Mock(), dependency, Mock()).set_up()
     self.assertEqual({'_login_path': '/login',
                       '_logout_path': '/logout',
                       '_logged_user': user}, dependency)
    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_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')
class ResultTests(gae.GAETestCase):

    def setUp(self):
        super(ResultTests, self).setUp()
        self.user = MainUser(name='vovo', email='*****@*****.**')
        self.user.put()
        self.game = Game(tit='teste', map='brasil')
        self.game.put()

    def test_create_new_result(self):

        result = Result.change_result_attrs(points=1, won_medal=True,
                                            game_title=self.game.tit, game=self.game,
                                            user_key=self.user.key,  duration=0.20)
        result.put()

        self.assertEquals(result.last_points, 1)
        self.assertEquals(result.game_title, self.game.tit)
        self.assertEquals(result.won_medal, True)
        self.assertEquals(result.game, self.game.key)
        self.assertEquals(result.last_duration, 0.20)
        self.assertEquals(result.best_duration, 0.20)

    def test_update_result(self):
        result = Result.change_result_attrs(points=1, won_medal=True,
                                   game_title=self.game.tit, game=self.game,
                                   user_key=self.user.key,  duration=0.20)
        result.put()

        self.assertEquals(result.best_points, 1)
        self.assertEquals(result.best_duration, 0.20)
        self.assertEquals(result.best_date, date.today())
        self.assertEquals(result.frequency, 1)

        result = Result.change_result_attrs(points=2, duration=0.10, won_medal=True,
                                            game_title=self.game.tit, game=self.game,
                                            user_key=self.user.key)

        self.assertEquals(result.best_points, 2)
        self.assertEquals(result.best_duration, 0.10)
        self.assertEquals(result.best_date, date.today())
        self.assertEquals(result.frequency, 2)
    def test_facebook_user_logged_for_the_second_time(self, log_main_user_in):
        f_key = FacebookUser(external_id='123').put()
        main_user = MainUser(name='foo', email='*****@*****.**')
        main_user.put()
        ExternalToMainUser(origin=f_key, destination=main_user.key.id()).put()

        response = Mock()
        fetch_mock = self.setup_fetch_mock()
        cmd = facade.login_facebook('', response)

        cmd._fetch_facebook = fetch_mock
        cmd.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(FacebookUser.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')