feat!: hide courses in /courses based on catalog visibility
Previously, courses were always displayed on the LMS /courses page,
independently of their catalog visibility attribute. This meant that
even with visibility="none" courses were being displayed. This was very
counter-intuitive.
With this change, courses are displayed only when their visibility is
set to "both".
This change is flagged as breaking because it has the potential to
affect course catalogs in existing platforms.
To test this change, go to http(s)://LMS/courses as an anonymous user.
Pick a visible course and go to its "advanced settings" in the studio.
Set "Course visibility in catalog" to "about" or "none". Then, clear the
cache with the following command:
./manage.py lms shell -c "from django.core.cache import cache; cache.clear()"
Open the /courses page again: the course should no longer be visible.
Close https://github.com/openedx/wg-build-test-release/issues/330
This commit is contained in:
committed by
Sarina Canelake
parent
d8303a176c
commit
bf862d89e7
@@ -22,6 +22,7 @@ from lms.djangoapps.courseware.tests.helpers import LoginEnrollmentTestCase
|
||||
from openedx.core.djangoapps.site_configuration.tests.mixins import SiteMixin
|
||||
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
|
||||
from xmodule.course_block import CATALOG_VISIBILITY_ABOUT, CATALOG_VISIBILITY_NONE
|
||||
|
||||
FEATURES_WITH_STARTDATE = settings.FEATURES.copy()
|
||||
FEATURES_WITH_STARTDATE['DISABLE_START_DATES'] = False
|
||||
@@ -201,6 +202,20 @@ class IndexPageCourseCardsSortingTests(ModuleStoreTestCase):
|
||||
display_name='Tech Beta Course',
|
||||
emit_signals=True,
|
||||
)
|
||||
self.course_with_none_visibility = CourseFactory.create(
|
||||
org='MITx',
|
||||
number='1003',
|
||||
catalog_visibility=CATALOG_VISIBILITY_NONE,
|
||||
display_name='Course with "none" catalog visibility',
|
||||
emit_signals=True,
|
||||
)
|
||||
self.course_with_about_visibility = CourseFactory.create(
|
||||
org='MITx',
|
||||
number='1003',
|
||||
catalog_visibility=CATALOG_VISIBILITY_ABOUT,
|
||||
display_name='Course with "about" catalog visibility',
|
||||
emit_signals=True,
|
||||
)
|
||||
self.factory = RequestFactory()
|
||||
|
||||
@patch('common.djangoapps.student.views.management.render_to_response', RENDER_MOCK)
|
||||
@@ -300,6 +315,15 @@ class IndexPageCourseCardsSortingTests(ModuleStoreTestCase):
|
||||
assert context['courses'][1].id == self.starting_earlier.id
|
||||
assert context['courses'][2].id == self.course_with_default_start_date.id
|
||||
|
||||
@patch('lms.djangoapps.courseware.views.views.render_to_response', RENDER_MOCK)
|
||||
def test_invisible_courses_are_not_displayed(self):
|
||||
response = self.client.get(reverse('courses'))
|
||||
((_template, context), _) = RENDER_MOCK.call_args # pylint: disable=unpacking-non-sequence
|
||||
|
||||
rendered_ids = [course.id for course in context["courses"]]
|
||||
assert self.course_with_none_visibility.id not in rendered_ids
|
||||
assert self.course_with_about_visibility.id not in rendered_ids
|
||||
|
||||
|
||||
class IndexPageProgramsTests(SiteMixin, ModuleStoreTestCase):
|
||||
"""
|
||||
|
||||
@@ -46,7 +46,11 @@ from rest_framework.response import Response
|
||||
from rest_framework.throttling import UserRateThrottle
|
||||
from token_utils.api import unpack_token_for
|
||||
from web_fragments.fragment import Fragment
|
||||
from xmodule.course_block import COURSE_VISIBILITY_PUBLIC, COURSE_VISIBILITY_PUBLIC_OUTLINE
|
||||
from xmodule.course_block import (
|
||||
COURSE_VISIBILITY_PUBLIC,
|
||||
COURSE_VISIBILITY_PUBLIC_OUTLINE,
|
||||
CATALOG_VISIBILITY_CATALOG_AND_ABOUT,
|
||||
)
|
||||
from xmodule.modulestore.django import modulestore
|
||||
from xmodule.modulestore.exceptions import ItemNotFoundError, NoPathToItem
|
||||
from xmodule.tabs import CourseTabList
|
||||
@@ -288,7 +292,10 @@ def courses(request):
|
||||
course_discovery_meanings = getattr(settings, 'COURSE_DISCOVERY_MEANINGS', {})
|
||||
set_default_filter = ENABLE_COURSE_DISCOVERY_DEFAULT_LANGUAGE_FILTER.is_enabled()
|
||||
if not settings.FEATURES.get('ENABLE_COURSE_DISCOVERY'):
|
||||
courses_list = get_courses(request.user)
|
||||
courses_list = get_courses(
|
||||
request.user,
|
||||
filter_={"catalog_visibility": CATALOG_VISIBILITY_CATALOG_AND_ABOUT},
|
||||
)
|
||||
|
||||
if configuration_helpers.get_value("ENABLE_COURSE_SORTING_BY_START_DATE",
|
||||
settings.FEATURES["ENABLE_COURSE_SORTING_BY_START_DATE"]):
|
||||
|
||||
Reference in New Issue
Block a user