Fix error in experiment tracking
If the user is not logged in, the ExperimentWaffleFlag code was raising an exception when trying to send an event to segment. This is a quick fix to ignore anonymous users.
This commit is contained in:
@@ -3174,7 +3174,6 @@ class DatesTabTestCase(ModuleStoreTestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(DatesTabTestCase, self).setUp()
|
||||
self.user = UserFactory.create()
|
||||
|
||||
now = datetime.now(utc)
|
||||
self.course = CourseFactory.create(start=now + timedelta(days=-1))
|
||||
@@ -3197,10 +3196,6 @@ class DatesTabTestCase(ModuleStoreTestCase):
|
||||
|
||||
@RELATIVE_DATES_FLAG.override(active=True)
|
||||
def test_defaults(self):
|
||||
request = RequestFactory().request()
|
||||
request.user = self.user
|
||||
self.addCleanup(crum.set_current_request, None)
|
||||
crum.set_current_request(request)
|
||||
enrollment = CourseEnrollmentFactory(course_id=self.course.id, user=self.user, mode=CourseMode.VERIFIED)
|
||||
now = datetime.now(utc)
|
||||
with self.store.bulk_operations(self.course.id):
|
||||
|
||||
@@ -70,6 +70,10 @@ class ExperimentWaffleFlag(CourseWaffleFlag):
|
||||
if not request:
|
||||
return 0
|
||||
|
||||
if not request.user.id:
|
||||
# We need username for stable bucketing and id for tracking, so just skip anonymous (not-logged-in) users
|
||||
return 0
|
||||
|
||||
# Use course key in experiment name to separate caches and segment calls per-course-run
|
||||
experiment_name = self.namespaced_flag_name + ('.{}'.format(course_key) if course_key else '')
|
||||
|
||||
@@ -136,7 +140,8 @@ class ExperimentWaffleFlag(CourseWaffleFlag):
|
||||
|
||||
@contextmanager
|
||||
def override(self, active=True, bucket=1): # pylint: disable=arguments-differ
|
||||
from openedx.core.djangoapps.waffle_utils.testutils import override_waffle_flag
|
||||
with override_waffle_flag(self, active):
|
||||
with override_waffle_flag(self.bucket_flags[bucket], True):
|
||||
yield
|
||||
from mock import patch
|
||||
if not active:
|
||||
bucket = 0
|
||||
with patch.object(self, 'get_bucket', return_value=bucket):
|
||||
yield
|
||||
|
||||
@@ -16,6 +16,7 @@ from experiments.factories import ExperimentKeyValueFactory
|
||||
from experiments.flags import ExperimentWaffleFlag
|
||||
from openedx.core.djangoapps.site_configuration.tests.factories import SiteFactory
|
||||
from openedx.core.djangoapps.waffle_utils import CourseWaffleFlag
|
||||
from openedx.core.djangoapps.waffle_utils.testutils import override_waffle_flag
|
||||
from student.tests.factories import CourseEnrollmentFactory, UserFactory
|
||||
from xmodule.modulestore.tests.django_utils import SharedModuleStoreTestCase
|
||||
|
||||
@@ -45,8 +46,10 @@ class ExperimentWaffleFlagTests(SharedModuleStoreTestCase):
|
||||
self.addCleanup(RequestCache.clear_all_namespaces)
|
||||
|
||||
def get_bucket(self, track=False, active=True):
|
||||
with self.flag.override(active=active):
|
||||
return self.flag.get_bucket(course_key=self.key, track=track)
|
||||
# Does not use ExperimentWaffleFlag.override, since that shortcuts get_bucket and we want to test internals
|
||||
with override_waffle_flag(self.flag, active):
|
||||
with override_waffle_flag(self.flag.bucket_flags[1], True):
|
||||
return self.flag.get_bucket(course_key=self.key, track=track)
|
||||
|
||||
def test_basic_happy_path(self):
|
||||
self.assertEqual(self.get_bucket(), 1)
|
||||
|
||||
Reference in New Issue
Block a user