11"""
22Exam Settings View Tests
33"""
4- from unittest import SkipTest
5- from unittest .mock import patch
6-
74import ddt
85import lxml
96from django .conf import settings
129
1310from cms .djangoapps .contentstore import toggles
1411from cms .djangoapps .contentstore .tests .utils import CourseTestCase
15- from cms .djangoapps .contentstore .utils import get_proctored_exam_settings_url , reverse_course_url
12+ from cms .djangoapps .contentstore .utils import reverse_course_url
1613from common .djangoapps .util .testing import UrlResetMixin
1714
1815
@@ -55,7 +52,6 @@ def _get_exam_settings_alert_text(raw_html_content):
5552 "settings_handler" ,
5653 "group_configurations_list_handler" ,
5754 "grading_handler" ,
58- "advanced_settings_handler"
5955 )
6056 def test_view_without_exam_settings_enabled (self , handler ):
6157 """
@@ -72,7 +68,6 @@ def test_view_without_exam_settings_enabled(self, handler):
7268 "settings_handler" ,
7369 "group_configurations_list_handler" ,
7470 "grading_handler" ,
75- "advanced_settings_handler"
7671 )
7772 def test_view_with_exam_settings_enabled (self , handler ):
7873 """
@@ -84,147 +79,3 @@ def test_view_with_exam_settings_enabled(self, handler):
8479 self .assertEqual (resp .status_code , 200 ) # noqa: PT009
8580 self .assertContains (resp , 'Proctored Exam Settings' )
8681
87- @override_settings (
88- PROCTORING_BACKENDS = {
89- 'DEFAULT' : 'test_proctoring_provider' ,
90- 'test_proctoring_provider' : {"requires_escalation_email" : True }
91- },
92- )
93- @ddt .data (
94- "advanced_settings_handler" ,
95- )
96- def test_exam_settings_alert_with_exam_settings_enabled (self , page_handler ):
97- """
98- An alert should appear if current exam settings are invalid.
99- The exam settings alert should direct users to the exam settings page.
100- """
101- # create an error by setting 'requires_escalation_email' as 'True' and not setting
102- # the (required) escalation contact
103- self .course .proctoring_provider = 'test_proctoring_provider'
104- self .course .enable_proctored_exams = True
105- self .save_course ()
106-
107- # course_handler raise 404 for old mongo course
108- if self .course .id .deprecated :
109- raise SkipTest ("course_handler raise 404 for old mongo course" )
110-
111- url = reverse_course_url (page_handler , self .course .id )
112- resp = self .client .get (url , HTTP_ACCEPT = 'text/html' )
113- alert_text = self ._get_exam_settings_alert_text (resp .content )
114- assert (
115- 'This course has proctored exam settings that are incomplete or invalid.'
116- in alert_text
117- )
118- assert (
119- 'To update these settings go to the Proctored Exam Settings page.'
120- in alert_text
121- )
122-
123- @override_settings (
124- PROCTORING_BACKENDS = {
125- 'DEFAULT' : 'test_proctoring_provider' ,
126- 'test_proctoring_provider' : {"requires_escalation_email" : True }
127- },
128- )
129- @ddt .data (
130- "advanced_settings_handler" ,
131- )
132- @override_waffle_flag (toggles .LEGACY_STUDIO_EXAM_SETTINGS , True )
133- def test_exam_settings_alert_with_exam_settings_disabled (self , page_handler ):
134- """
135- An alert should appear if current exam settings are invalid.
136- The exam settings alert should direct users to the advanced settings page
137- if the exam settings feature is not available.
138- """
139- # create an error by setting 'requires_escalation_email' as 'True' and not setting
140- # the (required) escalation contact
141- self .course .proctoring_provider = 'test_proctoring_provider'
142- self .course .enable_proctored_exams = True
143- self .save_course ()
144-
145- # course_handler raise 404 for old mongo course
146- if self .course .id .deprecated and page_handler == 'course_handler' :
147- raise SkipTest ("course_handler raise 404 for old mongo course" )
148- url = reverse_course_url (page_handler , self .course .id )
149- resp = self .client .get (url , HTTP_ACCEPT = 'text/html' )
150- alert_text = self ._get_exam_settings_alert_text (resp .content )
151- assert (
152- 'This course has proctored exam settings that are incomplete or invalid.'
153- in alert_text
154- )
155- self .maxDiff = None
156- if page_handler == 'advanced_settings_handler' :
157- assert (
158- 'You will be unable to make changes until the following settings are updated on the page below.'
159- in alert_text
160- )
161- else :
162- assert 'To update these settings go to the Advanced Settings page.' in alert_text
163-
164- @override_settings (
165- PROCTORING_BACKENDS = {
166- 'DEFAULT' : 'test_proctoring_provider' ,
167- 'test_proctoring_provider' : {},
168- },
169- )
170- @ddt .data (
171- "advanced_settings_handler" ,
172- )
173- def test_invalid_provider_alert (self , page_handler ):
174- """
175- An alert should appear if the course has a proctoring provider that is not valid.
176- """
177- # create an error by setting an invalid proctoring provider
178- self .course .proctoring_provider = 'invalid_provider'
179- self .course .enable_proctored_exams = True
180- self .save_course ()
181-
182- url = reverse_course_url (page_handler , self .course .id )
183- resp = self .client .get (url , HTTP_ACCEPT = 'text/html' )
184- alert_text = self ._get_exam_settings_alert_text (resp .content )
185- assert (
186- 'This course has proctored exam settings that are incomplete or invalid.'
187- in alert_text
188- )
189- assert (
190- 'The proctoring provider configured for this course, \' invalid_provider\' , is not valid.'
191- in alert_text
192- )
193-
194- @ddt .data (
195- "advanced_settings_handler" ,
196- )
197- def test_exam_settings_alert_not_shown (self , page_handler ):
198- """
199- Alert should not be visible if no proctored exam setting error exists
200- """
201- # course_handler raise 404 for old mongo course
202- if self .course .id .deprecated and page_handler == 'course_handler' :
203- raise SkipTest ("course_handler raise 404 for old mongo course" )
204- url = reverse_course_url (page_handler , self .course .id )
205- resp = self .client .get (url , HTTP_ACCEPT = 'text/html' )
206- parsed_html = lxml .html .fromstring (resp .content )
207- alert_nodes = parsed_html .find_class ('exam-settings-alert' )
208- assert len (alert_nodes ) == 0
209-
210- @patch ('cms.djangoapps.models.settings.course_metadata.CourseMetadata.validate_proctoring_settings' )
211- def test_proctoring_link_is_visible (self , mock_validate_proctoring_settings ):
212-
213- """
214- Test to check proctored exam settings mfe url is rendering properly
215- """
216- mock_validate_proctoring_settings .return_value = [
217- {
218- 'key' : 'proctoring_provider' ,
219- 'message' : 'error message' ,
220- 'model' : {'display_name' : 'proctoring_provider' }
221- },
222- {
223- 'key' : 'proctoring_provider' ,
224- 'message' : 'error message' ,
225- 'model' : {'display_name' : 'proctoring_provider' }
226- }
227- ]
228- response = self .client .get_html (reverse_course_url ('advanced_settings_handler' , self .course .id ))
229- proctored_exam_settings_url = get_proctored_exam_settings_url (self .course .id )
230- self .assertContains (response , proctored_exam_settings_url , 3 )
0 commit comments