mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-05-16 09:37:03 +02:00
163 lines
6.3 KiB
Python
163 lines
6.3 KiB
Python
from django.test import TestCase, RequestFactory
|
|
from django.contrib.admin.sites import AdminSite
|
|
from registrar.admin import DomainApplicationAdmin
|
|
from registrar.models import DomainApplication, DomainInformation, User
|
|
from .common import completed_application
|
|
|
|
from django.conf import settings
|
|
from unittest.mock import MagicMock
|
|
import boto3_mocking # type: ignore
|
|
|
|
|
|
class TestDomainApplicationAdmin(TestCase):
|
|
def setUp(self):
|
|
self.site = AdminSite()
|
|
self.factory = RequestFactory()
|
|
|
|
@boto3_mocking.patching
|
|
def test_save_model_sends_submitted_email(self):
|
|
# make sure there is no user with this email
|
|
EMAIL = "mayor@igorville.gov"
|
|
User.objects.filter(email=EMAIL).delete()
|
|
|
|
mock_client = MagicMock()
|
|
mock_client_instance = mock_client.return_value
|
|
|
|
with boto3_mocking.clients.handler_for("sesv2", mock_client):
|
|
# Create a sample application
|
|
application = completed_application()
|
|
|
|
# Create a mock request
|
|
request = self.factory.post(
|
|
"/admin/registrar/domainapplication/{}/change/".format(application.pk)
|
|
)
|
|
|
|
# Create an instance of the model admin
|
|
model_admin = DomainApplicationAdmin(DomainApplication, self.site)
|
|
|
|
# Modify the application's property
|
|
application.status = DomainApplication.SUBMITTED
|
|
|
|
# Use the model admin's save_model method
|
|
model_admin.save_model(request, application, form=None, change=True)
|
|
|
|
# Access the arguments passed to send_email
|
|
call_args = mock_client_instance.send_email.call_args
|
|
args, kwargs = call_args
|
|
|
|
# Retrieve the email details from the arguments
|
|
from_email = kwargs.get("FromEmailAddress")
|
|
to_email = kwargs["Destination"]["ToAddresses"][0]
|
|
email_content = kwargs["Content"]
|
|
email_body = email_content["Simple"]["Body"]["Text"]["Data"]
|
|
|
|
# Assert or perform other checks on the email details
|
|
expected_string = "We received your .gov domain request."
|
|
self.assertEqual(from_email, settings.DEFAULT_FROM_EMAIL)
|
|
self.assertEqual(to_email, EMAIL)
|
|
self.assertIn(expected_string, email_body)
|
|
|
|
# Perform assertions on the mock call itself
|
|
mock_client_instance.send_email.assert_called_once()
|
|
|
|
# Cleanup
|
|
application.delete()
|
|
|
|
@boto3_mocking.patching
|
|
def test_save_model_sends_in_review_email(self):
|
|
# make sure there is no user with this email
|
|
EMAIL = "mayor@igorville.gov"
|
|
User.objects.filter(email=EMAIL).delete()
|
|
|
|
mock_client = MagicMock()
|
|
mock_client_instance = mock_client.return_value
|
|
|
|
with boto3_mocking.clients.handler_for("sesv2", mock_client):
|
|
# Create a sample application
|
|
application = completed_application(status=DomainApplication.SUBMITTED)
|
|
|
|
# Create a mock request
|
|
request = self.factory.post(
|
|
"/admin/registrar/domainapplication/{}/change/".format(application.pk)
|
|
)
|
|
|
|
# Create an instance of the model admin
|
|
model_admin = DomainApplicationAdmin(DomainApplication, self.site)
|
|
|
|
# Modify the application's property
|
|
application.status = DomainApplication.INVESTIGATING
|
|
|
|
# Use the model admin's save_model method
|
|
model_admin.save_model(request, application, form=None, change=True)
|
|
|
|
# Access the arguments passed to send_email
|
|
call_args = mock_client_instance.send_email.call_args
|
|
args, kwargs = call_args
|
|
|
|
# Retrieve the email details from the arguments
|
|
from_email = kwargs.get("FromEmailAddress")
|
|
to_email = kwargs["Destination"]["ToAddresses"][0]
|
|
email_content = kwargs["Content"]
|
|
email_body = email_content["Simple"]["Body"]["Text"]["Data"]
|
|
|
|
# Assert or perform other checks on the email details
|
|
expected_string = "Your .gov domain request is being reviewed."
|
|
self.assertEqual(from_email, settings.DEFAULT_FROM_EMAIL)
|
|
self.assertEqual(to_email, EMAIL)
|
|
self.assertIn(expected_string, email_body)
|
|
|
|
# Perform assertions on the mock call itself
|
|
mock_client_instance.send_email.assert_called_once()
|
|
|
|
# Cleanup
|
|
application.delete()
|
|
|
|
@boto3_mocking.patching
|
|
def test_save_model_sends_approved_email(self):
|
|
# make sure there is no user with this email
|
|
EMAIL = "mayor@igorville.gov"
|
|
User.objects.filter(email=EMAIL).delete()
|
|
|
|
mock_client = MagicMock()
|
|
mock_client_instance = mock_client.return_value
|
|
|
|
with boto3_mocking.clients.handler_for("sesv2", mock_client):
|
|
# Create a sample application
|
|
application = completed_application(status=DomainApplication.INVESTIGATING)
|
|
|
|
# Create a mock request
|
|
request = self.factory.post(
|
|
"/admin/registrar/domainapplication/{}/change/".format(application.pk)
|
|
)
|
|
|
|
# Create an instance of the model admin
|
|
model_admin = DomainApplicationAdmin(DomainApplication, self.site)
|
|
|
|
# Modify the application's property
|
|
application.status = DomainApplication.APPROVED
|
|
|
|
# Use the model admin's save_model method
|
|
model_admin.save_model(request, application, form=None, change=True)
|
|
|
|
# Access the arguments passed to send_email
|
|
call_args = mock_client_instance.send_email.call_args
|
|
args, kwargs = call_args
|
|
|
|
# Retrieve the email details from the arguments
|
|
from_email = kwargs.get("FromEmailAddress")
|
|
to_email = kwargs["Destination"]["ToAddresses"][0]
|
|
email_content = kwargs["Content"]
|
|
email_body = email_content["Simple"]["Body"]["Text"]["Data"]
|
|
|
|
# Assert or perform other checks on the email details
|
|
expected_string = "Congratulations! Your .gov domain request has been approved."
|
|
self.assertEqual(from_email, settings.DEFAULT_FROM_EMAIL)
|
|
self.assertEqual(to_email, EMAIL)
|
|
self.assertIn(expected_string, email_body)
|
|
|
|
# Perform assertions on the mock call itself
|
|
mock_client_instance.send_email.assert_called_once()
|
|
|
|
# Cleanup
|
|
DomainInformation.objects.get(id=application.pk).delete()
|
|
application.delete()
|