Measuring program progress
Introduces a utility class for gauging a user's progress towards program completion. Progress data is passed to the ProgramListFactory. ECOM-3200.
This commit is contained in:
committed by
Clinton Blackburn
parent
9168789668
commit
a74885331b
@@ -1,18 +1,16 @@
|
||||
"""
|
||||
This file contains celery tasks for programs-related functionality.
|
||||
"""
|
||||
|
||||
from celery import task
|
||||
from celery.utils.log import get_task_logger # pylint: disable=no-name-in-module, import-error
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.models import User
|
||||
from edx_rest_api_client.client import EdxRestApiClient
|
||||
|
||||
from lms.djangoapps.certificates.api import get_certificates_for_user, is_passing_status
|
||||
|
||||
from openedx.core.djangoapps.credentials.models import CredentialsApiConfig
|
||||
from openedx.core.djangoapps.credentials.utils import get_user_credentials
|
||||
from openedx.core.djangoapps.programs.models import ProgramsApiConfig
|
||||
from openedx.core.djangoapps.programs.utils import get_completed_courses
|
||||
from openedx.core.lib.token_utils import get_id_token
|
||||
|
||||
|
||||
@@ -37,26 +35,6 @@ def get_api_client(api_config, student):
|
||||
return EdxRestApiClient(api_config.internal_api_url, jwt=id_token)
|
||||
|
||||
|
||||
def get_completed_courses(student):
|
||||
"""
|
||||
Determine which courses have been completed by the user.
|
||||
|
||||
Args:
|
||||
student:
|
||||
User object representing the student
|
||||
|
||||
Returns:
|
||||
iterable of dicts with structure {'course_id': course_key, 'mode': cert_type}
|
||||
|
||||
"""
|
||||
all_certs = get_certificates_for_user(student.username)
|
||||
return [
|
||||
{'course_id': unicode(cert['course_key']), 'mode': cert['type']}
|
||||
for cert in all_certs
|
||||
if is_passing_status(cert['status'])
|
||||
]
|
||||
|
||||
|
||||
def get_completed_programs(client, course_certificates):
|
||||
"""
|
||||
Given a set of completed courses, determine which programs are completed.
|
||||
|
||||
@@ -48,50 +48,6 @@ class GetApiClientTestCase(TestCase, ProgramsApiConfigMixin):
|
||||
self.assertEqual(api_client._store['session'].auth.token, 'test-token') # pylint: disable=protected-access
|
||||
|
||||
|
||||
@unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms')
|
||||
class GetCompletedCoursesTestCase(TestCase):
|
||||
"""
|
||||
Test the get_completed_courses function
|
||||
"""
|
||||
|
||||
def make_cert_result(self, **kwargs):
|
||||
"""
|
||||
Helper to create dummy results from the certificates API
|
||||
"""
|
||||
result = {
|
||||
'username': 'dummy-username',
|
||||
'course_key': 'dummy-course',
|
||||
'type': 'dummy-type',
|
||||
'status': 'dummy-status',
|
||||
'download_url': 'http://www.example.com/cert.pdf',
|
||||
'grade': '0.98',
|
||||
'created': '2015-07-31T00:00:00Z',
|
||||
'modified': '2015-07-31T00:00:00Z',
|
||||
}
|
||||
result.update(**kwargs)
|
||||
return result
|
||||
|
||||
@mock.patch(TASKS_MODULE + '.get_certificates_for_user')
|
||||
def test_get_completed_courses(self, mock_get_certs_for_user):
|
||||
"""
|
||||
Ensure the function correctly calls to and handles results from the
|
||||
certificates API
|
||||
"""
|
||||
student = UserFactory(username='test-username')
|
||||
mock_get_certs_for_user.return_value = [
|
||||
self.make_cert_result(status='downloadable', type='verified', course_key='downloadable-course'),
|
||||
self.make_cert_result(status='generating', type='prof-ed', course_key='generating-course'),
|
||||
self.make_cert_result(status='unknown', type='honor', course_key='unknown-course'),
|
||||
]
|
||||
|
||||
result = tasks.get_completed_courses(student)
|
||||
self.assertEqual(mock_get_certs_for_user.call_args[0], (student.username, ))
|
||||
self.assertEqual(result, [
|
||||
{'course_id': 'downloadable-course', 'mode': 'verified'},
|
||||
{'course_id': 'generating-course', 'mode': 'prof-ed'},
|
||||
])
|
||||
|
||||
|
||||
@unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms')
|
||||
class GetCompletedProgramsTestCase(TestCase):
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user