def forwards(apps, schema_editor): UserFitbit = apps.get_model('fitapp', 'UserFitbit') for fbuser in UserFitbit.objects.filter(refresh_token=''): try: token = FitbitOauth2Client( get_setting('FITAPP_CONSUMER_KEY'), get_setting('FITAPP_CONSUMER_SECRET'), refresh_token='{0}:{1}'.format( fbuser.access_token, fbuser.auth_secret)).refresh_token() fbuser.access_token = token['access_token'] fbuser.refresh_token = token['refresh_token'] fbuser.save() except MissingTokenError: # Delete fitbit user if existing access_token is invalid fbuser.delete()
def test_unintegrated(self): """No Fitbit credentials required to access Logout view.""" self.fbuser.delete() response = self._get() self.assertRedirectsNoFollow(response, utils.get_setting('FITAPP_LOGIN_REDIRECT')) self.assertEqual(UserFitbit.objects.count(), 0)
def forwards(apps, schema_editor): UserFitbit = apps.get_model('fitapp', 'UserFitbit') for fbuser in UserFitbit.objects.filter(refresh_token=''): try: token = FitbitOauth2Client( get_setting('FITAPP_CONSUMER_KEY'), get_setting('FITAPP_CONSUMER_SECRET'), refresh_token='{0}:{1}'.format( fbuser.access_token, fbuser.auth_secret) ).refresh_token() fbuser.access_token = token['access_token'] fbuser.refresh_token = token['refresh_token'] fbuser.save() except MissingTokenError: # Delete fitbit user if existing access_token is invalid fbuser.delete()
def test_unintegrated(self): """No Fitbit credentials required to access Logout view.""" self.fbuser.delete() response = self._get() self.assertRedirectsNoFollow( response, utils.get_setting('FITAPP_LOGIN_REDIRECT')) self.assertEqual(UserFitbit.objects.count(), 0)
def test_get(self, apply_async): """Logout view should remove associated UserFitbit and redirect.""" response = self._get() apply_async.assert_called_once_with(kwargs=self.fbuser.get_user_data(), countdown=5) self.assertRedirectsNoFollow( response, utils.get_setting('FITAPP_LOGIN_REDIRECT')) self.assertEqual(UserFitbit.objects.count(), 0)
def test_complete_no_res(self, tsd_apply_async, sub_apply_async): """Complete view shouldn't import data if subs dict has no resources""" response = self._mock_client( client_kwargs=self.token, get_kwargs={'code': self.code}) self.assertRedirectsNoFollow( response, utils.get_setting('FITAPP_LOGIN_REDIRECT')) self.assertEqual(tsd_apply_async.call_count, 0)
def test_unauthenticated(self): """User must be logged in to access Error view.""" self.client.logout() response = self._get() if utils.get_setting('FITAPP_LOGIN_REQUIRED'): self.assertEqual(response.status_code, 302) else: self.assertEqual(response.status_code, 200)
def test_invalid_subscriptions_no_error(self): """ Check that get_setting doesn't raise an error when FITAPP_SUBSCRIPTIONS is valid """ subs = get_setting('FITAPP_SUBSCRIPTIONS') self.assertEqual(subs['activities'], ['steps'])
def test_is_not_integrated(self): """Message should be added if user is not integrated.""" UserFitbit.objects.all().delete() results = self._mock_decorator() self.assertEqual(results, "hello") self.assertEqual(len(self.messages), 1) self.assertEqual(self.messages[0], utils.get_setting("FITAPP_DECORATOR_MESSAGE"))
def test_unauthenticated(self): """Message should be added if user is not logged in.""" self.fake_request.user = AnonymousUser() results = self._mock_decorator() self.assertEqual(results, "hello") self.assertEqual(len(self.messages), 1) self.assertEqual(self.messages[0], utils.get_setting("FITAPP_DECORATOR_MESSAGE"))
def test_get(self, apply_async): """Logout view should remove associated UserFitbit and redirect.""" response = self._get() apply_async.assert_called_once_with(kwargs=self.fbuser.get_user_data(), countdown=5) self.assertRedirectsNoFollow(response, utils.get_setting('FITAPP_LOGIN_REDIRECT')) self.assertEqual(UserFitbit.objects.count(), 0)
def test_unauthenticated(self): """Message should be added if user is not logged in.""" self.fake_request.user = AnonymousUser() results = self._mock_decorator() self.assertEqual(results, "hello") self.assertEqual(len(self.messages), 1) self.assertEqual(self.messages[0], utils.get_setting('FITAPP_DECORATOR_MESSAGE'))
def test_is_not_integrated(self): """Message should be added if user is not integrated.""" UserFitbit.objects.all().delete() results = self._mock_decorator() self.assertEqual(results, "hello") self.assertEqual(len(self.messages), 1) self.assertEqual(self.messages[0], utils.get_setting('FITAPP_DECORATOR_MESSAGE'))
def test_get(self): """Complete view should fetch & store user's access credentials.""" response = self._mock_client() self.assertRedirectsNoFollow(response, utils.get_setting("FITAPP_LOGIN_REDIRECT")) fbuser = UserFitbit.objects.get() self.assertEqual(fbuser.user, self.user) self.assertEqual(fbuser.auth_token, self.key) self.assertEqual(fbuser.auth_secret, self.secret) self.assertEqual(fbuser.fitbit_user, self.user_id)
def test_integrated(self): """ Complete view should overwrite existing credentials for this user. """ self.fbuser = self.create_userfitbit(user=self.user) response = self._mock_client() fbuser = UserFitbit.objects.get() self.assertEqual(fbuser.user, self.user) self.assertEqual(fbuser.auth_token, self.key) self.assertEqual(fbuser.auth_secret, self.secret) self.assertEqual(fbuser.fitbit_user, self.user_id) self.assertRedirectsNoFollow(response, utils.get_setting("FITAPP_LOGIN_REDIRECT"))
def test_complete_different_delays(self, tsd_apply_async, sub_apply_async): """Complete view should use configured delays""" tsdts = TimeSeriesDataType.objects.all() response = self._mock_client( client_kwargs=self.token, get_kwargs={'code': self.code}) fbuser = UserFitbit.objects.get() self.assertRedirectsNoFollow( response, utils.get_setting('FITAPP_LOGIN_REDIRECT')) for i, _type in enumerate(tsdts): tsd_apply_async.assert_any_call( (fbuser.fitbit_user, _type.category, _type.resource,), countdown=11 + (i * 6))
def test_integrated(self, tsd_apply_async, sub_apply_async): """ Complete view should overwrite existing credentials for this user. """ self.fbuser = self.create_userfitbit(user=self.user) response = self._mock_client() fbuser = UserFitbit.objects.get() sub_apply_async.assert_called_with( (fbuser.fitbit_user, settings.FITAPP_SUBSCRIBER_ID), countdown=5) self.assertEqual(tsd_apply_async.call_count, TimeSeriesDataType.objects.count()) self.assertEqual(fbuser.user, self.user) self.assertEqual(fbuser.auth_token, self.resource_owner_key) self.assertEqual(fbuser.auth_secret, self.resource_owner_secret) self.assertEqual(fbuser.fitbit_user, self.user_id) self.assertRedirectsNoFollow( response, utils.get_setting('FITAPP_LOGIN_REDIRECT'))
def test_get(self, tsd_apply_async, sub_apply_async): """Complete view should fetch & store user's access credentials.""" response = self._mock_client() self.assertRedirectsNoFollow( response, utils.get_setting('FITAPP_LOGIN_REDIRECT')) fbuser = UserFitbit.objects.get() sub_apply_async.assert_called_once_with( (fbuser.fitbit_user, settings.FITAPP_SUBSCRIBER_ID), countdown=5) tsdts = TimeSeriesDataType.objects.all() self.assertEqual(tsd_apply_async.call_count, tsdts.count()) for i, _type in enumerate(tsdts): tsd_apply_async.assert_any_call( (fbuser.fitbit_user, _type.category, _type.resource,), countdown=10 + (i * 5)) self.assertEqual(fbuser.user, self.user) self.assertEqual(fbuser.auth_token, self.resource_owner_key) self.assertEqual(fbuser.auth_secret, self.resource_owner_secret) self.assertEqual(fbuser.fitbit_user, self.user_id)
def test_complete(self, tsd_apply_async, sub_apply_async): """Complete view should fetch & store user's access credentials.""" response = self._mock_client( client_kwargs=self.token, get_kwargs={'code': self.code}) self.assertRedirectsNoFollow( response, utils.get_setting('FITAPP_LOGIN_REDIRECT')) fbuser = UserFitbit.objects.get() sub_apply_async.assert_called_once_with( (fbuser.fitbit_user, settings.FITAPP_SUBSCRIBER_ID), countdown=5) tsdts = TimeSeriesDataType.objects.all() self.assertEqual(tsd_apply_async.call_count, tsdts.count()) for i, _type in enumerate(tsdts): tsd_apply_async.assert_any_call( (fbuser.fitbit_user, _type.category, _type.resource,), countdown=10 + (i * 5)) self.assertEqual(fbuser.user, self.user) self.assertEqual(fbuser.access_token, self.token['access_token']) self.assertEqual(fbuser.refresh_token, self.token['refresh_token']) self.assertEqual(fbuser.fitbit_user, self.user_id)
def test_complete_sub_list(self, tsd_apply_async, sub_apply_async): """ Complete view should only import the listed subscriptions, in the right order """ activities = TimeSeriesDataType.activities response = self._mock_client(client_kwargs=self.token, get_kwargs={'code': self.code}) fbuser = UserFitbit.objects.get() self.assertRedirectsNoFollow( response, utils.get_setting('FITAPP_LOGIN_REDIRECT')) tsd_apply_async.assert_any_call(( fbuser.fitbit_user, activities, 'steps', ), countdown=10) tsd_apply_async.assert_any_call(( fbuser.fitbit_user, activities, 'calories', ), countdown=15) tsd_apply_async.assert_any_call(( fbuser.fitbit_user, activities, 'distance', ), countdown=20) tsd_apply_async.assert_any_call( (fbuser.fitbit_user, activities, 'activityCalories'), countdown=25) tsd_apply_async.assert_any_call(( fbuser.fitbit_user, TimeSeriesDataType.foods, 'log/water', ), countdown=30)
def test_complete_sub_list(self, tsd_apply_async, sub_apply_async): """ Complete view should only import the listed subscriptions, in the right order """ activities = TimeSeriesDataType.activities response = self._mock_client( client_kwargs=self.token, get_kwargs={'code': self.code}) fbuser = UserFitbit.objects.get() self.assertRedirectsNoFollow( response, utils.get_setting('FITAPP_LOGIN_REDIRECT')) tsd_apply_async.assert_any_call( (fbuser.fitbit_user, activities, 'steps',), countdown=10) tsd_apply_async.assert_any_call( (fbuser.fitbit_user, activities, 'calories',), countdown=15) tsd_apply_async.assert_any_call( (fbuser.fitbit_user, activities, 'distance',), countdown=20) tsd_apply_async.assert_any_call( (fbuser.fitbit_user, activities, 'activityCalories'), countdown=25) tsd_apply_async.assert_any_call( (fbuser.fitbit_user, TimeSeriesDataType.foods, 'log/water',), countdown=30)
def test_get(self): """Logout view should remove associated UserFitbit and redirect.""" response = self._get() self.assertRedirectsNoFollow(response, utils.get_setting("FITAPP_LOGIN_REDIRECT")) self.assertEqual(UserFitbit.objects.count(), 0)