22Tests for reset deadlines endpoint.
33"""
44import datetime
5- import ddt
65
6+ import ddt
77from django .urls import reverse
88from django .utils import timezone
9+ from edx_toggles .toggles .testutils import override_waffle_flag
910
1011from common .djangoapps .course_modes .models import CourseMode
1112from common .djangoapps .student .models import CourseEnrollment
1213from common .djangoapps .util .testing import EventTestMixin
13- from lms .djangoapps .courseware .tests .helpers import MasqueradeMixin
1414from lms .djangoapps .course_home_api .tests .utils import BaseCourseHomeTests
15+ from lms .djangoapps .courseware .tests .helpers import MasqueradeMixin
1516from openedx .core .djangoapps .schedules .models import Schedule
17+ from openedx .features .course_experience import RELATIVE_DATES_DISABLE_RESET_FLAG , RELATIVE_DATES_FLAG
1618from xmodule .modulestore .tests .factories import CourseFactory # lint-amnesty, pylint: disable=wrong-import-order
1719
1820
@@ -25,17 +27,22 @@ def setUp(self): # pylint: disable=arguments-differ
2527 # Need to supply tracker name for the EventTestMixin. Also, EventTestMixin needs to come
2628 # first in class inheritance so the setUp call here appropriately works
2729 super ().setUp ('openedx.features.course_experience.api.v1.views.tracker' )
30+ self .course = CourseFactory .create (self_paced = True , start = timezone .now () - datetime .timedelta (days = 1000 ))
2831
2932 def test_reset_deadlines (self ):
30- CourseEnrollment .enroll (self .user , self .course .id , CourseMode .VERIFIED )
33+ enrollment = CourseEnrollment .enroll (self .user , self .course .id , CourseMode .VERIFIED )
34+ enrollment .schedule .start_date = timezone .now () - datetime .timedelta (days = 100 )
35+ enrollment .schedule .save ()
3136 # Test body with incorrect body param (course_key is required)
3237 response = self .client .post (reverse ('course-experience-reset-course-deadlines' ), {'course' : self .course .id })
3338 assert response .status_code == 400
39+ assert enrollment .schedule == Schedule .objects .get (id = enrollment .schedule .id )
3440 self .assert_no_events_were_emitted ()
3541
3642 # Test correct post body
3743 response = self .client .post (reverse ('course-experience-reset-course-deadlines' ), {'course_key' : self .course .id })
3844 assert response .status_code == 200
45+ assert enrollment .schedule .start_date < Schedule .objects .get (id = enrollment .schedule .id ).start_date
3946 self .assert_event_emitted (
4047 'edx.ui.lms.reset_deadlines.clicked' ,
4148 courserun_key = str (self .course .id ),
@@ -45,33 +52,44 @@ def test_reset_deadlines(self):
4552 user_id = self .user .id ,
4653 )
4754
55+ @override_waffle_flag (RELATIVE_DATES_FLAG , active = True )
56+ @override_waffle_flag (RELATIVE_DATES_DISABLE_RESET_FLAG , active = True )
57+ def test_reset_deadlines_disabled (self ):
58+ enrollment = CourseEnrollment .enroll (self .user , self .course .id , CourseMode .VERIFIED )
59+ enrollment .schedule .start_date = timezone .now () - datetime .timedelta (days = 100 )
60+ enrollment .schedule .save ()
61+
62+ response = self .client .post (reverse ('course-experience-reset-course-deadlines' ), {'course_key' : self .course .id })
63+ assert response .status_code == 200
64+ assert enrollment .schedule == Schedule .objects .get (id = enrollment .schedule .id )
65+ self .assert_no_events_were_emitted ()
66+
4867 def test_reset_deadlines_with_masquerade (self ):
4968 """ Staff users should be able to masquerade as a learner and reset the learner's schedule """
50- course = CourseFactory .create (self_paced = True , start = timezone .now () - datetime .timedelta (days = 1 ))
5169 student_username = self .user .username
5270 student_user_id = self .user .id
53- student_enrollment = CourseEnrollment .enroll (self .user , course .id )
71+ student_enrollment = CourseEnrollment .enroll (self .user , self . course .id )
5472 student_enrollment .schedule .start_date = timezone .now () - datetime .timedelta (days = 100 )
5573 student_enrollment .schedule .save ()
5674
57- staff_enrollment = CourseEnrollment .enroll (self .staff_user , course .id )
75+ staff_enrollment = CourseEnrollment .enroll (self .staff_user , self . course .id )
5876 staff_enrollment .schedule .start_date = timezone .now () - datetime .timedelta (days = 30 )
5977 staff_enrollment .schedule .save ()
6078
6179 self .switch_to_staff ()
62- self .update_masquerade (course = course , username = student_username )
80+ self .update_masquerade (course = self . course , username = student_username )
6381
64- self .client .post (reverse ('course-experience-reset-course-deadlines' ), {'course_key' : course .id })
82+ self .client .post (reverse ('course-experience-reset-course-deadlines' ), {'course_key' : self . course .id })
6583 updated_schedule = Schedule .objects .get (id = student_enrollment .schedule .id )
6684 assert updated_schedule .start_date .date () == datetime .datetime .today ().date ()
6785 updated_staff_schedule = Schedule .objects .get (id = staff_enrollment .schedule .id )
6886 assert updated_staff_schedule .start_date == staff_enrollment .schedule .start_date
6987 self .assert_event_emitted (
7088 'edx.ui.lms.reset_deadlines.clicked' ,
71- courserun_key = str (course .id ),
89+ courserun_key = str (self . course .id ),
7290 is_masquerading = True ,
7391 is_staff = False ,
74- org_key = course .org ,
92+ org_key = self . course .org ,
7593 user_id = student_user_id ,
7694 )
7795
0 commit comments