add ability to return the course name (optionally) when querying about credit requirement fulfillments
This commit is contained in:
@@ -10,6 +10,7 @@ from django.core.exceptions import ObjectDoesNotExist
|
||||
from opaque_keys.edx.keys import CourseKey
|
||||
|
||||
from student.models import CourseEnrollment
|
||||
from xmodule.modulestore.django import modulestore
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
@@ -47,7 +48,7 @@ class CreditService(object):
|
||||
|
||||
return is_credit_course(course_key)
|
||||
|
||||
def get_credit_state(self, user_id, course_key_or_id):
|
||||
def get_credit_state(self, user_id, course_key_or_id, return_course_name=False):
|
||||
"""
|
||||
Return all information about the user's credit state inside of a given
|
||||
course.
|
||||
@@ -64,6 +65,7 @@ class CreditService(object):
|
||||
'profile_fullname': the name that the student registered under, used for verification
|
||||
'is_credit_course': if the course has been marked as a credit bearing course
|
||||
'credit_requirement_status': the user's status in fulfilling those requirements
|
||||
'course_name': optional display name of the course
|
||||
}
|
||||
"""
|
||||
|
||||
@@ -89,13 +91,20 @@ class CreditService(object):
|
||||
# not enrolled
|
||||
return None
|
||||
|
||||
return {
|
||||
result = {
|
||||
'enrollment_mode': enrollment.mode,
|
||||
'profile_fullname': user.profile.name,
|
||||
'is_credit_course': is_credit_course(course_key),
|
||||
'credit_requirement_status': get_credit_requirement_status(course_key, user.username)
|
||||
}
|
||||
|
||||
if return_course_name:
|
||||
course = modulestore().get_course(course_key, depth=0)
|
||||
result.update({
|
||||
'course_name': course.display_name,
|
||||
})
|
||||
return result
|
||||
|
||||
def set_credit_requirement_status(self, user_id, course_key_or_id, req_namespace,
|
||||
req_name, status="satisfied", reason=None):
|
||||
"""
|
||||
|
||||
@@ -121,6 +121,22 @@ class CreditServiceTests(ModuleStoreTestCase):
|
||||
self.assertEqual(credit_state['credit_requirement_status'][0]['name'], 'grade')
|
||||
self.assertEqual(credit_state['credit_requirement_status'][0]['status'], 'satisfied')
|
||||
|
||||
def test_course_name(self):
|
||||
"""
|
||||
Make sure we can get back the optional course name
|
||||
"""
|
||||
|
||||
CourseEnrollment.enroll(self.user, self.course.id)
|
||||
|
||||
# make sure it is not returned by default
|
||||
credit_state = self.service.get_credit_state(self.user.id, self.course.id)
|
||||
self.assertNotIn('course_name', credit_state)
|
||||
|
||||
# now make sure it is in there when we pass in the flag
|
||||
credit_state = self.service.get_credit_state(self.user.id, self.course.id, return_course_name=True)
|
||||
self.assertIn('course_name', credit_state)
|
||||
self.assertEqual(credit_state['course_name'], self.course.display_name)
|
||||
|
||||
def test_set_status_non_credit(self):
|
||||
"""
|
||||
assert that we can still try to update a credit status but return quickly if
|
||||
|
||||
Reference in New Issue
Block a user