Skip to content

Commit 3101bb7

Browse files
committed
feat: Add toggle to allow redirecting to courseware after enrollment.
This change adds a new waffle switch to redirect a student to coursware after enrolment instead of the dashboard. (cherry picked from commit dbce322)
1 parent 7245bdc commit 3101bb7

File tree

3 files changed

+37
-2
lines changed

3 files changed

+37
-2
lines changed

common/djangoapps/student/tests/tests.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from django.test import TestCase, override_settings
1616
from django.test.client import Client
1717
from django.urls import reverse
18+
from edx_toggles.toggles.testutils import override_waffle_switch
1819
from markupsafe import escape
1920
from opaque_keys.edx.keys import CourseKey
2021
from opaque_keys.edx.locations import CourseLocator
@@ -33,6 +34,7 @@
3334
user_by_anonymous_id
3435
)
3536
from common.djangoapps.student.tests.factories import CourseEnrollmentFactory, UserFactory
37+
from common.djangoapps.student.toggles import REDIRECT_TO_COURSEWARE_AFTER_ENROLLMENT
3638
from common.djangoapps.student.views import complete_course_mode_info
3739
from common.djangoapps.util.model_utils import USER_SETTINGS_CHANGED_EVENT_NAME
3840
from common.djangoapps.util.testing import EventTestMixin
@@ -893,6 +895,7 @@ def test_change_enrollment_modes(self):
893895

894896

895897
@skip_unless_lms
898+
@ddt.ddt
896899
class ChangeEnrollmentViewTest(ModuleStoreTestCase):
897900
"""Tests the student.views.change_enrollment view"""
898901

@@ -913,6 +916,17 @@ def _enroll_through_view(self, course):
913916
)
914917
return response
915918

919+
@ddt.data(
920+
(True, 'courseware'),
921+
(False, None),
922+
)
923+
@ddt.unpack
924+
def test_enrollment_url(self, waffle_flag_enabled, returned_view):
925+
with override_waffle_switch(REDIRECT_TO_COURSEWARE_AFTER_ENROLLMENT, waffle_flag_enabled):
926+
response = self._enroll_through_view(self.course)
927+
data = reverse(returned_view, args=[str(self.course.id)]) if returned_view else ''
928+
assert response.content.decode('utf8') == data
929+
916930
def test_enroll_as_default(self):
917931
"""Tests that a student can successfully enroll through this view"""
918932
response = self._enroll_through_view(self.course)

common/djangoapps/student/toggles.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
Toggles for Dashboard page.
33
"""
44
from edx_toggles.toggles import WaffleFlag
5+
from edx_toggles.toggles import WaffleSwitch
56

67
# Namespace for student waffle flags.
78
WAFFLE_FLAG_NAMESPACE = 'student'
@@ -75,3 +76,20 @@ def should_show_2u_recommendations():
7576

7677
def should_send_enrollment_email():
7778
return ENROLLMENT_CONFIRMATION_EMAIL.is_enabled()
79+
80+
# Waffle flag to enable control redirecting after enrolment.
81+
# .. toggle_name: student.redirect_to_courseware_after_enrollment
82+
# .. toggle_implementation: WaffleSwitch
83+
# .. toggle_default: False
84+
# .. toggle_description: Redirect to courseware after enrollment instead of dashboard.
85+
# .. toggle_use_cases: open_edx
86+
# .. toggle_creation_date: 2023-02-06
87+
# .. toggle_target_removal_date: None
88+
# .. toggle_warning: None
89+
REDIRECT_TO_COURSEWARE_AFTER_ENROLLMENT = WaffleSwitch(
90+
f'{WAFFLE_FLAG_NAMESPACE}.redirect_to_courseware_after_enrollment', __name__
91+
)
92+
93+
94+
def should_redirect_to_courseware_after_enrollment():
95+
return REDIRECT_TO_COURSEWARE_AFTER_ENROLLMENT.is_enabled()

common/djangoapps/student/views/management.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
from rest_framework.decorators import api_view, authentication_classes, permission_classes
3939
from rest_framework.permissions import IsAuthenticated
4040

41+
from common.djangoapps.student.toggles import should_redirect_to_courseware_after_enrollment
4142
from common.djangoapps.track import views as track_views
4243
from lms.djangoapps.bulk_email.models import Optout
4344
from common.djangoapps.course_modes.models import CourseMode
@@ -400,8 +401,10 @@ def change_enrollment(request, check_access=True):
400401
reverse("course_modes_choose", kwargs={'course_id': str(course_id)})
401402
)
402403

403-
# Otherwise, there is only one mode available (the default)
404-
return HttpResponse()
404+
if should_redirect_to_courseware_after_enrollment():
405+
return HttpResponse(reverse('courseware', args=[str(course_id)]))
406+
else:
407+
return HttpResponse()
405408
elif action == "unenroll":
406409
if configuration_helpers.get_value(
407410
"DISABLE_UNENROLLMENT",

0 commit comments

Comments
 (0)