mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-03 21:43:21 +00:00 
			
		
		
		
	test_send_email: Shorten tests about build_email.
Commit b7fa41601d introduced some tests
to verify the implemented changes. These tests were longer than necessary.
See https://github.com/zulip/zulip/pull/17799 for the whole discussion.
			
			
This commit is contained in:
		
				
					committed by
					
						
						Alex Vandiver
					
				
			
			
				
	
			
			
			
						parent
						
							e4ff372fc3
						
					
				
				
					commit
					cc4cc9d14f
				
			@@ -1,4 +1,4 @@
 | 
			
		||||
from smtplib import SMTP, SMTPException
 | 
			
		||||
from smtplib import SMTP, SMTPDataError, SMTPException
 | 
			
		||||
from unittest import mock
 | 
			
		||||
 | 
			
		||||
from django.core.mail.backends.locmem import EmailBackend
 | 
			
		||||
@@ -15,24 +15,8 @@ from zerver.lib.send_email import (
 | 
			
		||||
)
 | 
			
		||||
from zerver.lib.test_classes import ZulipTestCase
 | 
			
		||||
 | 
			
		||||
OVERLY_LONG_NAME = "Z̷̧̙̯͙̠͇̰̲̞̙͆́͐̅̌͐̔͑̚u̷̼͎̹̻̻̣̞͈̙͛͑̽̉̾̀̅̌͜͠͞ļ̛̫̻̫̰̪̩̠̣̼̏̅́͌̊͞į̴̛̛̩̜̜͕̘̂̑̀̈p̡̛͈͖͓̟͍̿͒̍̽͐͆͂̀ͅ A̰͉̹̅̽̑̕͜͟͡c̷͚̙̘̦̞̫̭͗̋͋̾̑͆̒͟͞c̵̗̹̣̲͚̳̳̮͋̈́̾̉̂͝ͅo̠̣̻̭̰͐́͛̄̂̿̏͊u̴̱̜̯̭̞̠͋͛͐̍̄n̸̡̘̦͕͓̬͌̂̎͊͐̎͌̕ť̮͎̯͎̣̙̺͚̱̌̀́̔͢͝ S͇̯̯̙̳̝͆̊̀͒͛̕ę̛̘̬̺͎͎́̔̊̀͂̓̆̕͢ͅc̨͎̼̯̩̽͒̀̏̄̌̚u̷͉̗͕̼̮͎̬͓͋̃̀͂̈̂̈͊͛ř̶̡͔̺̱̹͓̺́̃̑̉͡͞ͅi̶̺̭͈̬̞̓̒̃͆̅̿̀̄́t͔̹̪͔̥̣̙̍̍̍̉̑̏͑́̌ͅŷ̧̗͈͚̥̗͚͊͑̀͢͜͡"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TestBuildEmail(ZulipTestCase):
 | 
			
		||||
    def test_build_SES_compatible_From_field(self) -> None:
 | 
			
		||||
        hamlet = self.example_user("hamlet")
 | 
			
		||||
        from_name = FromAddress.security_email_from_name(language="en")
 | 
			
		||||
        mail = build_email(
 | 
			
		||||
            "zerver/emails/password_reset",
 | 
			
		||||
            to_emails=[hamlet],
 | 
			
		||||
            from_name=from_name,
 | 
			
		||||
            from_address=FromAddress.NOREPLY,
 | 
			
		||||
            language="en",
 | 
			
		||||
        )
 | 
			
		||||
        self.assertEqual(
 | 
			
		||||
            mail.extra_headers["From"], "{} <{}>".format(from_name, FromAddress.NOREPLY)
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    def test_build_SES_compatible_From_field_limit(self) -> None:
 | 
			
		||||
        hamlet = self.example_user("hamlet")
 | 
			
		||||
        limit_length_name = "a" * (320 - len(sanitize_address(FromAddress.NOREPLY, "utf-8")) - 3)
 | 
			
		||||
@@ -47,28 +31,41 @@ class TestBuildEmail(ZulipTestCase):
 | 
			
		||||
            mail.extra_headers["From"], "{} <{}>".format(limit_length_name, FromAddress.NOREPLY)
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    def test_build_SES_incompatible_From_field(self) -> None:
 | 
			
		||||
    def test_build_and_send_SES_incompatible_From_address(self) -> None:
 | 
			
		||||
        hamlet = self.example_user("hamlet")
 | 
			
		||||
        from_name = "Zulip"
 | 
			
		||||
        # Address by itself is > 320 bytes even without the name. Should trigger exception.
 | 
			
		||||
        overly_long_address = "a" * 320 + "@zulip.com"
 | 
			
		||||
        mail = build_email(
 | 
			
		||||
            "zerver/emails/password_reset",
 | 
			
		||||
            to_emails=[hamlet],
 | 
			
		||||
            from_name=OVERLY_LONG_NAME,
 | 
			
		||||
            from_address=FromAddress.NOREPLY,
 | 
			
		||||
            from_name=from_name,
 | 
			
		||||
            from_address=overly_long_address,
 | 
			
		||||
            language="en",
 | 
			
		||||
        )
 | 
			
		||||
        self.assertEqual(mail.extra_headers["From"], FromAddress.NOREPLY)
 | 
			
		||||
        self.assertEqual(mail.extra_headers["From"], overly_long_address)
 | 
			
		||||
        self.assertTrue(len(sanitize_address(mail.extra_headers["From"], "utf-8")) > 320)
 | 
			
		||||
 | 
			
		||||
    def test_build_SES_incompatible_From_field_limit(self) -> None:
 | 
			
		||||
        hamlet = self.example_user("hamlet")
 | 
			
		||||
        limit_length_name = "a" * (321 - len(sanitize_address(FromAddress.NOREPLY, "utf-8")) - 3)
 | 
			
		||||
        mail = build_email(
 | 
			
		||||
            "zerver/emails/password_reset",
 | 
			
		||||
            to_emails=[hamlet],
 | 
			
		||||
            from_name=limit_length_name,
 | 
			
		||||
            from_address=FromAddress.NOREPLY,
 | 
			
		||||
            language="en",
 | 
			
		||||
        with mock.patch.object(
 | 
			
		||||
            EmailBackend, "send_messages", side_effect=SMTPDataError(242, "From field too long.")
 | 
			
		||||
        ):
 | 
			
		||||
            with self.assertLogs(logger=logger) as info_log:
 | 
			
		||||
                with self.assertRaises(EmailNotDeliveredException):
 | 
			
		||||
                    send_email(
 | 
			
		||||
                        "zerver/emails/password_reset",
 | 
			
		||||
                        to_emails=[hamlet],
 | 
			
		||||
                        from_name=from_name,
 | 
			
		||||
                        from_address=overly_long_address,
 | 
			
		||||
                        language="en",
 | 
			
		||||
                    )
 | 
			
		||||
        self.assertEqual(len(info_log.records), 2)
 | 
			
		||||
        self.assertEqual(
 | 
			
		||||
            info_log.output,
 | 
			
		||||
            [
 | 
			
		||||
                f"INFO:{logger.name}:Sending password_reset email to {mail.to}",
 | 
			
		||||
                f"ERROR:{logger.name}:Error sending password_reset email to {mail.to}",
 | 
			
		||||
            ],
 | 
			
		||||
        )
 | 
			
		||||
        self.assertEqual(mail.extra_headers["From"], FromAddress.NOREPLY)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TestSendEmail(ZulipTestCase):
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user