fix: Emit a segment event after passing certificate generation in V2 of course certificates (#27965)

MICROBA-1082
This commit is contained in:
Christie Rice
2021-06-15 15:51:05 -04:00
committed by GitHub
parent 59dc0a4a39
commit 2a9b1a495e
3 changed files with 50 additions and 5 deletions

View File

@@ -16,7 +16,11 @@ from common.djangoapps.student.models import CourseEnrollment, UserProfile
from lms.djangoapps.certificates.data import CertificateStatuses
from lms.djangoapps.certificates.models import GeneratedCertificate
from lms.djangoapps.certificates.queue import XQueueCertInterface
from lms.djangoapps.certificates.utils import emit_certificate_event, has_html_certificates_enabled
from lms.djangoapps.certificates.utils import (
emit_certificate_event,
emit_segment_event,
has_html_certificates_enabled
)
from lms.djangoapps.grades.api import CourseGradeFactory
from lms.djangoapps.instructor.access import list_with_level
from openedx.core.djangoapps.content.course_overviews.api import get_course_overview_or_none
@@ -50,6 +54,7 @@ def generate_course_certificate(user, course_key, generation_mode):
'generation_mode': generation_mode
}
emit_certificate_event(event_name='created', user=user, course_id=course_key, event_data=event_data)
emit_segment_event(user_id=user.id, course_id=course_key)
return cert

View File

@@ -2,11 +2,12 @@
Tests for certificate generation
"""
import logging
from unittest.mock import patch
from common.djangoapps.student.tests.factories import CourseEnrollmentFactory, UserFactory
from common.djangoapps.util.testing import EventTestMixin
from lms.djangoapps.certificates.generation import generate_course_certificate
from lms.djangoapps.certificates.data import CertificateStatuses
from lms.djangoapps.certificates.generation import generate_course_certificate
from lms.djangoapps.certificates.models import GeneratedCertificate
from lms.djangoapps.certificates.tests.factories import GeneratedCertificateFactory
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
@@ -58,6 +59,27 @@ class CertificateTests(EventTestMixin, ModuleStoreTestCase):
generation_mode=self.gen_mode
)
def test_segment_event(self):
"""
Test that a segment event is created
"""
analytics_patcher = patch('lms.djangoapps.certificates.utils.segment')
mock_tracker = analytics_patcher.start()
self.addCleanup(analytics_patcher.stop)
generated_cert = generate_course_certificate(self.u, self.key, self.gen_mode)
assert generated_cert.status, CertificateStatuses.downloadable
mock_tracker.track.assert_called_once_with(
self.u.id,
'edx.bi.user.certificate.generate',
{
'category': 'certificates',
'label': str(self.key)
},
)
mock_tracker.reset_mock()
def test_generation_existing(self):
"""
Test certificate generation when a certificate already exists

View File

@@ -9,6 +9,7 @@ from django.urls import reverse
from eventtracking import tracker
from opaque_keys.edx.keys import CourseKey
from common.djangoapps.track import segment
from lms.djangoapps.certificates.models import GeneratedCertificate
from openedx.core.djangoapps.content.course_overviews.api import get_course_overview
@@ -26,9 +27,9 @@ def emit_certificate_event(event_name, user, course_id, course_overview=None, ev
a learner.
- `edx.certificate.shared` - Emit when a learner shares their course certificate to social media (LinkedIn,
Facebook, or Twitter).
- `edx.certificate.evidence_visisted` - Emit when a user (other than the learner who owns a certificate) views a
course certificate (e.g., someone views a course certificate shared on a
LinkedIn profile).
- `edx.certificate.evidence_visited` - Emit when a user (other than the learner who owns a certificate) views a
course certificate (e.g., someone views a course certificate shared on a
LinkedIn profile).
Args:
event_name (String) - Text describing the action/event that we are tracking. Examples include `revoked`,
@@ -61,6 +62,23 @@ def emit_certificate_event(event_name, user, course_id, course_overview=None, ev
tracker.emit(event_name, event_data)
def emit_segment_event(user_id, course_id):
"""
Track a successful certificate generation event in segment.
Arguments:
user_id (str): The ID of the user associated with the certificate.
course_id (CourseKey): Identifier for the course.
Returns:
None
"""
event_name = 'edx.bi.user.certificate.generate'
segment.track(user_id, event_name, {
'category': 'certificates',
'label': str(course_id)
})
def get_certificate_url(user_id=None, course_id=None, uuid=None, user_certificate=None):
"""
Returns the certificate URL