Get last visited block id as user staus with version v1 (#25498)

Get last visited block id as user staus with version v1
VAN-85
This commit is contained in:
jawad khan
2020-11-06 21:57:03 +05:00
committed by GitHub
parent b2ba363f1e
commit 04640bde1e
2 changed files with 37 additions and 6 deletions

View File

@@ -8,6 +8,7 @@ import datetime
import ddt import ddt
import pytz import pytz
import six import six
from completion.test_utils import CompletionWaffleTestMixin, submit_completions_for_testing
from django.conf import settings from django.conf import settings
from django.template import defaultfilters from django.template import defaultfilters
from django.test import RequestFactory, override_settings from django.test import RequestFactory, override_settings
@@ -449,14 +450,14 @@ class CourseStatusAPITestCase(MobileAPITestCase):
class TestCourseStatusGET(CourseStatusAPITestCase, MobileAuthUserTestMixin, class TestCourseStatusGET(CourseStatusAPITestCase, MobileAuthUserTestMixin,
MobileCourseAccessTestMixin, MilestonesTestCaseMixin): MobileCourseAccessTestMixin, MilestonesTestCaseMixin, CompletionWaffleTestMixin):
""" """
Tests for GET of /api/mobile/v0.5/users/<user_name>/course_status_info/{course_id} Tests for GET of /api/mobile/v<version_number>/users/<user_name>/course_status_info/{course_id}
""" """
def test_success(self): def test_success_v0(self):
self.login_and_enroll() self.login_and_enroll()
response = self.api_response() response = self.api_response(api_version=API_V05)
self.assertEqual( self.assertEqual(
response.data["last_visited_module_id"], response.data["last_visited_module_id"],
six.text_type(self.sub_section.location) six.text_type(self.sub_section.location)
@@ -466,6 +467,16 @@ class TestCourseStatusGET(CourseStatusAPITestCase, MobileAuthUserTestMixin,
[six.text_type(module.location) for module in [self.sub_section, self.section, self.course]] [six.text_type(module.location) for module in [self.sub_section, self.section, self.course]]
) )
def test_success_v1(self):
self.override_waffle_switch(True)
self.login_and_enroll()
submit_completions_for_testing(self.user, [self.unit.location])
response = self.api_response(api_version=API_V1)
self.assertEqual(
response.data["last_visited_block_id"],
six.text_type(self.unit.location)
)
class TestCourseStatusPATCH(CourseStatusAPITestCase, MobileAuthUserTestMixin, class TestCourseStatusPATCH(CourseStatusAPITestCase, MobileAuthUserTestMixin,
MobileCourseAccessTestMixin, MilestonesTestCaseMixin): MobileCourseAccessTestMixin, MilestonesTestCaseMixin):

View File

@@ -4,6 +4,8 @@ Views for user API
import six import six
from completion.utilities import get_key_to_last_completed_block
from completion.exceptions import UnavailableCompletionData
from django.contrib.auth.signals import user_logged_in from django.contrib.auth.signals import user_logged_in
from django.shortcuts import redirect from django.shortcuts import redirect
from django.utils import dateparse from django.utils import dateparse
@@ -22,7 +24,7 @@ from lms.djangoapps.courseware.model_data import FieldDataCache
from lms.djangoapps.courseware.module_render import get_module_for_descriptor from lms.djangoapps.courseware.module_render import get_module_for_descriptor
from lms.djangoapps.courseware.views.index import save_positions_recursively_up from lms.djangoapps.courseware.views.index import save_positions_recursively_up
from lms.djangoapps.courseware.access_utils import ACCESS_GRANTED from lms.djangoapps.courseware.access_utils import ACCESS_GRANTED
from lms.djangoapps.mobile_api.utils import API_V05 from lms.djangoapps.mobile_api.utils import API_V05, API_V1
from openedx.features.course_duration_limits.access import check_course_expired from openedx.features.course_duration_limits.access import check_course_expired
from student.models import CourseEnrollment, User from student.models import CourseEnrollment, User
from xmodule.modulestore.django import modulestore from xmodule.modulestore.django import modulestore
@@ -83,6 +85,8 @@ class UserCourseStatus(views.APIView):
Get or update the ID of the module that the specified user last Get or update the ID of the module that the specified user last
visited in the specified course. visited in the specified course.
Get ID of the last completed block in case of version v1
**Example Requests** **Example Requests**
GET /api/mobile/{version}/users/{username}/course_status_info/{course_id} GET /api/mobile/{version}/users/{username}/course_status_info/{course_id}
@@ -110,6 +114,11 @@ class UserCourseStatus(views.APIView):
visited in the course. visited in the course.
* last_visited_module_path: The ID of the modules in the path from the * last_visited_module_path: The ID of the modules in the path from the
last visited module to the course module. last visited module to the course module.
For version v1 GET request response includes the following values.
* last_visited_block_id: ID of the last completed block.
""" """
http_method_names = ["get", "patch"] http_method_names = ["get", "patch"]
@@ -183,8 +192,19 @@ class UserCourseStatus(views.APIView):
""" """
Get the ID of the module that the specified user last visited in the specified course. Get the ID of the module that the specified user last visited in the specified course.
""" """
user_course_status = self._get_course_info(request, course)
return self._get_course_info(request, course) api_version = self.kwargs.get("api_version")
if api_version == API_V1:
# Get ID of the block that the specified user last visited in the specified course.
try:
block_id = str(get_key_to_last_completed_block(request.user, course.id))
except UnavailableCompletionData:
block_id = ""
user_course_status.data["last_visited_block_id"] = block_id
return user_course_status
@mobile_course_access(depth=2) @mobile_course_access(depth=2)
def patch(self, request, course, *args, **kwargs): def patch(self, request, course, *args, **kwargs):