Skip to content

Commit

Permalink
feat: Add toggle to allow redirecting to courseware after enrollment.
Browse files Browse the repository at this point in the history
This change adds a new waffle switch to redirect a student to coursware after
enrolment instead of the dashboard.

(cherry picked from commit dbce322)
  • Loading branch information
xitij2000 committed Jun 26, 2023
1 parent 7245bdc commit 3101bb7
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 2 deletions.
14 changes: 14 additions & 0 deletions common/djangoapps/student/tests/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
from django.test import TestCase, override_settings
from django.test.client import Client
from django.urls import reverse
from edx_toggles.toggles.testutils import override_waffle_switch
from markupsafe import escape
from opaque_keys.edx.keys import CourseKey
from opaque_keys.edx.locations import CourseLocator
Expand All @@ -33,6 +34,7 @@
user_by_anonymous_id
)
from common.djangoapps.student.tests.factories import CourseEnrollmentFactory, UserFactory
from common.djangoapps.student.toggles import REDIRECT_TO_COURSEWARE_AFTER_ENROLLMENT
from common.djangoapps.student.views import complete_course_mode_info
from common.djangoapps.util.model_utils import USER_SETTINGS_CHANGED_EVENT_NAME
from common.djangoapps.util.testing import EventTestMixin
Expand Down Expand Up @@ -893,6 +895,7 @@ def test_change_enrollment_modes(self):


@skip_unless_lms
@ddt.ddt
class ChangeEnrollmentViewTest(ModuleStoreTestCase):
"""Tests the student.views.change_enrollment view"""

Expand All @@ -913,6 +916,17 @@ def _enroll_through_view(self, course):
)
return response

@ddt.data(
(True, 'courseware'),
(False, None),
)
@ddt.unpack
def test_enrollment_url(self, waffle_flag_enabled, returned_view):
with override_waffle_switch(REDIRECT_TO_COURSEWARE_AFTER_ENROLLMENT, waffle_flag_enabled):
response = self._enroll_through_view(self.course)
data = reverse(returned_view, args=[str(self.course.id)]) if returned_view else ''
assert response.content.decode('utf8') == data

def test_enroll_as_default(self):
"""Tests that a student can successfully enroll through this view"""
response = self._enroll_through_view(self.course)
Expand Down
18 changes: 18 additions & 0 deletions common/djangoapps/student/toggles.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
Toggles for Dashboard page.
"""
from edx_toggles.toggles import WaffleFlag
from edx_toggles.toggles import WaffleSwitch

# Namespace for student waffle flags.
WAFFLE_FLAG_NAMESPACE = 'student'
Expand Down Expand Up @@ -75,3 +76,20 @@ def should_show_2u_recommendations():

def should_send_enrollment_email():
return ENROLLMENT_CONFIRMATION_EMAIL.is_enabled()

# Waffle flag to enable control redirecting after enrolment.
# .. toggle_name: student.redirect_to_courseware_after_enrollment
# .. toggle_implementation: WaffleSwitch
# .. toggle_default: False
# .. toggle_description: Redirect to courseware after enrollment instead of dashboard.
# .. toggle_use_cases: open_edx
# .. toggle_creation_date: 2023-02-06
# .. toggle_target_removal_date: None
# .. toggle_warning: None
REDIRECT_TO_COURSEWARE_AFTER_ENROLLMENT = WaffleSwitch(
f'{WAFFLE_FLAG_NAMESPACE}.redirect_to_courseware_after_enrollment', __name__
)


def should_redirect_to_courseware_after_enrollment():
return REDIRECT_TO_COURSEWARE_AFTER_ENROLLMENT.is_enabled()
7 changes: 5 additions & 2 deletions common/djangoapps/student/views/management.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
from rest_framework.decorators import api_view, authentication_classes, permission_classes
from rest_framework.permissions import IsAuthenticated

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

# Otherwise, there is only one mode available (the default)
return HttpResponse()
if should_redirect_to_courseware_after_enrollment():
return HttpResponse(reverse('courseware', args=[str(course_id)]))
else:
return HttpResponse()
elif action == "unenroll":
if configuration_helpers.get_value(
"DISABLE_UNENROLLMENT",
Expand Down

0 comments on commit 3101bb7

Please sign in to comment.