Adding get_anonymous_user_id in Xblock 'user' service.

TNL-836
This commit is contained in:
muzaffaryousaf
2014-12-01 19:31:34 +05:00
parent 175aeaf4f1
commit 4d72910060
4 changed files with 90 additions and 2 deletions

View File

@@ -8,7 +8,9 @@ from xblock_django.user_service import (
ATTR_KEY_USER_ID,
ATTR_KEY_USERNAME,
)
from student.models import anonymous_id_for_user
from student.tests.factories import UserFactory, AnonymousUserFactory
from opaque_keys.edx.locations import SlashSeparatedCourseKey
class UserServiceTestCase(TestCase):
@@ -55,3 +57,39 @@ class UserServiceTestCase(TestCase):
xb_user = django_user_service.get_current_user()
self.assertTrue(xb_user.is_current_user)
self.assert_xblock_user_matches_django(xb_user, self.user)
def test_get_anonymous_user_id_returns_none_for_non_staff_users(self):
"""
Tests for anonymous_user_id method to return None if user is Non-Staff.
"""
django_user_service = DjangoXBlockUserService(self.user, user_is_staff=False)
anonymous_user_id = django_user_service.get_anonymous_user_id(username=self.user.username, course_id='edx/toy/2012_Fall')
self.assertIsNone(anonymous_user_id)
def test_get_anonymous_user_id_returns_none_for_non_existing_users(self):
"""
Tests for anonymous_user_id method to return None username does not exist in system.
"""
django_user_service = DjangoXBlockUserService(self.user, user_is_staff=True)
anonymous_user_id = django_user_service.get_anonymous_user_id(username="No User", course_id='edx/toy/2012_Fall')
self.assertIsNone(anonymous_user_id)
def test_get_anonymous_user_id_returns_id_for_existing_users(self):
"""
Tests for anonymous_user_id method returns anonymous user id for a user.
"""
anon_user_id = anonymous_id_for_user(
user=self.user,
course_id=SlashSeparatedCourseKey('edX', 'toy', '2012_Fall'),
save=True
)
django_user_service = DjangoXBlockUserService(self.user, user_is_staff=True)
anonymous_user_id = django_user_service.get_anonymous_user_id(
username=self.user.username,
course_id='edX/toy/2012_Fall'
)
self.assertEqual(anonymous_user_id, anon_user_id)

View File

@@ -1,7 +1,11 @@
"""
Support for converting a django user to an XBlock user
"""
from django.contrib.auth.models import User
from xblock.reference.user_service import XBlockUser, UserService
from student.models import anonymous_id_for_user, get_user_by_username_or_email
from opaque_keys.edx.locations import SlashSeparatedCourseKey
ATTR_KEY_IS_AUTHENTICATED = 'edx-platform.is_authenticated'
ATTR_KEY_USER_ID = 'edx-platform.user_id'
@@ -15,6 +19,7 @@ class DjangoXBlockUserService(UserService):
def __init__(self, django_user, **kwargs):
super(DjangoXBlockUserService, self).__init__(**kwargs)
self._django_user = django_user
self._user_is_staff = kwargs.get('user_is_staff', False)
def get_current_user(self):
"""
@@ -22,6 +27,29 @@ class DjangoXBlockUserService(UserService):
"""
return self._convert_django_user_to_xblock_user(self._django_user)
def get_anonymous_user_id(self, username, course_id):
"""
Get the anonymous user id for a user.
Args:
username(str): username of a user.
course_id(str): course id of particular course.
Returns:
A unique anonymous_user_id for (user, course) pair.
None for Non-staff users.
"""
if not self._user_is_staff:
return None
try:
user = get_user_by_username_or_email(username_or_email=username)
except User.DoesNotExist:
return None
course_id = SlashSeparatedCourseKey.from_deprecated_string(course_id)
return anonymous_id_for_user(user=user, course_id=course_id, save=False)
def _convert_django_user_to_xblock_user(self, django_user):
"""
A function that returns an XBlockUser from the current Django request.user