Update isActive column in mailchimp upon activation
This commit is contained in:
@@ -504,8 +504,29 @@ class Registration(models.Model):
|
||||
|
||||
def activate(self):
|
||||
self.user.is_active = True
|
||||
self._track_activation()
|
||||
self.user.save()
|
||||
|
||||
def _track_activation(self):
|
||||
""" Update the isActive flag in mailchimp for activated users."""
|
||||
has_segment_key = getattr(settings, 'LMS_SEGMENT_KEY', None)
|
||||
has_mailchimp_id = hasattr(settings, 'MAILCHIMP_NEW_USER_LIST_ID')
|
||||
if has_segment_key and has_mailchimp_id:
|
||||
identity_args = [
|
||||
self.user.id, # pylint: disable=no-member
|
||||
{
|
||||
'email': self.user.email,
|
||||
'username': self.user.username,
|
||||
'activated': 1,
|
||||
},
|
||||
{
|
||||
"MailChimp": {
|
||||
"listId": settings.MAILCHIMP_NEW_USER_LIST_ID
|
||||
}
|
||||
}
|
||||
]
|
||||
analytics.identify(*identity_args)
|
||||
|
||||
|
||||
class PendingNameChange(models.Model):
|
||||
user = models.OneToOneField(User, unique=True, db_index=True)
|
||||
|
||||
78
common/djangoapps/student/tests/test_activate_account.py
Normal file
78
common/djangoapps/student/tests/test_activate_account.py
Normal file
@@ -0,0 +1,78 @@
|
||||
"""Tests for account activation"""
|
||||
from mock import patch
|
||||
import unittest
|
||||
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.models import User
|
||||
from django.test import TestCase, override_settings
|
||||
|
||||
from student.models import Registration
|
||||
|
||||
|
||||
@unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms')
|
||||
class TestActivateAccount(TestCase):
|
||||
"""Tests for account creation"""
|
||||
|
||||
def setUp(self):
|
||||
super(TestActivateAccount, self).setUp()
|
||||
self.username = "jack"
|
||||
self.email = "jack@fake.edx.org"
|
||||
self.user = User.objects.create(username=self.username, email=self.email, is_active=False)
|
||||
|
||||
# Set Up Registration
|
||||
self.registration = Registration()
|
||||
self.registration.register(self.user)
|
||||
self.registration.save()
|
||||
|
||||
def assert_no_tracking(self, mock_segment_identify):
|
||||
""" Assert that activate sets the flag but does not call segment. """
|
||||
# Ensure that the user starts inactive
|
||||
self.assertFalse(self.user.is_active)
|
||||
|
||||
# Until you explicitly activate it
|
||||
self.registration.activate()
|
||||
self.assertTrue(self.user.is_active)
|
||||
self.assertFalse(mock_segment_identify.called)
|
||||
|
||||
@override_settings(
|
||||
LMS_SEGMENT_KEY="testkey",
|
||||
MAILCHIMP_NEW_USER_LIST_ID="listid"
|
||||
)
|
||||
@patch('student.models.analytics.identify')
|
||||
def test_activation_with_keys(self, mock_segment_identify):
|
||||
expected_segment_payload = {
|
||||
'email': self.email,
|
||||
'username': self.username,
|
||||
'activated': 1,
|
||||
}
|
||||
expected_segment_mailchimp_list = {
|
||||
"MailChimp": {
|
||||
"listId": settings.MAILCHIMP_NEW_USER_LIST_ID
|
||||
}
|
||||
}
|
||||
|
||||
# Ensure that the user starts inactive
|
||||
self.assertFalse(self.user.is_active)
|
||||
|
||||
# Until you explicitly activate it
|
||||
self.registration.activate()
|
||||
self.assertTrue(self.user.is_active)
|
||||
mock_segment_identify.assert_called_with(
|
||||
self.user.id,
|
||||
expected_segment_payload,
|
||||
expected_segment_mailchimp_list
|
||||
)
|
||||
|
||||
@override_settings(LMS_SEGMENT_KEY="testkey")
|
||||
@patch('student.models.analytics.identify')
|
||||
def test_activation_without_mailchimp_key(self, mock_segment_identify):
|
||||
self.assert_no_tracking(mock_segment_identify)
|
||||
|
||||
@override_settings(MAILCHIMP_NEW_USER_LIST_ID="listid")
|
||||
@patch('student.models.analytics.identify')
|
||||
def test_activation_without_segment_key(self, mock_segment_identify):
|
||||
self.assert_no_tracking(mock_segment_identify)
|
||||
|
||||
@patch('student.models.analytics.identify')
|
||||
def test_activation_without_keys(self, mock_segment_identify):
|
||||
self.assert_no_tracking(mock_segment_identify)
|
||||
Reference in New Issue
Block a user