Files
edx-platform/lms/djangoapps/learner_home/test_waffle.py
Nathan Sprenkle f783dce52d feat: Learner Home experimental rollout (#31642)
* feat: add experimental redirect for Learner Home

As a request by Data, this system repeatably groups users into
experiment groups. Based on end of user ID, users that fall beneath a
threshold (LEARNER_HOME_MFE_REDIRECT_PERCENTAGE) will be redirected to
the Learner Home experience, if enabled. Otherwise, learners will see
the legacy dashboard.

* feat: add learner home redirect percentage setting

Adds LEARNER_HOME_MFE_REDIRECT_PERCENTAGE to common settings to avoid a
failed lookup. Can be overridden through config.

* refactor: change test to not leak implementation
2023-01-25 10:59:39 -05:00

55 lines
1.9 KiB
Python

"""
Tests for toggles, where there is logic beyond enable/disable.
"""
from unittest.mock import patch
import ddt
from django.test import override_settings
from common.djangoapps.student.tests.factories import UserFactory
from lms.djangoapps.learner_home.waffle import should_redirect_to_learner_home_mfe
from xmodule.modulestore.tests.django_utils import SharedModuleStoreTestCase
@ddt.ddt
class TestLearnerHomeRedirect(SharedModuleStoreTestCase):
"""
Tests for should_redirect_to_learner_home, used for experimental rollout.
"""
def setUp(self):
super().setUp()
# Set up a user for testing
self.user = UserFactory
@patch("lms.djangoapps.learner_home.waffle.ENABLE_LEARNER_HOME_MFE")
def test_should_redirect_to_learner_home_disabled(self, mock_enable_learner_home):
# Given Learner Home MFE feature is not enabled
mock_enable_learner_home.is_enabled.return_value = False
# When I check if I should redirect
redirect_choice = should_redirect_to_learner_home_mfe(self.user)
# Then I never redirect
self.assertFalse(redirect_choice)
@ddt.data((0, True), (50, False), (100, True))
@ddt.unpack
@patch("lms.djangoapps.learner_home.waffle.ENABLE_LEARNER_HOME_MFE")
@override_settings(LEARNER_HOME_MFE_REDIRECT_PERCENTAGE=50)
def test_should_redirect_to_learner_home_enabled(
self, user_id, expect_redirect, mock_enable_learner_home
):
# Given Learner Home MFE feature is enabled
mock_enable_learner_home.is_enabled.return_value = True
self.user.id = user_id
# When I check if I should redirect
redirect_choice = should_redirect_to_learner_home_mfe(self.user)
# Then I redirect based on configuration
# (currently user ID % 100 < redirect percentage)
self.assertEqual(expect_redirect, redirect_choice)