def test_long_course_display_name(self): """ This test tests that courses with exorbitantly large display names can still send emails, since it appears that 320 appears to be the character length limit of from emails for Amazon SES. """ test_email = { 'action': 'Send email', 'send_to': '["myself", "staff", "learners"]', 'subject': 'test subject for self', 'message': 'test message for self' } # make display_name that's longer than 320 characters when encoded # to ascii and escaped, but shorter than 320 unicode characters long_name = u"Финансовое программирование и политика, часть 1: макроэкономические счета и анализ" course = CourseFactory.create( display_name=long_name, org="IMF", number="FPP.1x", run="2016", ) instructor = InstructorFactory(course_key=course.id) unexpected_from_addr = _get_source_address( course.id, course.display_name, course_language=None, truncate=False ) __, encoded_unexpected_from_addr = forbid_multi_line_headers( "from", unexpected_from_addr, 'utf-8' ) escaped_encoded_unexpected_from_addr = escape(encoded_unexpected_from_addr) # it's shorter than 320 characters when just encoded self.assertEqual(len(encoded_unexpected_from_addr), 318) # escaping it brings it over that limit self.assertEqual(len(escaped_encoded_unexpected_from_addr), 324) # when not escaped or encoded, it's well below 320 characters self.assertEqual(len(unexpected_from_addr), 137) self.login_as_user(instructor) send_mail_url = reverse('send_email', kwargs={'course_id': six.text_type(course.id)}) response = self.client.post(send_mail_url, test_email) self.assertTrue(json.loads(response.content.decode('utf-8'))['success']) self.assertEqual(len(mail.outbox), 1) from_email = mail.outbox[0].from_email expected_from_addr = ( u'"{course_name}" Course Staff <{course_name}[email protected]>' ).format(course_name=course.id.course) self.assertEqual( from_email, expected_from_addr ) self.assertEqual(len(from_email), 61)
def test_long_course_display_name(self): """ This test tests that courses with exorbitantly large display names can still send emails, since it appears that 320 appears to be the character length limit of from emails for Amazon SES. """ test_email = { 'action': 'Send email', 'send_to': '["myself", "staff", "learners"]', 'subject': 'test subject for self', 'message': 'test message for self' } # make display_name that's longer than 320 characters when encoded # to ascii and escaped, but shorter than 320 unicode characters long_name = u"Финансовое программирование и политика, часть 1: макроэкономические счета и анализ" course = CourseFactory.create( display_name=long_name, org="IMF", number="FPP.1x", run="2016", ) instructor = InstructorFactory(course_key=course.id) unexpected_from_addr = _get_source_address( course.id, course.display_name, course_language=None, truncate=False ) __, encoded_unexpected_from_addr = forbid_multi_line_headers( "from", unexpected_from_addr, 'utf-8' ) escaped_encoded_unexpected_from_addr = escape(encoded_unexpected_from_addr) # it's shorter than 320 characters when just encoded self.assertEqual(len(encoded_unexpected_from_addr), 318) # escaping it brings it over that limit self.assertEqual(len(escaped_encoded_unexpected_from_addr), 324) # when not escaped or encoded, it's well below 320 characters self.assertEqual(len(unexpected_from_addr), 137) self.login_as_user(instructor) send_mail_url = reverse('send_email', kwargs={'course_id': unicode(course.id)}) response = self.client.post(send_mail_url, test_email) self.assertTrue(json.loads(response.content)['success']) self.assertEqual(len(mail.outbox), 1) from_email = mail.outbox[0].from_email expected_from_addr = ( u'"{course_name}" Course Staff <{course_name}[email protected]>' ).format(course_name=course.id.course) self.assertEqual( from_email, expected_from_addr ) self.assertEqual(len(from_email), 61)
def test_long_course_display_name(self): """ This test tests that courses with exorbitantly large display names can still send emails, since it appears that 320 appears to be the character length limit of from emails for Amazon SES. """ test_email = { 'action': 'Send email', 'send_to': 'myself', 'subject': 'test subject for self', 'message': 'test message for self' } # make display_name that's longer than 320 characters when encoded # to ascii, but shorter than 320 unicode characters long_name = u"é" * 200 course = CourseFactory.create(display_name=long_name, number="bulk_email_course_name") instructor = InstructorFactory(course_key=course.id) unexpected_from_addr = _get_source_address(course.id, course.display_name, truncate=False) __, encoded_unexpected_from_addr = forbid_multi_line_headers( "from", unexpected_from_addr, 'utf-8') self.assertEqual(len(encoded_unexpected_from_addr), 748) self.assertEqual(len(unexpected_from_addr), 261) self.login_as_user(instructor) send_mail_url = reverse('send_email', kwargs={'course_id': unicode(course.id)}) response = self.client.post(send_mail_url, test_email) self.assertTrue(json.loads(response.content)['success']) self.assertEqual(len(mail.outbox), 1) from_email = mail.outbox[0].from_email expected_from_addr = ( u'"{course_name}" Course Staff <{course_name}[email protected]>' ).format(course_name=course.id.course) self.assertEqual(from_email, expected_from_addr) self.assertEqual(len(from_email), 83)