fix: setup context for emitting event to segment if desired (#36692)

If we wish this event to be sent to Segment through the event-tracking lib, we must ensure that the context includes at least the `user_id` field in the context dict.
This commit is contained in:
Justin Hynes
2025-05-09 10:54:37 -04:00
committed by GitHub
parent 841efcc9fb
commit f509bceac2
2 changed files with 27 additions and 6 deletions

View File

@@ -51,7 +51,12 @@ def collect_progress_for_user_in_course(course_id: str, user_id: str) -> None:
progress["course_id"] = course_id
progress["enrollment_mode"] = enrollment_mode
tracker.emit(
COURSE_COMPLETION_FOR_USER_EVENT_NAME,
progress
)
context = {
"course_id": course_id,
"user_id": user.id,
}
with tracker.get_tracker().context(COURSE_COMPLETION_FOR_USER_EVENT_NAME, context):
tracker.emit(
COURSE_COMPLETION_FOR_USER_EVENT_NAME,
progress
)

View File

@@ -2,7 +2,7 @@
Tests for Celery tasks used by the `course_home_api` app.
"""
from unittest.mock import patch
from unittest.mock import patch, MagicMock
from opaque_keys.edx.keys import CourseKey
from testfixtures import LogCapture
@@ -36,10 +36,19 @@ class CalculateCompletionTaskTests(ModuleStoreTestCase):
@patch("lms.djangoapps.course_home_api.tasks.calculate_progress_for_learner_in_course")
@patch("lms.djangoapps.course_home_api.tasks.tracker.emit")
def test_successful_event_emission(self, mock_tracker, mock_progress):
@patch("lms.djangoapps.course_home_api.tasks.tracker.get_tracker")
def test_successful_event_emission(self, mock_get_tracker, mock_tracker, mock_progress):
"""
Test to ensure a tracker event is emit by the task with the expected completion information.
"""
mock_context_manager = MagicMock()
mock_context_manager.__enter__.return_value = None
mock_context_manager.__exit__.return_value = None
mock_tracker_instance = MagicMock()
mock_tracker_instance.context.return_value = mock_context_manager
mock_get_tracker.return_value = mock_tracker_instance
mock_progress.return_value = {
"complete_count": 5,
"incomplete_count": 2,
@@ -65,6 +74,13 @@ class CalculateCompletionTaskTests(ModuleStoreTestCase):
collect_progress_for_user_in_course(self.course_run_key_string, self.user.id)
mock_progress.assert_called_once_with(CourseKey.from_string(self.course_run_key_string), self.user)
mock_tracker_instance.context.assert_called_once_with(
COURSE_COMPLETION_FOR_USER_EVENT_NAME,
{
"course_id": self.course_run_key_string,
"user_id": self.user.id,
},
)
mock_tracker.assert_called_once_with(
COURSE_COMPLETION_FOR_USER_EVENT_NAME,
expected_data,