From 505b2aa4d9d4544e038dddadf6dcc15daa2e0409 Mon Sep 17 00:00:00 2001 From: Peter Fogg Date: Fri, 23 Oct 2015 15:27:40 -0400 Subject: [PATCH] Disable setting course pacing during course run. Also adds improved styling for course pacing settings, and unit tests around query counts for self-paced courses. ECOM-2650 --- .../tests/test_course_settings.py | 28 +++++++++++--- .../models/settings/course_details.py | 1 + .../js/models/settings/course_details.js | 8 ++++ .../js/views/pages/container_subviews.js | 3 +- cms/static/js/views/settings/main.js | 21 +++++++--- cms/static/js/views/validation.js | 1 + cms/static/sass/views/_settings.scss | 25 ++++++++++++ cms/templates/js/publish-xblock.underscore | 32 ++++++++-------- cms/templates/settings.html | 17 +++++++-- common/lib/xmodule/xmodule/course_module.py | 10 +++++ .../test/acceptance/pages/studio/settings.py | 28 ++++++++++++-- .../tests/studio/test_studio_outline.py | 5 ++- .../studio/test_studio_settings_details.py | 20 +++++++++- .../courseware/self_paced_overrides.py | 4 ++ lms/djangoapps/courseware/tests/test_views.py | 38 ++++++++++++++++++- lms/djangoapps/courseware/testutils.py | 9 ++++- 16 files changed, 210 insertions(+), 40 deletions(-) diff --git a/cms/djangoapps/contentstore/tests/test_course_settings.py b/cms/djangoapps/contentstore/tests/test_course_settings.py index 5b65ccbf44..ee7a6644cd 100644 --- a/cms/djangoapps/contentstore/tests/test_course_settings.py +++ b/cms/djangoapps/contentstore/tests/test_course_settings.py @@ -116,11 +116,21 @@ class CourseDetailsTestCase(CourseTestCase): CourseDetails.update_from_json(self.course.id, jsondetails.__dict__, self.user).effort, jsondetails.effort, "After set effort" ) + jsondetails.self_paced = True + self.assertEqual( + CourseDetails.update_from_json(self.course.id, jsondetails.__dict__, self.user).self_paced, + jsondetails.self_paced + ) jsondetails.start_date = datetime.datetime(2010, 10, 1, 0, tzinfo=UTC()) self.assertEqual( CourseDetails.update_from_json(self.course.id, jsondetails.__dict__, self.user).start_date, jsondetails.start_date ) + jsondetails.end_date = datetime.datetime(2011, 10, 1, 0, tzinfo=UTC()) + self.assertEqual( + CourseDetails.update_from_json(self.course.id, jsondetails.__dict__, self.user).end_date, + jsondetails.end_date + ) jsondetails.course_image_name = "an_image.jpg" self.assertEqual( CourseDetails.update_from_json(self.course.id, jsondetails.__dict__, self.user).course_image_name, @@ -131,11 +141,6 @@ class CourseDetailsTestCase(CourseTestCase): CourseDetails.update_from_json(self.course.id, jsondetails.__dict__, self.user).language, jsondetails.language ) - jsondetails.self_paced = True - self.assertEqual( - CourseDetails.update_from_json(self.course.id, jsondetails.__dict__, self.user).self_paced, - jsondetails.self_paced - ) @override_settings(MKTG_URLS={'ROOT': 'dummy-root'}) def test_marketing_site_fetch(self): @@ -291,6 +296,19 @@ class CourseDetailsTestCase(CourseTestCase): self.assertContains(response, "Course Introduction Video") self.assertContains(response, "Requirements") + def test_toggle_pacing_during_course_run(self): + SelfPacedConfiguration(enabled=True).save() + self.course.start = datetime.datetime.now() + modulestore().update_item(self.course, self.user.id) + + details = CourseDetails.fetch(self.course.id) + updated_details = CourseDetails.update_from_json( + self.course.id, + dict(details.__dict__, self_paced=True), + self.user + ) + self.assertFalse(updated_details.self_paced) + @ddt.ddt class CourseDetailsViewTest(CourseTestCase): diff --git a/cms/djangoapps/models/settings/course_details.py b/cms/djangoapps/models/settings/course_details.py index ef2a0d8b89..f09ec7b1a3 100644 --- a/cms/djangoapps/models/settings/course_details.py +++ b/cms/djangoapps/models/settings/course_details.py @@ -192,6 +192,7 @@ class CourseDetails(object): dirty = True if (SelfPacedConfiguration.current().enabled + and descriptor.can_toggle_course_pacing and 'self_paced' in jsondict and jsondict['self_paced'] != descriptor.self_paced): descriptor.self_paced = jsondict['self_paced'] diff --git a/cms/static/js/models/settings/course_details.js b/cms/static/js/models/settings/course_details.js index efb3e24dcd..9703977314 100644 --- a/cms/static/js/models/settings/course_details.js +++ b/cms/static/js/models/settings/course_details.js @@ -70,6 +70,7 @@ var CourseDetails = Backbone.Model.extend({ }, _videokey_illegal_chars : /[^a-zA-Z0-9_-]/g, + set_videosource: function(newsource) { // newsource either is