diff --git a/lms/djangoapps/instructor/tests/test_legacy_email.py b/lms/djangoapps/instructor/tests/test_legacy_email.py deleted file mode 100644 index a740a2ef15..0000000000 --- a/lms/djangoapps/instructor/tests/test_legacy_email.py +++ /dev/null @@ -1,144 +0,0 @@ -""" -Unit tests for email feature flag in legacy instructor dashboard. -Additionally tests that bulk email is always disabled for non-Mongo -backed courses, regardless of email feature flag, and that the -view is conditionally available when Course Auth is turned on. -""" -from django.test.utils import override_settings -from django.conf import settings -from django.core.urlresolvers import reverse -from mock import patch - -from xmodule.modulestore.tests.django_utils import TEST_DATA_MOCK_MODULESTORE -from student.tests.factories import AdminFactory -from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase -from xmodule.modulestore.tests.factories import CourseFactory -from xmodule.modulestore import ModuleStoreEnum - -from bulk_email.models import CourseAuthorization - - -@override_settings(MODULESTORE=TEST_DATA_MOCK_MODULESTORE) -class TestInstructorDashboardEmailView(ModuleStoreTestCase): - """ - Check for email view displayed with flag - """ - def setUp(self): - self.course = CourseFactory.create() - - # Create instructor account - instructor = AdminFactory.create() - self.client.login(username=instructor.username, password="test") - - # URL for instructor dash - self.url = reverse('instructor_dashboard_legacy', kwargs={'course_id': self.course.id.to_deprecated_string()}) - # URL for email view - self.email_link = 'Email' - - def tearDown(self): - """ - Undo all patches. - """ - patch.stopall() - - @patch.dict(settings.FEATURES, {'ENABLE_INSTRUCTOR_EMAIL': True, 'REQUIRE_COURSE_EMAIL_AUTH': False}) - def test_email_flag_true(self): - # Assert that the URL for the email view is in the response - response = self.client.get(self.url) - self.assertTrue(self.email_link in response.content) - - # Select the Email view of the instructor dash - session = self.client.session - session[u'idash_mode:{0}'.format(self.course.location.course_key.to_deprecated_string())] = 'Email' - session.save() - response = self.client.get(self.url) - - # Ensure we've selected the view properly and that the send_to field is present. - selected_email_link = 'Email' - self.assertTrue(selected_email_link in response.content) - send_to_label = '' - self.assertTrue(send_to_label in response.content) - - @patch.dict(settings.FEATURES, {'ENABLE_INSTRUCTOR_EMAIL': True, 'REQUIRE_COURSE_EMAIL_AUTH': True}) - def test_email_flag_unauthorized(self): - # Assert that the URL for the email view is not in the response - # email is enabled, but this course is not authorized to send email - response = self.client.get(self.url) - self.assertFalse(self.email_link in response.content) - - @patch.dict(settings.FEATURES, {'ENABLE_INSTRUCTOR_EMAIL': True, 'REQUIRE_COURSE_EMAIL_AUTH': True}) - def test_email_flag_authorized(self): - # Assert that the URL for the email view is in the response - # email is enabled, and this course is authorized to send email - - # Assert that instructor email is not enabled for this course - self.assertFalse(CourseAuthorization.instructor_email_enabled(self.course.id)) - response = self.client.get(self.url) - self.assertFalse(self.email_link in response.content) - - # Authorize the course to use email - cauth = CourseAuthorization(course_id=self.course.id, email_enabled=True) - cauth.save() - - # Assert that instructor email is enabled for this course - self.assertTrue(CourseAuthorization.instructor_email_enabled(self.course.id)) - response = self.client.get(self.url) - self.assertTrue(self.email_link in response.content) - - @patch.dict(settings.FEATURES, {'ENABLE_INSTRUCTOR_EMAIL': False}) - def test_email_flag_false(self): - # Assert that the URL for the email view is not in the response - response = self.client.get(self.url) - self.assertFalse(self.email_link in response.content) - - @patch.dict(settings.FEATURES, {'ENABLE_INSTRUCTOR_EMAIL': True}) - def test_email_flag_true_xml_store(self): - # If the enable email setting is enabled, but this is an XML backed course, - # the email view shouldn't be available on the instructor dashboard. - - # The course factory uses a MongoModuleStore backing, so patch the - # `get_modulestore_type` method to pretend to be XML-backed. - # This is OK; we're simply testing that the `is_mongo_modulestore_type` flag - # in `instructor/views/legacy.py` is doing the correct thing. - - with patch('xmodule.modulestore.mongo.base.MongoModuleStore.get_modulestore_type') as mock_modulestore: - mock_modulestore.return_value = ModuleStoreEnum.Type.xml - - # Assert that the URL for the email view is not in the response - response = self.client.get(self.url) - self.assertFalse(self.email_link in response.content) - - @patch.dict(settings.FEATURES, {'ENABLE_INSTRUCTOR_EMAIL': True}) - def test_send_mail_unauthorized(self): - """ Test 'Send email' action returns an error if course is not authorized to send email. """ - - response = self.client.post( - self.url, { - 'action': 'Send email', - 'to_option': 'all', - 'subject': "Welcome to the course!", - 'message': "Lets start with an introduction!" - } - ) - self.assertContains(response, "Email is not enabled for this course.") - - @patch.dict(settings.FEATURES, {'ENABLE_INSTRUCTOR_EMAIL': True}) - def test_send_mail_authorized(self): - """ Test 'Send email' action when course is authorized to send email. """ - - course_authorization = CourseAuthorization(course_id=self.course.id, email_enabled=True) - course_authorization.save() - - session = self.client.session - session[u'idash_mode:{0}'.format(self.course.location.course_key.to_deprecated_string())] = 'Email' - session.save() - - response = self.client.post( - self.url, { - 'action': 'Send email', - 'to_option': 'all', - 'subject': 'Welcome to the course!', - 'message': 'Lets start with an introduction!', - } - ) - self.assertContains(response, "Your email was successfully queued for sending.") diff --git a/lms/djangoapps/instructor/views/legacy.py b/lms/djangoapps/instructor/views/legacy.py index 4276a8c067..e5b7da7da8 100644 --- a/lms/djangoapps/instructor/views/legacy.py +++ b/lms/djangoapps/instructor/views/legacy.py @@ -58,8 +58,7 @@ from instructor_task.api import ( get_instructor_task_history, submit_rescore_problem_for_all_students, submit_rescore_problem_for_student, - submit_reset_problem_attempts_for_all_students, - submit_bulk_course_email + submit_reset_problem_attempts_for_all_students ) from instructor_task.views import get_task_completion_info from edxmako.shortcuts import render_to_response, render_to_string @@ -445,55 +444,6 @@ def instructor_dashboard(request, course_id): ret = _do_enroll_students(course, course_key, students, secure=secure, overload=overload) datatable = ret['datatable'] - #---------------------------------------- - # email - - elif action == 'Send email': - email_to_option = request.POST.get("to_option") - email_subject = request.POST.get("subject") - html_message = request.POST.get("message") - - if bulk_email_is_enabled_for_course(course_key): - try: - # Create the CourseEmail object. This is saved immediately, so that - # any transaction that has been pending up to this point will also be - # committed. - email = CourseEmail.create( - course_key.to_deprecated_string(), request.user, email_to_option, email_subject, html_message - ) - - # Submit the task, so that the correct InstructorTask object gets created (for monitoring purposes) - submit_bulk_course_email(request, course_key, email.id) # pylint: disable=no-member - - except Exception as err: # pylint: disable=broad-except - # Catch any errors and deliver a message to the user - error_msg = "Failed to send email! ({0})".format(err) - msg += "" + error_msg + "" - log.exception(error_msg) - - else: - # If sending the task succeeds, deliver a success message to the user. - if email_to_option == "all": - text = _( - "Your email was successfully queued for sending. " - "Please note that for large classes, it may take up to an hour " - "(or more, if other courses are simultaneously sending email) " - "to send all emails." - ) - else: - text = _('Your email was successfully queued for sending.') - email_msg = '
{text}
${email_msg}
- %endif - -${_("Please try not to email students more than once per week. Important things to consider before sending:")}
-${_("CAUTION!")} - ${_("Once the 'Send Email' button is clicked, your email will be queued for sending.")} - ${_("A queued email CANNOT be cancelled.")}
-These email actions run in the background, and status for active email tasks will appear in a table below. - To see status for all bulk email tasks submitted for this course, click on this button: -
-- -
+${_("To send email, please visit the 'Email' section of the instructor dashboard.")}
%endif