Commit d9d78994 by Awais Qureshi

Merge pull request #7069 from edx/awais786/ECOM-1086-analytics-certs

ECOM-1086 adding tracking event for cert generation.
parents a36c615c 28b633f9
......@@ -769,11 +769,15 @@ class GenerateUserCertTests(ModuleStoreTestCase):
self.assertIn("Your certificate will be available when you pass the course.", resp.content)
@patch('courseware.grades.grade', Mock(return_value={'grade': 'Pass', 'percent': 0.75}))
@override_settings(CERT_QUEUE='certificates')
@override_settings(CERT_QUEUE='certificates', SEGMENT_IO_LMS_KEY="foobar", FEATURES={'SEGMENT_IO_LMS': True})
def test_user_with_passing_grade(self):
# If user has above passing grading then json will return cert generating message and
# status valid code
# mocking xqueue
# mocking xqueue and analytics
analytics_patcher = patch('courseware.views.analytics')
mock_tracker = analytics_patcher.start()
self.addCleanup(analytics_patcher.stop)
with patch('capa.xqueue_interface.XQueueInterface.send_to_queue') as mock_send_to_queue:
mock_send_to_queue.return_value = (0, "Successfully queued")
......@@ -781,6 +785,22 @@ class GenerateUserCertTests(ModuleStoreTestCase):
self.assertEqual(resp.status_code, 200)
self.assertIn("Creating certificate", resp.content)
#Verify Google Analytics event fired after generating certificate
mock_tracker.track.assert_called_once_with( # pylint: disable=no-member
self.student.id, # pylint: disable=no-member
'edx.bi.user.certificate.generate',
{
'category': 'certificates',
'label': unicode(self.course.id)
},
context={
'Google Analytics':
{'clientId': None}
}
)
mock_tracker.reset_mock()
@patch('courseware.grades.grade', Mock(return_value={'grade': 'Pass', 'percent': 0.75}))
def test_user_with_passing_existing_generating_cert(self):
# If user has passing grade but also has existing generating cert
......
......@@ -71,6 +71,8 @@ import survey.utils
import survey.views
from util.views import ensure_valid_course_key
from eventtracking import tracker
import analytics
log = logging.getLogger("edx.courseware")
......@@ -1303,6 +1305,7 @@ def generate_user_cert(request, course_id):
if not certificate_status["is_downloadable"] and not certificate_status["is_generating"]:
generate_user_certificates(student, course)
_track_successful_certificate_generation(student.id, course.id)
return HttpResponse(_("Creating certificate"))
# if certificate_status is not is_downloadable and is_generating or
......@@ -1311,3 +1314,32 @@ def generate_user_cert(request, course_id):
# at backend debug the issue and re-submit the task.
return HttpResponseBadRequest(_("Creating certificate"))
def _track_successful_certificate_generation(user_id, course_id): # pylint: disable=invalid-name
"""Track an successfully certificate generation event.
Arguments:
user_id (str): The ID of the user generting the certificate.
course_id (unicode): id associated with the course
Returns:
None
"""
if settings.FEATURES.get('SEGMENT_IO_LMS') and hasattr(settings, 'SEGMENT_IO_LMS_KEY'):
event_name = 'edx.bi.user.certificate.generate' # pylint: disable=no-member
tracking_context = tracker.get_tracker().resolve_context() # pylint: disable=no-member
analytics.track(
user_id,
event_name,
{
'category': 'certificates',
'label': unicode(course_id)
},
context={
'Google Analytics': {
'clientId': tracking_context.get('client_id')
}
}
)
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