From 483cccb657f352de0cb049a7c6950db638716af6 Mon Sep 17 00:00:00 2001 From: Chris Dodge Date: Mon, 15 Dec 2014 14:11:58 -0500 Subject: [PATCH] also apply sorting rules overrides to the /courses view --- lms/djangoapps/branding/tests.py | 26 ++++++++++++++++++++++++++ lms/djangoapps/courseware/views.py | 8 +++++++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/lms/djangoapps/branding/tests.py b/lms/djangoapps/branding/tests.py index 7d4ff3460c..e0228d9d02 100644 --- a/lms/djangoapps/branding/tests.py +++ b/lms/djangoapps/branding/tests.py @@ -18,6 +18,8 @@ import student.views from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase from xmodule.modulestore.tests.factories import CourseFactory +from django.core.urlresolvers import reverse + FEATURES_WITH_STARTDATE = settings.FEATURES.copy() FEATURES_WITH_STARTDATE['DISABLE_START_DATES'] = False FEATURES_WO_STARTDATE = settings.FEATURES.copy() @@ -140,6 +142,7 @@ class IndexPageCourseCardsSortingTests(ModuleStoreTestCase): self.factory = RequestFactory() @patch('student.views.render_to_response', RENDER_MOCK) + @patch('courseware.views.render_to_response', RENDER_MOCK) def test_course_cards_sorted_by_default_sorting(self): response = self.client.get('/') self.assertEqual(response.status_code, 200) @@ -151,7 +154,19 @@ class IndexPageCourseCardsSortingTests(ModuleStoreTestCase): self.assertEqual(context['courses'][1].id, self.starting_earlier.id) self.assertEqual(context['courses'][2].id, self.course_with_default_start_date.id) + # check the /courses view + response = self.client.get(reverse('branding.views.courses')) + self.assertEqual(response.status_code, 200) + ((template, context), _) = RENDER_MOCK.call_args + self.assertEqual(template, 'courseware/courses.html') + + # Now the courses will be stored in their announcement dates. + self.assertEqual(context['courses'][0].id, self.starting_later.id) + self.assertEqual(context['courses'][1].id, self.starting_earlier.id) + self.assertEqual(context['courses'][2].id, self.course_with_default_start_date.id) + @patch('student.views.render_to_response', RENDER_MOCK) + @patch('courseware.views.render_to_response', RENDER_MOCK) @patch.dict('django.conf.settings.FEATURES', {'ENABLE_COURSE_SORTING_BY_START_DATE': True}) def test_course_cards_sorted_by_start_date_show_earliest_first(self): response = self.client.get('/') @@ -163,3 +178,14 @@ class IndexPageCourseCardsSortingTests(ModuleStoreTestCase): self.assertEqual(context['courses'][0].id, self.starting_earlier.id) self.assertEqual(context['courses'][1].id, self.starting_later.id) self.assertEqual(context['courses'][2].id, self.course_with_default_start_date.id) + + # check the /courses view as well + response = self.client.get(reverse('branding.views.courses')) + self.assertEqual(response.status_code, 200) + ((template, context), _) = RENDER_MOCK.call_args + self.assertEqual(template, 'courseware/courses.html') + + # now the courses will be sorted by their creation dates, earliest first. + self.assertEqual(context['courses'][0].id, self.starting_earlier.id) + self.assertEqual(context['courses'][1].id, self.starting_later.id) + self.assertEqual(context['courses'][2].id, self.course_with_default_start_date.id) diff --git a/lms/djangoapps/courseware/views.py b/lms/djangoapps/courseware/views.py index 802c3ef917..0a07e1f641 100644 --- a/lms/djangoapps/courseware/views.py +++ b/lms/djangoapps/courseware/views.py @@ -33,6 +33,7 @@ from markupsafe import escape from courseware import grades from courseware.access import has_access, _adjust_start_date_for_beta_testers from courseware.courses import get_courses, get_course, get_studio_url, get_course_with_access, sort_by_announcement +from courseware.courses import sort_by_start_date from courseware.masquerade import setup_masquerade from courseware.model_data import FieldDataCache from .module_render import toc_for_course, get_module_for_descriptor, get_module @@ -103,7 +104,12 @@ def courses(request): Render "find courses" page. The course selection work is done in courseware.courses. """ courses = get_courses(request.user, request.META.get('HTTP_HOST')) - courses = sort_by_announcement(courses) + + if microsite.get_value("ENABLE_COURSE_SORTING_BY_START_DATE", + settings.FEATURES["ENABLE_COURSE_SORTING_BY_START_DATE"]): + courses = sort_by_start_date(courses) + else: + courses = sort_by_announcement(courses) return render_to_response("courseware/courses.html", {'courses': courses})