Merge pull request #36430 from openedx/feanil/update_courseware_links

feanil/update courseware links
This commit is contained in:
Feanil Patel
2025-04-04 15:04:26 -04:00
committed by GitHub
7 changed files with 30 additions and 21 deletions

View File

@@ -47,6 +47,7 @@ from openedx.core.djangoapps.content.course_overviews.tests.factories import Cou
from openedx.core.djangoapps.programs.tests.mixins import ProgramsApiConfigMixin
from openedx.core.djangoapps.site_configuration.tests.mixins import SiteMixin
from openedx.core.djangolib.testing.utils import CacheIsolationTestCase, skip_unless_lms
from openedx.features.course_experience.url_helpers import make_learning_mfe_courseware_url
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase, SharedModuleStoreTestCase # lint-amnesty, pylint: disable=wrong-import-order
from xmodule.modulestore.tests.factories import CourseFactory, check_mongo_calls # lint-amnesty, pylint: disable=wrong-import-order
from xmodule.data import CertificatesDisplayBehaviors # lint-amnesty, pylint: disable=wrong-import-order
@@ -907,15 +908,15 @@ class ChangeEnrollmentViewTest(ModuleStoreTestCase):
)
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):
def test_enrollment_url_without_redirect(self):
with override_waffle_switch(REDIRECT_TO_COURSEWARE_AFTER_ENROLLMENT, False):
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') == ''
def test_enrollment_with_redirect(self):
with override_waffle_switch(REDIRECT_TO_COURSEWARE_AFTER_ENROLLMENT, True):
response = self._enroll_through_view(self.course)
data = make_learning_mfe_courseware_url(self.course.id)
assert response.content.decode('utf8') == data
def test_enroll_as_default(self):

View File

@@ -62,6 +62,7 @@ from openedx.core.djangoapps.user_authn.toggles import (
)
from openedx.core.djangolib.markup import HTML, Text
from openedx.core.lib.api.authentication import BearerAuthenticationAllowInactiveUser
from openedx.features.course_experience.url_helpers import make_learning_mfe_courseware_url
from openedx.features.discounts.applicability import FIRST_PURCHASE_DISCOUNT_OVERRIDE_FLAG
from openedx.features.enterprise_support.utils import is_enterprise_learner
from common.djangoapps.student.email_helpers import generate_activation_email_context
@@ -408,7 +409,7 @@ def change_enrollment(request, check_access=True):
return HttpResponse(redirect_url)
if CourseEntitlement.check_for_existing_entitlement_and_enroll(user=user, course_run_key=course_id):
return HttpResponse(reverse('courseware', args=[str(course_id)]))
return HttpResponse(make_learning_mfe_courseware_url(course_id))
# Check that auto enrollment is allowed for this course
# (= the course is NOT behind a paywall)
@@ -438,7 +439,7 @@ def change_enrollment(request, check_access=True):
)
if should_redirect_to_courseware_after_enrollment():
return HttpResponse(reverse('courseware', args=[str(course_id)]))
return HttpResponse(make_learning_mfe_courseware_url(course_id))
else:
return HttpResponse()
elif action == "unenroll":

View File

@@ -4,7 +4,6 @@
import logging
from urllib.parse import urljoin
from django.urls import reverse
from edx_rest_framework_extensions.auth.jwt.authentication import JwtAuthentication
from opaque_keys import InvalidKeyError
from opaque_keys.edx.keys import CourseKey
@@ -24,6 +23,7 @@ from openedx.core.djangoapps.enrollments.api import add_enrollment
from openedx.core.djangoapps.enrollments.views import EnrollmentCrossDomainSessionAuth
from openedx.core.djangoapps.user_api.preferences.api import update_email_opt_in
from openedx.core.lib.api.authentication import BearerAuthenticationAllowInactiveUser
from openedx.features.course_experience.url_helpers import make_learning_mfe_courseware_url
from ...constants import Messages
from ...http import DetailResponse
@@ -122,7 +122,7 @@ class BasketsView(APIView):
if CourseEntitlement.check_for_existing_entitlement_and_enroll(user=user, course_run_key=course_key):
return JsonResponse(
{
'redirect_destination': reverse('courseware', args=[str(course_id)]),
'redirect_destination': make_learning_mfe_courseware_url(course_id),
},
)

View File

