diff --git a/common/djangoapps/student/views.py b/common/djangoapps/student/views.py index ddbbc837bf..988b60e18e 100644 --- a/common/djangoapps/student/views.py +++ b/common/djangoapps/student/views.py @@ -145,7 +145,7 @@ REGISTRATION_UTM_PARAMETERS = { } REGISTRATION_UTM_CREATED_AT = 'registration_utm_created_at' # used to announce a registration -REGISTER_USER = Signal(providing_args=["user", "profile"]) +REGISTER_USER = Signal(providing_args=["user", "registration"]) # Disable this warning because it doesn't make sense to completely refactor tests to appease Pylint # pylint: disable=logging-format-interpolation @@ -2022,7 +2022,7 @@ def create_account_with_params(request, params): ) # Announce registration - REGISTER_USER.send(sender=None, user=user, profile=profile) + REGISTER_USER.send(sender=None, user=user, registration=registration) create_comments_service_user(user) diff --git a/lms/djangoapps/email_marketing/signals.py b/lms/djangoapps/email_marketing/signals.py index 745de42748..d776260e87 100644 --- a/lms/djangoapps/email_marketing/signals.py +++ b/lms/djangoapps/email_marketing/signals.py @@ -90,7 +90,7 @@ def add_email_marketing_cookies(sender, response=None, user=None, @receiver(REGISTER_USER) -def email_marketing_register_user(sender, user=None, profile=None, +def email_marketing_register_user(sender, user, registration, **kwargs): # pylint: disable=unused-argument """ Called after user created and saved @@ -98,7 +98,7 @@ def email_marketing_register_user(sender, user=None, profile=None, Args: sender: Not used user: The user object for the user being changed - profile: The user profile for the user being changed + registration: The user registration profile to activate user account kwargs: Not used """ email_config = EmailMarketingConfiguration.current() @@ -110,9 +110,8 @@ def email_marketing_register_user(sender, user=None, profile=None, return # perform update asynchronously - update_user.delay( - _create_sailthru_user_vars(user, user.profile), user.email, site=_get_current_site(), new_user=True - ) + update_user.delay(_create_sailthru_user_vars(user, user.profile, registration=registration), user.email, + site=_get_current_site(), new_user=True) @receiver(USER_FIELD_CHANGED) @@ -161,7 +160,7 @@ def email_marketing_user_field_changed(sender, user=None, table=None, setting=No update_user_email.delay(user.email, old_value) -def _create_sailthru_user_vars(user, profile): +def _create_sailthru_user_vars(user, profile, registration=None): """ Create sailthru user create/update vars from user + profile. """ @@ -181,6 +180,9 @@ def _create_sailthru_user_vars(user, profile): sailthru_vars['year_of_birth'] = profile.year_of_birth sailthru_vars['country'] = unicode(profile.country.code) + if registration: + sailthru_vars['activation_key'] = registration.activation_key + return sailthru_vars diff --git a/lms/djangoapps/email_marketing/tests/test_signals.py b/lms/djangoapps/email_marketing/tests/test_signals.py index 62b44ccabc..41e47da4b4 100644 --- a/lms/djangoapps/email_marketing/tests/test_signals.py +++ b/lms/djangoapps/email_marketing/tests/test_signals.py @@ -30,6 +30,7 @@ from email_marketing.tasks import ( get_email_cookies_via_sailthru ) from openedx.core.djangoapps.lang_pref import LANGUAGE_KEY +from student.models import Registration from student.tests.factories import UserFactory, UserProfileFactory from util.json_request import JsonResponse @@ -70,9 +71,8 @@ class EmailMarketingTests(TestCase): update_email_marketing_config(enabled=False) self.request_factory = RequestFactory() self.user = UserFactory.create(username='test', email=TEST_EMAIL) - self.profile = self.user.profile - self.profile.year_of_birth = 1980 - self.profile.save() + self.registration = Registration() + self.registration.register(self.user) self.request = self.request_factory.get("foo") update_email_marketing_config(enabled=True) @@ -308,14 +308,14 @@ class EmailMarketingTests(TestCase): add_email_marketing_cookies(None) self.assertFalse(mock_log_error.called) - email_marketing_register_user(None) + email_marketing_register_user(None, None, None) self.assertFalse(mock_log_error.called) update_email_marketing_config(enabled=True) # test anonymous users anon = AnonymousUser() - email_marketing_register_user(None, user=anon) + email_marketing_register_user(None, anon, None) self.assertFalse(mock_log_error.called) email_marketing_user_field_changed(None, user=anon) @@ -443,19 +443,21 @@ class EmailMarketingTests(TestCase): @patch('lms.djangoapps.email_marketing.tasks.update_user.delay') def test_register_user(self, mock_update_user, mock_get_current_request): """ - make sure register user call invokes update_user + make sure register user call invokes update_user and includes activation_key """ mock_get_current_request.return_value = self.request - email_marketing_register_user(None, user=self.user, profile=self.profile) + email_marketing_register_user(None, user=self.user, registration=self.registration) self.assertTrue(mock_update_user.called) + self.assertEqual(mock_update_user.call_args[0][0]['activation_key'], self.registration.activation_key) @patch('lms.djangoapps.email_marketing.tasks.update_user.delay') def test_register_user_no_request(self, mock_update_user): """ - make sure register user call invokes update_user + make sure register user call invokes update_user and includes activation_key """ - email_marketing_register_user(None, user=self.user, profile=self.profile) + email_marketing_register_user(None, user=self.user, registration=self.registration) self.assertTrue(mock_update_user.called) + self.assertEqual(mock_update_user.call_args[0][0]['activation_key'], self.registration.activation_key) @patch('lms.djangoapps.email_marketing.tasks.update_user.delay') def test_register_user_language_preference(self, mock_update_user): @@ -464,12 +466,12 @@ class EmailMarketingTests(TestCase): """ # If the user hasn't set an explicit language preference, we should send the application's default. self.assertIsNone(self.user.preferences.model.get_value(self.user, LANGUAGE_KEY)) - email_marketing_register_user(None, user=self.user, profile=self.profile) + email_marketing_register_user(None, user=self.user, registration=self.registration) self.assertEqual(mock_update_user.call_args[0][0]['ui_lang'], settings.LANGUAGE_CODE) # If the user has set an explicit language preference, we should send it. self.user.preferences.create(key=LANGUAGE_KEY, value='es-419') - email_marketing_register_user(None, user=self.user, profile=self.profile) + email_marketing_register_user(None, user=self.user, registration=self.registration) self.assertEqual(mock_update_user.call_args[0][0]['ui_lang'], 'es-419') @patch('email_marketing.signals.crum.get_current_request')