Merge pull request #12450 from edx/peter-fogg/referral-tracking

Add referral tracking for new registrations.
This commit is contained in:
Peter Fogg
2016-05-16 12:08:56 -04:00
9 changed files with 144 additions and 2 deletions

View File

@@ -19,6 +19,7 @@ from notification_prefs import NOTIFICATION_PREF_KEY
from edxmako.tests import mako_middleware_process_request
from external_auth.models import ExternalAuthMap
import student
from student.models import UserAttribute
TEST_CS_URL = 'https://comments.service.test:123/'
@@ -278,6 +279,24 @@ class TestCreateAccount(TestCase):
else:
self.assertIsNone(preference)
@unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms')
def test_referral_attribution(self):
"""
Verify that a referral attribution is recorded if an affiliate
cookie is present upon a new user's registration.
"""
affiliate_id = 'test-partner'
self.client.cookies[settings.AFFILIATE_COOKIE_NAME] = affiliate_id
user = self.create_account_and_fetch_profile().user
self.assertEqual(UserAttribute.get_user_attribute(user, settings.AFFILIATE_COOKIE_NAME), affiliate_id)
@unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms')
def test_no_referral(self):
"""Verify that no referral is recorded when a cookie is not present."""
self.assertIsNone(self.client.cookies.get(settings.AFFILIATE_COOKIE_NAME)) # pylint: disable=no-member
user = self.create_account_and_fetch_profile().user
self.assertIsNone(UserAttribute.get_user_attribute(user, settings.AFFILIATE_COOKIE_NAME))
@ddt.ddt
class TestCreateAccountValidation(TestCase):

View File

@@ -24,7 +24,7 @@ from django.test.client import Client
from course_modes.models import CourseMode
from student.models import (
anonymous_id_for_user, user_by_anonymous_id, CourseEnrollment,
unique_id_for_user, LinkedInAddToProfileConfiguration
unique_id_for_user, LinkedInAddToProfileConfiguration, UserAttribute
)
from student.views import (
process_survey_link,
@@ -1157,3 +1157,26 @@ class DashboardTestXSeriesPrograms(ModuleStoreTestCase, ProgramsApiConfigMixin):
self.assertContains(response, 'This course is 1 of 3 courses in the', count)
self.assertContains(response, self.program_name, count * 2)
self.assertContains(response, 'View XSeries Details', count)
class UserAttributeTests(TestCase):
"""Tests for the UserAttribute model."""
def setUp(self):
super(UserAttributeTests, self).setUp()
self.user = UserFactory()
self.name = 'test'
self.value = 'test-value'
def test_get_set_attribute(self):
self.assertIsNone(UserAttribute.get_user_attribute(self.user, self.name))
UserAttribute.set_user_attribute(self.user, self.name, self.value)
self.assertEqual(UserAttribute.get_user_attribute(self.user, self.name), self.value)
new_value = 'new_value'
UserAttribute.set_user_attribute(self.user, self.name, new_value)
self.assertEqual(UserAttribute.get_user_attribute(self.user, self.name), new_value)
def test_unicode(self):
UserAttribute.set_user_attribute(self.user, self.name, self.value)
for field in (self.name, self.value, self.user.username):
self.assertIn(field, unicode(UserAttribute.objects.get(user=self.user)))