mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-07-26 04:28:39 +02:00
added tests for sending domain manager emails
This commit is contained in:
parent
dfb7c6d875
commit
fbab137d02
2 changed files with 172 additions and 12 deletions
|
@ -1427,7 +1427,7 @@ class TestPortfolioInvitationAdmin(TestCase):
|
|||
|
||||
@less_console_noise_decorator
|
||||
@patch("registrar.admin.send_portfolio_invitation_email")
|
||||
@patch("django.contrib.messages.warning") # Mock the `messages.error` call
|
||||
@patch("django.contrib.messages.error") # Mock the `messages.error` call
|
||||
def test_save_exception_generic_error(self, mock_messages_error, mock_send_email):
|
||||
"""Handle generic exceptions correctly during portfolio invitation."""
|
||||
self.client.force_login(self.superuser)
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
import unittest
|
||||
from unittest.mock import patch, MagicMock
|
||||
from datetime import date
|
||||
from registrar.models.domain import Domain
|
||||
from registrar.models.user import User
|
||||
from registrar.models.user_domain_role import UserDomainRole
|
||||
from registrar.utility.email import EmailSendingError
|
||||
from registrar.utility.email_invitations import send_domain_invitation_email
|
||||
from registrar.utility.email_invitations import send_domain_invitation_email, send_emails_to_domain_managers
|
||||
|
||||
from api.tests.common import less_console_noise_decorator
|
||||
|
||||
|
@ -290,16 +293,16 @@ class DomainInvitationEmail(unittest.TestCase):
|
|||
email = "invitee@example.com"
|
||||
is_member_of_different_org = False
|
||||
|
||||
mock_send_domain_manager_emails.side_effect = EmailSendingError("Error sending email")
|
||||
# Change the return value to False for mock_send_domain_manager_emails
|
||||
mock_send_domain_manager_emails.return_value = False
|
||||
|
||||
# Call and assert exception
|
||||
with self.assertRaises(EmailSendingError) as context:
|
||||
send_domain_invitation_email(
|
||||
email=email,
|
||||
requestor=mock_requestor,
|
||||
domains=mock_domain,
|
||||
is_member_of_different_org=is_member_of_different_org,
|
||||
)
|
||||
# Call and assert that send_domain_invitation_email returns False
|
||||
result = send_domain_invitation_email(
|
||||
email=email,
|
||||
requestor=mock_requestor,
|
||||
domains=mock_domain,
|
||||
is_member_of_different_org=is_member_of_different_org,
|
||||
)
|
||||
|
||||
# Assertions
|
||||
mock_normalize_domains.assert_called_once_with(mock_domain)
|
||||
|
@ -308,4 +311,161 @@ class DomainInvitationEmail(unittest.TestCase):
|
|||
email, None, [mock_domain], mock_requestor, is_member_of_different_org
|
||||
)
|
||||
mock_send_invitation_email.assert_called_once_with(email, mock_requestor_email, [mock_domain], None)
|
||||
self.assertEqual(str(context.exception), "Error sending email")
|
||||
|
||||
# Assert that the result is False
|
||||
self.assertFalse(result)
|
||||
|
||||
@less_console_noise_decorator
|
||||
@patch("registrar.utility.email_invitations.send_templated_email")
|
||||
@patch("registrar.models.UserDomainRole.objects.filter")
|
||||
def test_send_emails_to_domain_managers_all_emails_sent_successfully(self, mock_filter, mock_send_templated_email):
|
||||
"""Test when all emails are sent successfully."""
|
||||
|
||||
# Setup mocks
|
||||
mock_domain = MagicMock(spec=Domain)
|
||||
mock_requestor_email = "requestor@example.com"
|
||||
mock_email = "invitee@example.com"
|
||||
|
||||
# Create mock user and UserDomainRole
|
||||
mock_user = MagicMock(spec=User)
|
||||
mock_user.email = "manager@example.com"
|
||||
mock_user_domain_role = MagicMock(spec=UserDomainRole, user=mock_user)
|
||||
|
||||
# Mock the filter method to return a list of mock UserDomainRole objects
|
||||
mock_filter.return_value = [mock_user_domain_role]
|
||||
|
||||
# Mock successful email sending
|
||||
mock_send_templated_email.return_value = None # No exception means success
|
||||
|
||||
# Call function
|
||||
result = send_emails_to_domain_managers(mock_email, mock_requestor_email, mock_domain)
|
||||
|
||||
# Assertions
|
||||
self.assertTrue(result) # All emails should be successfully sent
|
||||
mock_send_templated_email.assert_called_once_with(
|
||||
"emails/domain_manager_notification.txt",
|
||||
"emails/domain_manager_notification_subject.txt",
|
||||
to_address="manager@example.com",
|
||||
context={
|
||||
"domain": mock_domain,
|
||||
"requestor_email": mock_requestor_email,
|
||||
"invited_email_address": mock_email,
|
||||
"domain_manager": mock_user,
|
||||
"date": date.today(),
|
||||
},
|
||||
)
|
||||
|
||||
@less_console_noise_decorator
|
||||
@patch("registrar.utility.email_invitations.send_templated_email")
|
||||
@patch("registrar.models.UserDomainRole.objects.filter")
|
||||
def test_send_emails_to_domain_managers_email_send_fails(self, mock_filter, mock_send_templated_email):
|
||||
"""Test when sending an email fails (raises EmailSendingError)."""
|
||||
|
||||
# Setup mocks
|
||||
mock_domain = MagicMock(spec=Domain)
|
||||
mock_requestor_email = "requestor@example.com"
|
||||
mock_email = "invitee@example.com"
|
||||
|
||||
# Create mock user and UserDomainRole
|
||||
mock_user = MagicMock(spec=User)
|
||||
mock_user.email = "manager@example.com"
|
||||
mock_user_domain_role = MagicMock(spec=UserDomainRole, user=mock_user)
|
||||
|
||||
# Mock the filter method to return a list of mock UserDomainRole objects
|
||||
mock_filter.return_value = [mock_user_domain_role]
|
||||
|
||||
# Mock sending email to raise an EmailSendingError
|
||||
mock_send_templated_email.side_effect = EmailSendingError("Email sending failed")
|
||||
|
||||
# Call function
|
||||
result = send_emails_to_domain_managers(mock_email, mock_requestor_email, mock_domain)
|
||||
|
||||
# Assertions
|
||||
self.assertFalse(result) # The result should be False as email sending failed
|
||||
mock_send_templated_email.assert_called_once_with(
|
||||
"emails/domain_manager_notification.txt",
|
||||
"emails/domain_manager_notification_subject.txt",
|
||||
to_address="manager@example.com",
|
||||
context={
|
||||
"domain": mock_domain,
|
||||
"requestor_email": mock_requestor_email,
|
||||
"invited_email_address": mock_email,
|
||||
"domain_manager": mock_user,
|
||||
"date": date.today(),
|
||||
},
|
||||
)
|
||||
|
||||
@less_console_noise_decorator
|
||||
@patch("registrar.utility.email_invitations.send_templated_email")
|
||||
@patch("registrar.models.UserDomainRole.objects.filter")
|
||||
def test_send_emails_to_domain_managers_no_domain_managers(self, mock_filter, mock_send_templated_email):
|
||||
"""Test when there are no domain managers."""
|
||||
|
||||
# Setup mocks
|
||||
mock_domain = MagicMock(spec=Domain)
|
||||
mock_requestor_email = "requestor@example.com"
|
||||
mock_email = "invitee@example.com"
|
||||
|
||||
# Mock no domain managers (empty UserDomainRole queryset)
|
||||
mock_filter.return_value = []
|
||||
|
||||
# Call function
|
||||
result = send_emails_to_domain_managers(mock_email, mock_requestor_email, mock_domain)
|
||||
|
||||
# Assertions
|
||||
self.assertTrue(result) # No emails to send, so it should return True
|
||||
mock_send_templated_email.assert_not_called() # No emails should be sent
|
||||
|
||||
@less_console_noise_decorator
|
||||
@patch("registrar.utility.email_invitations.send_templated_email")
|
||||
@patch("registrar.models.UserDomainRole.objects.filter")
|
||||
def test_send_emails_to_domain_managers_some_emails_fail(self, mock_filter, mock_send_templated_email):
|
||||
"""Test when some emails fail to send."""
|
||||
|
||||
# Setup mocks
|
||||
mock_domain = MagicMock(spec=Domain)
|
||||
mock_requestor_email = "requestor@example.com"
|
||||
mock_email = "invitee@example.com"
|
||||
|
||||
# Create mock users and UserDomainRoles
|
||||
mock_user_1 = MagicMock(spec=User)
|
||||
mock_user_1.email = "manager1@example.com"
|
||||
mock_user_2 = MagicMock(spec=User)
|
||||
mock_user_2.email = "manager2@example.com"
|
||||
|
||||
mock_user_domain_role_1 = MagicMock(spec=UserDomainRole, user=mock_user_1)
|
||||
mock_user_domain_role_2 = MagicMock(spec=UserDomainRole, user=mock_user_2)
|
||||
mock_filter.return_value = [mock_user_domain_role_1, mock_user_domain_role_2]
|
||||
|
||||
# Mock first email success and second email failure
|
||||
mock_send_templated_email.side_effect = [None, EmailSendingError("Failed to send email")]
|
||||
|
||||
# Call function
|
||||
result = send_emails_to_domain_managers(mock_email, mock_requestor_email, mock_domain)
|
||||
|
||||
# Assertions
|
||||
self.assertFalse(result) # One email failed, so result should be False
|
||||
mock_send_templated_email.assert_any_call(
|
||||
"emails/domain_manager_notification.txt",
|
||||
"emails/domain_manager_notification_subject.txt",
|
||||
to_address="manager1@example.com",
|
||||
context={
|
||||
"domain": mock_domain,
|
||||
"requestor_email": mock_requestor_email,
|
||||
"invited_email_address": mock_email,
|
||||
"domain_manager": mock_user_1,
|
||||
"date": date.today(),
|
||||
},
|
||||
)
|
||||
mock_send_templated_email.assert_any_call(
|
||||
"emails/domain_manager_notification.txt",
|
||||
"emails/domain_manager_notification_subject.txt",
|
||||
to_address="manager2@example.com",
|
||||
context={
|
||||
"domain": mock_domain,
|
||||
"requestor_email": mock_requestor_email,
|
||||
"invited_email_address": mock_email,
|
||||
"domain_manager": mock_user_2,
|
||||
"date": date.today(),
|
||||
},
|
||||
)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue