From e7377d46f1c94b2de751f65b9241613d1e588cf0 Mon Sep 17 00:00:00 2001 From: Kira Miller <31229189+kiram15@users.noreply.github.com> Date: Wed, 4 Mar 2026 14:02:21 -0700 Subject: [PATCH] fix: add additional kwargs to USER_RETIRE_LMS (#38078) --- .../program_enrollments/tests/test_signals.py | 16 ++++++++++++++++ .../core/djangoapps/user_api/accounts/signals.py | 2 +- .../core/djangoapps/user_api/accounts/views.py | 7 ++++++- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/lms/djangoapps/program_enrollments/tests/test_signals.py b/lms/djangoapps/program_enrollments/tests/test_signals.py index 736d2fa446..99ef037b86 100644 --- a/lms/djangoapps/program_enrollments/tests/test_signals.py +++ b/lms/djangoapps/program_enrollments/tests/test_signals.py @@ -100,6 +100,22 @@ class ProgramEnrollmentRetireSignalTests(ModuleStoreTestCase): self.assert_enrollment_and_history_retired(enrollment) + def test_retire_signal_handler_tolerates_extra_kwargs(self): + """ + Ensure program_enrollments retirement receiver does not break with additional kwargs. + """ + enrollment = self.create_enrollment_and_history() + + # Simulate the signal being sent with extra kwargs. + _listen_for_lms_retire( + sender=self.__class__, + user=enrollment.user, + retired_username='retired-test-username', + retired_email='retired-test@example.com', + ) + + self.assert_enrollment_and_history_retired(enrollment) + @ddt.ddt class SocialAuthEnrollmentCompletionSignalTest(CacheIsolationTestCase): diff --git a/openedx/core/djangoapps/user_api/accounts/signals.py b/openedx/core/djangoapps/user_api/accounts/signals.py index a51a8160c9..be7bf75d99 100644 --- a/openedx/core/djangoapps/user_api/accounts/signals.py +++ b/openedx/core/djangoapps/user_api/accounts/signals.py @@ -10,7 +10,7 @@ from django.dispatch import Signal USER_RETIRE_MAILINGS = Signal() # Signal to retire LMS critical information -# providing_args=["user"] +# providing_args=["user", "retired_username", "retired_email"] USER_RETIRE_LMS_CRITICAL = Signal() # Signal to retire LMS misc information diff --git a/openedx/core/djangoapps/user_api/accounts/views.py b/openedx/core/djangoapps/user_api/accounts/views.py index c3ff6ce7a2..c2bc8f4427 100644 --- a/openedx/core/djangoapps/user_api/accounts/views.py +++ b/openedx/core/djangoapps/user_api/accounts/views.py @@ -1170,7 +1170,12 @@ class AccountRetirementView(ViewSet): UnregisteredLearnerCohortAssignments.delete_by_user_value(original_email, field="email") # This signal allows code in higher points of LMS to retire the user as necessary - USER_RETIRE_LMS_CRITICAL.send(sender=self.__class__, user=user) + USER_RETIRE_LMS_CRITICAL.send( + sender=self.__class__, + user=user, + retired_username=retired_username, + retired_email=retired_email, + ) user.first_name = "" user.last_name = ""