@@ -7,6 +7,7 @@ from unittest.mock import patch
from django.urls import reverse
from lms.djangoapps.courseware.tests.tests import LoginEnrollmentTestCase
from openedx.features.course_experience.url_helpers import make_learning_mfe_courseware_url
from openedx.features.enterprise_support.tests.mixins.enterprise import EnterpriseTestConsentRequired
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase # lint-amnesty, pylint: disable=wrong-import-order
from xmodule.modulestore.tests.factories import CourseFactory # lint-amnesty, pylint: disable=wrong-import-order
@@ -121,7 +122,7 @@ class WikiRedirectTestCase(EnterpriseTestConsentRequired, LoginEnrollmentTestCas
self.create_course_page(self.toy)
course_wiki_page = reverse('wiki:get', kwargs={'path': self.toy.wiki_slug + '/'})
referer = reverse("courseware", kwargs={'course_id': str(self.toy.id)})
referer = make_learning_mfe_courseware_url(self.toy.id)
resp = self.client.get(course_wiki_page, follow=True, HTTP_REFERER=referer)
@@ -141,7 +142,7 @@ class WikiRedirectTestCase(EnterpriseTestConsentRequired, LoginEnrollmentTestCas
self.login(self.student, self.password)
course_wiki_page = reverse('wiki:get', kwargs={'path': self.toy.wiki_slug + '/'})
referer = reverse("courseware", kwargs={'course_id': str(self.toy.id)})
referer = make_learning_mfe_courseware_url(self.toy.id)
# When not enrolled, we should get a 302
resp = self.client.get(course_wiki_page, follow=False, HTTP_REFERER=referer)
@@ -195,7 +196,7 @@ class WikiRedirectTestCase(EnterpriseTestConsentRequired, LoginEnrollmentTestCas
self.create_course_page(course)
course_wiki_page = reverse('wiki:get', kwargs={'path': course.wiki_slug + '/'})
referer = reverse("courseware", kwargs={'course_id': str(course.id)})
referer = make_learning_mfe_courseware_url(self.toy.id)
resp = self.client.get(course_wiki_page, follow=True, HTTP_REFERER=referer)
assert resp.status_code == 200

View File

@@ -17,6 +17,7 @@ from xmodule.modulestore.tests.factories import CourseFactory, BlockFactory
from common.djangoapps.student.tests.factories import GlobalStaffFactory
from lms.djangoapps.courseware.tests.helpers import LoginEnrollmentTestCase, set_preview_mode
from openedx.features.course_experience import DISABLE_COURSE_OUTLINE_PAGE_FLAG
from openedx.features.course_experience.url_helpers import make_learning_mfe_courseware_url
@set_preview_mode(True)
@@ -111,7 +112,7 @@ class TestNavigation(SharedModuleStoreTestCase, LoginEnrollmentTestCase):
assert ('course-navigation' in response.content.decode('utf-8')) == accordion
self.assertTabInactive('progress', response)
self.assertTabActive('courseware', response)
self.assertTabActive(make_learning_mfe_courseware_url(self.course.id), response)
response = self.client.get(reverse('courseware_section', kwargs={
'course_id': str(self.course.id),
@@ -120,7 +121,7 @@ class TestNavigation(SharedModuleStoreTestCase, LoginEnrollmentTestCase):
}))
self.assertTabActive('progress', response)
self.assertTabInactive('courseware', response)
self.assertTabInactive(make_learning_mfe_courseware_url(self.course.id), response)
@override_settings(SESSION_INACTIVITY_TIMEOUT_IN_SECONDS=1)
def test_inactive_session_timeout(self):

View File

@@ -5,13 +5,18 @@ from unittest.mock import Mock, patch
from django.http import HttpResponse
from django.test import TestCase
from django.test.client import RequestFactory
from django.urls import reverse
from common.djangoapps.student.tests.factories import AnonymousUserFactory, UserFactory
from openedx.core.djangolib.testing.utils import skip_unless_lms
from ..middleware import UserTagsEventContextMiddleware
from ..tests.factories import UserCourseTagFactory
# This middleware only gets installed in the LMS so no need to test
# it in the CMS context.
@skip_unless_lms
class TagsMiddlewareTest(TestCase):
"""
Test the UserTagsEventContextMiddleware
@@ -25,9 +30,7 @@ class TagsMiddlewareTest(TestCase):
self.course_id = 'mock/course/id'
self.request_factory = RequestFactory()
# TODO: Make it so we can use reverse. Appears to fail depending on the order in which tests are run
#self.request = RequestFactory().get(reverse('courseware', kwargs={'course_id': self.course_id}))
self.request = RequestFactory().get(f'/courses/{self.course_id}/courseware')
self.request = RequestFactory().get(reverse('progress', kwargs={'course_id': self.course_id}))
self.request.user = self.user
self.response = Mock(spec=HttpResponse)

View File

@@ -104,7 +104,9 @@ def default_course_url(course_key):
from .url_helpers import get_learning_mfe_home_url
if DISABLE_COURSE_OUTLINE_PAGE_FLAG.is_enabled(course_key):
return reverse('courseware', args=[str(course_key)])
# Prevent a circular dependency
from openedx.features.course_experience.url_helpers import make_learning_mfe_courseware_url
return make_learning_mfe_courseware_url(course_key)
return get_learning_mfe_home_url(course_key, url_fragment='home')