Commit 0d463688 by Zia Fazal Committed by Jonathan Piacenti

get course completions by user

fix for breaking test
parent 0078eeb7
......@@ -1025,3 +1025,47 @@ class UsersApiTests(TestCase):
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data['count'], 0)
self.assertEqual(len(response.data['results']), 0)
def test_user_completions_list(self):
user_id = self.user.id
another_user_id = UserFactory().id
completion_uri = '/api/courses/{}/completions/'.format(self.course.id)
for i in xrange(1, 17):
if i > 7:
course_user_id = another_user_id
else:
course_user_id = user_id
completions_data = {'content_id': '{}_{}'.format(self.course_content.id, i), 'user_id': course_user_id}
response = self.do_post(completion_uri, completions_data)
self.assertEqual(response.status_code, 201)
# Get course module completion by user
completion_list_uri = '/api/users/{}/courses/{}/completions/?page_size=5'.format(user_id, self.course.id)
response = self.do_get(completion_list_uri)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data['count'], 7)
self.assertEqual(len(response.data['results']), 5)
self.assertEqual(response.data['results'][0]['user_id'], user_id)
self.assertEqual(response.data['results'][0]['course_id'], self.course.id)
self.assertEqual(response.data['num_pages'], 2)
# Get course module completion by other user
completion_list_uri = '/api/users/{}/courses/{}/completions/'.format(another_user_id, self.course.id)
response = self.do_get(completion_list_uri)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data['count'], 9)
# Get course module completion by other user and course module id
completion_list_uri = '/api/users/{}/courses/{}/completions/?content_id={}'.format(
another_user_id,
self.course.id,
'{}_{}'.format(self.course_content.id, 10))
response = self.do_get(completion_list_uri)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data['count'], 1)
# Get course module completion by bogus user
completion_list_uri = '/api/users/{}/courses/{}/completions/'.format('34323422', self.course.id)
response = self.do_get(completion_list_uri)
self.assertEqual(response.status_code, 404)
......@@ -13,6 +13,7 @@ urlpatterns = patterns(
url(r'^(?P<user_id>[a-zA-Z0-9]+)/courses/(?P<course_id>[^/]+/[^/]+/[^/]+)$', users_views.UsersCoursesDetail.as_view(), name='users-courses-detail'),
url(r'^(?P<user_id>[a-zA-Z0-9]+)/courses/(?P<course_id>[^/]+/[^/]+/[^/]+)/grades$', users_views.UsersCoursesGradesDetail.as_view(), name='users-courses-grades-detail'),
url(r'^(?P<user_id>[a-zA-Z0-9]+)/courses/(?P<course_id>[^/]+/[^/]+/[^/]+)/metrics/social/$', users_views.UsersSocialMetrics.as_view(), name='users-social-metrics'),
url(r'^(?P<user_id>[a-zA-Z0-9]+)/courses/(?P<course_id>[^/]+/[^/]+/[^/]+)/completions/$', users_views.UsersCoursesCompletionsList.as_view(), name='users-courses-completions-list'),
url(r'^(?P<user_id>[a-zA-Z0-9]+)/groups/*$', users_views.UsersGroupsList.as_view(), name='users-groups-list'),
url(r'^(?P<user_id>[a-zA-Z0-9]+)/groups/(?P<group_id>[0-9]+)$', users_views.UsersGroupsDetail.as_view(), name='users-groups-detail'),
url(r'^(?P<user_id>[a-zA-Z0-9]+)/preferences$', users_views.UsersPreferences.as_view(), name='users-preferences-list'),
......
......@@ -17,6 +17,7 @@ from django.db.models import Q
from api_manager.permissions import SecureAPIView, SecureListAPIView
from api_manager.models import GroupProfile, APIUser as User
from api_manager.organizations.serializers import OrganizationSerializer
from api_manager.courses.serializers import CourseModuleCompletionSerializer
from api_manager.utils import generate_base_uri
from projects.serializers import BasicWorkgroupSerializer
from .serializers import UserSerializer
......@@ -918,6 +919,37 @@ class UsersWorkgroupsList(SecureListAPIView):
return queryset
class UsersCoursesCompletionsList(SecureListAPIView):
"""
### The UsersCoursesCompletionsList view allows clients to retrieve a list of course completions
for a user
- URI: ```/api/users/{user_id}/courses/{course_id}/completions/```
- GET: Provides paginated list of course completions a user
To filter the user's course completions by course content
GET ```/api/users/{user_id}/courses/{course_id}/completions/?content_id={content_id}```
"""
serializer_class = CourseModuleCompletionSerializer
def get_queryset(self):
user_id = self.kwargs['user_id']
course_id = self.kwargs.get('course_id', None)
content_id = self.request.QUERY_PARAMS.get('content_id', None)
try:
user = User.objects.get(id=user_id)
except ObjectDoesNotExist:
raise Http404
queryset = user.course_completions.all()
if course_id:
queryset = queryset.filter(course_id=course_id)
if content_id:
queryset = queryset.filter(content_id=content_id)
return queryset
class UsersSocialMetrics(SecureListAPIView):
"""
### The UsersSocialMetrics view allows clients to query about the activity of a user in the
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment