emails: Don't log emails while running test suite.

Modified the tests to ensure 100% coverage.
This commit is contained in:
Vishnu Ks 2018-08-06 09:40:31 +00:00 committed by Tim Abbott
parent d8c19cb003
commit 6aa4b64dc0
4 changed files with 27 additions and 19 deletions

View File

@ -6,23 +6,22 @@ from zerver.lib.test_classes import ZulipTestCase
from zproject.email_backends import get_forward_address
class EmailLogTest(ZulipTestCase):
def test_get_email_log_page(self) -> None:
result = self.client_get("/emails/")
self.assert_in_success_response(["All the emails sent in the Zulip"], result)
def test_clear_email_logs(self) -> None:
result = self.client_get('/emails/clear/')
self.assertEqual(result.status_code, 302)
result = self.client_get(result['Location'])
self.assertIn('manually generate most of the emails by clicking', str(result.content))
def test_generate_emails(self) -> None:
def test_generate_and_clear_email_log(self) -> None:
with self.settings(EMAIL_BACKEND='zproject.email_backends.EmailLogBackEnd'), \
mock.patch('logging.info', return_value=None):
with mock.patch('zproject.email_backends.EmailLogBackEnd.send_email_smtp'):
result = self.client_get('/emails/generate/')
self.assertEqual(result.status_code, 302)
self.assertIn('emails', result['Location'])
mock.patch('zproject.email_backends.EmailLogBackEnd.send_email_smtp'), \
mock.patch('logging.info', return_value=None), \
self.settings(DEVELOPMENT_LOG_EMAILS=True):
result = self.client_get('/emails/generate/')
self.assertEqual(result.status_code, 302)
self.assertIn('emails', result['Location'])
result = self.client_get("/emails/")
self.assert_in_success_response(["All the emails sent in the Zulip"], result)
result = self.client_get('/emails/clear/')
self.assertEqual(result.status_code, 302)
result = self.client_get(result['Location'])
self.assertIn('manually generate most of the emails by clicking', str(result.content))
def test_forward_address_details(self) -> None:
forward_address = "forward-to@example.com"

View File

@ -89,9 +89,10 @@ class EmailLogBackEnd(BaseEmailBackend):
def send_messages(self, email_messages: List[EmailMultiAlternatives]) -> int:
for email in email_messages:
self.log_email(email)
if get_forward_address():
self.send_email_smtp(email)
email_log_url = settings.ROOT_DOMAIN_URI + "/emails"
logging.info("Emails sent in development are available at %s" % (email_log_url,))
if settings.DEVELOPMENT_LOG_EMAILS:
self.log_email(email)
email_log_url = settings.ROOT_DOMAIN_URI + "/emails"
logging.info("Emails sent in development are available at %s" % (email_log_url,))
return len(email_messages)

View File

@ -240,6 +240,10 @@ DEFAULT_SETTINGS = {
# We use SubMessage for now-experimental features like
# slash commands.
'ALLOW_SUB_MESSAGES': DEVELOPMENT,
# We log emails in development environment for accessing
# them easily through /emails page
'DEVELOPMENT_LOG_EMAILS': DEVELOPMENT,
}
# These settings are not documented in prod_settings_template.py.

View File

@ -158,3 +158,7 @@ PUSH_NOTIFICATION_BOUNCER_URL = None
SLOW_QUERY_LOGS_STREAM = None
THUMBOR_URL = 'http://127.0.0.1:9995'
# Logging the emails while running the tests adds them
# to /emails page.
DEVELOPMENT_LOG_EMAILS = False