From d42377501210e94969ff25eb5526eec94ccde3ca Mon Sep 17 00:00:00 2001 From: Feanil Patel Date: Tue, 18 Mar 2025 17:13:39 -0400 Subject: [PATCH] test: Replace calls to reverse('courseware') We want to remove this page and URL endpoint so we're removing all the references in the code that might point to this page. It was replaced by the sequences page in the Learning MFE years ago but the old pages were never cleaned up. We are replacing the calls with the URL for the courseware in the learning MFE. See https://github.com/openedx/edx-platform/issues/35803 for more details. --- common/djangoapps/student/tests/tests.py | 17 +++++++++-------- common/djangoapps/student/views/management.py | 5 +++-- lms/djangoapps/commerce/api/v0/views.py | 4 ++-- lms/djangoapps/course_wiki/tests/tests.py | 7 ++++--- .../user_api/tests/test_middleware.py | 4 ++++ openedx/features/course_experience/__init__.py | 4 +++- 6 files changed, 25 insertions(+), 16 deletions(-) diff --git a/common/djangoapps/student/tests/tests.py b/common/djangoapps/student/tests/tests.py index c640462acf..c2e6d3b2aa 100644 --- a/common/djangoapps/student/tests/tests.py +++ b/common/djangoapps/student/tests/tests.py @@ -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): diff --git a/common/djangoapps/student/views/management.py b/common/djangoapps/student/views/management.py index 02940da78f..4cf8fad8ae 100644 --- a/common/djangoapps/student/views/management.py +++ b/common/djangoapps/student/views/management.py @@ -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": diff --git a/lms/djangoapps/commerce/api/v0/views.py b/lms/djangoapps/commerce/api/v0/views.py index 1022173503..5238b842e9 100644 --- a/lms/djangoapps/commerce/api/v0/views.py +++ b/lms/djangoapps/commerce/api/v0/views.py @@ -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), }, ) diff --git a/lms/djangoapps/course_wiki/tests/tests.py b/lms/djangoapps/course_wiki/tests/tests.py index 7fc86947d4..7821f659d9 100644 --- a/lms/djangoapps/course_wiki/tests/tests.py +++ b/lms/djangoapps/course_wiki/tests/tests.py @@ -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 diff --git a/openedx/core/djangoapps/user_api/tests/test_middleware.py b/openedx/core/djangoapps/user_api/tests/test_middleware.py index 836e6d9465..e19a115286 100644 --- a/openedx/core/djangoapps/user_api/tests/test_middleware.py +++ b/openedx/core/djangoapps/user_api/tests/test_middleware.py @@ -7,11 +7,15 @@ from django.test import TestCase from django.test.client import RequestFactory 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 diff --git a/openedx/features/course_experience/__init__.py b/openedx/features/course_experience/__init__.py index a45d863e09..3f4c4d3fef 100644 --- a/openedx/features/course_experience/__init__.py +++ b/openedx/features/course_experience/__init__.py @@ -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')