diff --git a/cms/djangoapps/models/settings/course_metadata.py b/cms/djangoapps/models/settings/course_metadata.py index f8ca9c534b..ef8129ecea 100644 --- a/cms/djangoapps/models/settings/course_metadata.py +++ b/cms/djangoapps/models/settings/course_metadata.py @@ -50,6 +50,7 @@ class CourseMetadata(object): 'is_proctored_enabled', 'is_time_limited', 'is_practice_exam', + 'self_paced' ] @classmethod diff --git a/common/lib/xmodule/xmodule/course_module.py b/common/lib/xmodule/xmodule/course_module.py index ecec841ee9..1b52885361 100644 --- a/common/lib/xmodule/xmodule/course_module.py +++ b/common/lib/xmodule/xmodule/course_module.py @@ -928,6 +928,17 @@ class CourseFields(object): scope=Scope.settings, ) + self_paced = Boolean( + display_name=_("Self Paced"), + help=_( + "Set this to \"true\" to mark this course as self-paced. Self-paced courses do not have " + "due dates for assignments, and students can progress through the course at any rate before " + "the course ends." + ), + default=False, + scope=Scope.settings + ) + class CourseModule(CourseFields, SequenceModule): # pylint: disable=abstract-method """ diff --git a/common/lib/xmodule/xmodule/tests/test_course_module.py b/common/lib/xmodule/xmodule/tests/test_course_module.py index db594abe09..23c0f330ed 100644 --- a/common/lib/xmodule/xmodule/tests/test_course_module.py +++ b/common/lib/xmodule/xmodule/tests/test_course_module.py @@ -354,6 +354,17 @@ class TeamsConfigurationTestCase(unittest.TestCase): self.assertEqual(self.course.teams_topics, topics) +class SelfPacedTestCase(unittest.TestCase): + """Tests for self-paced courses.""" + + def setUp(self): + super(SelfPacedTestCase, self).setUp() + self.course = get_dummy_course('2012-12-02T12:00') + + def test_default(self): + self.assertFalse(self.course.self_paced) + + class CourseDescriptorTestCase(unittest.TestCase): """ Tests for a select few functions from CourseDescriptor.