diff --git a/lms/djangoapps/instructor/tests/test_tools.py b/lms/djangoapps/instructor/tests/test_tools.py index 4de2354726..bad04525a0 100644 --- a/lms/djangoapps/instructor/tests/test_tools.py +++ b/lms/djangoapps/instructor/tests/test_tools.py @@ -268,6 +268,16 @@ class TestSetDueDateExtension(ModuleStoreTestCase): tools.set_due_date_extension(self.course, self.week1, self.user, None) self.assertEqual(self.week1.due, self.due) + def test_reset_due_date_extension_with_no_enrollment(self): + """ + Tests that DashboardError is raised when trying to extend due date + for a block given the user is not enrolled in the course. + """ + user = UserFactory.create() + extended = datetime.datetime(2013, 12, 25, 0, 0, tzinfo=UTC) + with self.assertRaises(tools.DashboardError): + tools.set_due_date_extension(self.course, self.week3, user, extended) + class TestDataDumps(ModuleStoreTestCase): """ diff --git a/lms/djangoapps/instructor/views/tools.py b/lms/djangoapps/instructor/views/tools.py index d630bd2e6d..70c8f7a0a8 100644 --- a/lms/djangoapps/instructor/views/tools.py +++ b/lms/djangoapps/instructor/views/tools.py @@ -17,7 +17,7 @@ from pytz import UTC from six import string_types, text_type from six.moves import zip -from student.models import get_user_by_username_or_email +from student.models import get_user_by_username_or_email, CourseEnrollment class DashboardError(Exception): @@ -156,9 +156,16 @@ def title_or_url(node): def set_due_date_extension(course, unit, student, due_date, actor=None, reason=''): """ - Sets a due date extension. Raises DashboardError if the unit or extended - due date is invalid. + Sets a due date extension. + + Raises: + DashboardError if the unit or extended, due date is invalid or user is + not enrolled in the course. """ + mode, __ = CourseEnrollment.enrollment_mode_for_user(user=student, course_id=six.text_type(course.id)) + if not mode: + raise DashboardError(_("Could not find student enrollment in the course.")) + if due_date: try: api.set_date_for_block(course.id, unit.location, 'due', due_date, user=student, reason=reason, actor=actor)