diff --git a/common/djangoapps/student/tests/tests.py b/common/djangoapps/student/tests/tests.py index 49dd182c2d..e61fc82403 100644 --- a/common/djangoapps/student/tests/tests.py +++ b/common/djangoapps/student/tests/tests.py @@ -34,6 +34,7 @@ from openedx.core.djangolib.testing.utils import CacheIsolationTestCase from openedx.core.djangoapps.programs.models import ProgramsApiConfig from openedx.core.djangoapps.programs.tests import factories as programs_factories from openedx.core.djangoapps.programs.tests.mixins import ProgramsApiConfigMixin +from openedx.core.djangoapps.site_configuration.tests.mixins import SiteMixin import shoppingcart # pylint: disable=import-error from student.models import ( anonymous_id_for_user, user_by_anonymous_id, CourseEnrollment, @@ -548,6 +549,64 @@ class DashboardTest(ModuleStoreTestCase): return complete_course_mode_info(self.course.id, enrollment) +@ddt.ddt +class DashboardTestsWithSiteOverrides(SiteMixin, ModuleStoreTestCase): + """ + Tests for site settings overrides used when rendering the dashboard view + """ + + def setUp(self): + super(DashboardTestsWithSiteOverrides, self).setUp() + self.org = 'fakeX' + self.course = CourseFactory.create(org=self.org) + self.user = UserFactory.create(username='jack', email='jack@fake.edx.org', password='test') + CourseModeFactory.create(mode_slug='no-id-professional', course_id=self.course.id) + CourseEnrollment.enroll(self.user, self.course.location.course_key, mode='no-id-professional') + cache.clear() + + @unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms') + @patch.dict("django.conf.settings.FEATURES", {'ENABLE_VERIFIED_CERTIFICATES': False}) + @ddt.data( + ('testserver1.com', {'ENABLE_VERIFIED_CERTIFICATES': True}), + ('testserver2.com', {'ENABLE_VERIFIED_CERTIFICATES': True, 'DISPLAY_COURSE_MODES_ON_DASHBOARD': True}), + ) + @ddt.unpack + def test_course_mode_visible(self, site_domain, site_configuration_values): + """ + Test that the course mode for courses is visible on the dashboard + when settings have been overridden by site configuration. + """ + site_configuration_values.update({ + 'SITE_NAME': site_domain, + 'course_org_filter': self.org + }) + self.set_up_site(site_domain, site_configuration_values) + self.client.login(username='jack', password='test') + response = self.client.get(reverse('dashboard')) + self.assertContains(response, 'class="course professional"') + + @unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms') + @patch.dict("django.conf.settings.FEATURES", {'ENABLE_VERIFIED_CERTIFICATES': False}) + @ddt.data( + ('testserver3.com', {'ENABLE_VERIFIED_CERTIFICATES': False}), + ('testserver4.com', {'DISPLAY_COURSE_MODES_ON_DASHBOARD': False}), + ) + @ddt.unpack + def test_course_mode_invisible(self, site_domain, site_configuration_values): + """ + Test that the course mode for courses is invisible on the dashboard + when settings have been overridden by site configuration. + """ + site_configuration_values.update({ + 'SITE_NAME': site_domain, + 'course_org_filter': self.org + }) + self.set_up_site(site_domain, site_configuration_values) + self.client.login(username='jack', password='test') + response = self.client.get(reverse('dashboard')) + self.assertNotContains(response, 'class="course professional"') + + class UserSettingsEventTestMixin(EventTestMixin): """ Mixin for verifying that user setting events were emitted during a test. diff --git a/common/djangoapps/student/views.py b/common/djangoapps/student/views.py index f3ad650f92..73f74430da 100644 --- a/common/djangoapps/student/views.py +++ b/common/djangoapps/student/views.py @@ -575,6 +575,14 @@ def dashboard(request): user = request.user platform_name = configuration_helpers.get_value("platform_name", settings.PLATFORM_NAME) + enable_verified_certificates = configuration_helpers.get_value( + 'ENABLE_VERIFIED_CERTIFICATES', + settings.FEATURES.get('ENABLE_VERIFIED_CERTIFICATES') + ) + display_course_modes_on_dashboard = configuration_helpers.get_value( + 'DISPLAY_COURSE_MODES_ON_DASHBOARD', + settings.FEATURES.get('DISPLAY_COURSE_MODES_ON_DASHBOARD', True) + ) # we want to filter and only show enrollments for courses within # the 'ORG' defined in configuration. @@ -767,6 +775,7 @@ def dashboard(request): 'programs_by_run': programs_by_run, 'show_program_listing': ProgramsApiConfig.current().show_program_listing, 'disable_courseware_js': True, + 'display_course_modes_on_dashboard': enable_verified_certificates and display_course_modes_on_dashboard, } ecommerce_service = EcommerceService() diff --git a/lms/templates/dashboard.html b/lms/templates/dashboard.html index 1beaa56c4a..b92099ff48 100644 --- a/lms/templates/dashboard.html +++ b/lms/templates/dashboard.html @@ -99,7 +99,7 @@ from openedx.core.djangolib.markup import HTML, Text <% course_verification_status = verification_status_by_course.get(enrollment.course_id, {}) %> <% course_requirements = courses_requirements_not_met.get(enrollment.course_id) %> <% related_programs = programs_by_run.get(unicode(enrollment.course_id)) %> - <%include file = 'dashboard/_dashboard_course_listing.html' args="course_overview=enrollment.course_overview, enrollment=enrollment, show_courseware_link=show_courseware_link, cert_status=cert_status, can_unenroll=can_unenroll, credit_status=credit_status, show_email_settings=show_email_settings, course_mode_info=course_mode_info, show_refund_option=show_refund_option, is_paid_course=is_paid_course, is_course_blocked=is_course_blocked, verification_status=course_verification_status, course_requirements=course_requirements, dashboard_index=dashboard_index, share_settings=share_settings, user=user, related_programs=related_programs" /> + <%include file='dashboard/_dashboard_course_listing.html' args='course_overview=enrollment.course_overview, enrollment=enrollment, show_courseware_link=show_courseware_link, cert_status=cert_status, can_unenroll=can_unenroll, credit_status=credit_status, show_email_settings=show_email_settings, course_mode_info=course_mode_info, show_refund_option=show_refund_option, is_paid_course=is_paid_course, is_course_blocked=is_course_blocked, verification_status=course_verification_status, course_requirements=course_requirements, dashboard_index=dashboard_index, share_settings=share_settings, user=user, related_programs=related_programs, display_course_modes_on_dashboard=display_course_modes_on_dashboard' /> % endfor diff --git a/lms/templates/dashboard/_dashboard_course_listing.html b/lms/templates/dashboard/_dashboard_course_listing.html index 52637a3ade..6cf070ae8a 100644 --- a/lms/templates/dashboard/_dashboard_course_listing.html +++ b/lms/templates/dashboard/_dashboard_course_listing.html @@ -1,4 +1,4 @@ -<%page args="course_overview, enrollment, show_courseware_link, cert_status, can_unenroll, credit_status, show_email_settings, course_mode_info, show_refund_option, is_paid_course, is_course_blocked, verification_status, course_requirements, dashboard_index, share_settings, related_programs" expression_filter="h"/> +<%page args="course_overview, enrollment, show_courseware_link, cert_status, can_unenroll, credit_status, show_email_settings, course_mode_info, show_refund_option, is_paid_course, is_course_blocked, verification_status, course_requirements, dashboard_index, share_settings, related_programs, display_course_modes_on_dashboard" expression_filter="h"/> <%! import urllib @@ -36,7 +36,7 @@ from student.helpers import ( <%namespace name='static' file='../static_content.html'/>