mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-05-18 18:39:21 +02:00
Remove submitter from deleting orphaned contacts
This commit is contained in:
parent
d0b3dd7c46
commit
2c43533441
3 changed files with 134 additions and 16 deletions
|
@ -349,6 +349,139 @@ class HomeTests(TestWithUser):
|
|||
# clean up
|
||||
domain_request.delete()
|
||||
|
||||
@less_console_noise_decorator
|
||||
def test_home_deletes_domain_request_and_orphans(self):
|
||||
"""Tests if delete for DomainRequest deletes orphaned Contact objects"""
|
||||
|
||||
# Create the site and contacts to delete (orphaned)
|
||||
contact = Contact.objects.create(
|
||||
first_name="Henry",
|
||||
last_name="Mcfakerson",
|
||||
)
|
||||
contact_shared = Contact.objects.create(
|
||||
first_name="Relative",
|
||||
last_name="Aether",
|
||||
)
|
||||
|
||||
# Create two non-orphaned contacts
|
||||
contact_2 = Contact.objects.create(
|
||||
first_name="Saturn",
|
||||
last_name="Mars",
|
||||
)
|
||||
|
||||
# Attach a user object to a contact (should not be deleted)
|
||||
contact_user, _ = Contact.objects.get_or_create(
|
||||
first_name="Hank",
|
||||
last_name="McFakey",
|
||||
)
|
||||
|
||||
site = DraftDomain.objects.create(name="igorville.gov")
|
||||
domain_request = DomainRequest.objects.create(
|
||||
creator=self.user,
|
||||
requested_domain=site,
|
||||
status=DomainRequest.DomainRequestStatus.WITHDRAWN,
|
||||
senior_official=contact,
|
||||
)
|
||||
domain_request.other_contacts.set([contact_2])
|
||||
|
||||
# Create a second domain request to attach contacts to
|
||||
site_2 = DraftDomain.objects.create(name="teaville.gov")
|
||||
domain_request_2 = DomainRequest.objects.create(
|
||||
creator=self.user,
|
||||
requested_domain=site_2,
|
||||
status=DomainRequest.DomainRequestStatus.STARTED,
|
||||
senior_official=contact_2,
|
||||
)
|
||||
domain_request_2.other_contacts.set([contact_shared])
|
||||
|
||||
igorville = DomainRequest.objects.filter(requested_domain__name="igorville.gov")
|
||||
self.assertTrue(igorville.exists())
|
||||
|
||||
# Trigger the delete logic
|
||||
self.client.post(reverse("domain-request-delete", kwargs={"pk": domain_request.pk}))
|
||||
|
||||
# igorville is now deleted
|
||||
igorville = DomainRequest.objects.filter(requested_domain__name="igorville.gov")
|
||||
self.assertFalse(igorville.exists())
|
||||
|
||||
# Check if the orphaned contacts were deleted
|
||||
orphan = Contact.objects.filter(id=contact.id)
|
||||
self.assertFalse(orphan.exists())
|
||||
orphan = Contact.objects.filter(id=contact_user.id)
|
||||
self.assertFalse(orphan.exists())
|
||||
|
||||
try:
|
||||
edge_case = Contact.objects.filter(id=contact_2.id).get()
|
||||
except Contact.DoesNotExist:
|
||||
self.fail("contact_2 (a non-orphaned contact) was deleted")
|
||||
|
||||
self.assertEqual(edge_case, contact_2)
|
||||
|
||||
DomainRequest.objects.all().delete()
|
||||
Contact.objects.all().delete()
|
||||
|
||||
@less_console_noise_decorator
|
||||
def test_home_deletes_domain_request_and_shared_orphans(self):
|
||||
"""Test the edge case for an object that will become orphaned after a delete
|
||||
(but is not an orphan at the time of deletion)"""
|
||||
|
||||
# Create the site and contacts to delete (orphaned)
|
||||
contact = Contact.objects.create(
|
||||
first_name="Henry",
|
||||
last_name="Mcfakerson",
|
||||
)
|
||||
contact_shared = Contact.objects.create(
|
||||
first_name="Relative",
|
||||
last_name="Aether",
|
||||
)
|
||||
|
||||
# Create two non-orphaned contacts
|
||||
contact_2 = Contact.objects.create(
|
||||
first_name="Saturn",
|
||||
last_name="Mars",
|
||||
)
|
||||
|
||||
# Attach a user object to a contact (should not be deleted)
|
||||
contact_user, _ = Contact.objects.get_or_create(
|
||||
first_name="Hank",
|
||||
last_name="McFakey",
|
||||
)
|
||||
|
||||
site = DraftDomain.objects.create(name="igorville.gov")
|
||||
domain_request = DomainRequest.objects.create(
|
||||
creator=self.user,
|
||||
requested_domain=site,
|
||||
status=DomainRequest.DomainRequestStatus.WITHDRAWN,
|
||||
senior_official=contact,
|
||||
)
|
||||
domain_request.other_contacts.set([contact_2])
|
||||
|
||||
# Create a second domain request to attach contacts to
|
||||
site_2 = DraftDomain.objects.create(name="teaville.gov")
|
||||
domain_request_2 = DomainRequest.objects.create(
|
||||
creator=self.user,
|
||||
requested_domain=site_2,
|
||||
status=DomainRequest.DomainRequestStatus.STARTED,
|
||||
senior_official=contact_2,
|
||||
)
|
||||
domain_request_2.other_contacts.set([contact_shared])
|
||||
|
||||
teaville = DomainRequest.objects.filter(requested_domain__name="teaville.gov")
|
||||
self.assertTrue(teaville.exists())
|
||||
|
||||
# Trigger the delete logic
|
||||
self.client.post(reverse("domain-request-delete", kwargs={"pk": domain_request_2.pk}))
|
||||
|
||||
teaville = DomainRequest.objects.filter(requested_domain__name="teaville.gov")
|
||||
self.assertFalse(teaville.exists())
|
||||
|
||||
# Check if the orphaned contact was deleted
|
||||
orphan = Contact.objects.filter(id=contact_shared.id)
|
||||
self.assertFalse(orphan.exists())
|
||||
|
||||
DomainRequest.objects.all().delete()
|
||||
Contact.objects.all().delete()
|
||||
|
||||
@less_console_noise_decorator
|
||||
def test_domain_request_form_view(self):
|
||||
response = self.client.get("/request/", follow=True)
|
||||
|
|
|
@ -159,7 +159,6 @@ class TestDomainPermissions(TestWithDomainPermissions):
|
|||
"domain-dns-nameservers",
|
||||
"domain-org-name-address",
|
||||
"domain-senior-official",
|
||||
"domain-your-contact-information",
|
||||
"domain-security-email",
|
||||
]:
|
||||
with self.subTest(view_name=view_name):
|
||||
|
@ -179,7 +178,6 @@ class TestDomainPermissions(TestWithDomainPermissions):
|
|||
"domain-dns-nameservers",
|
||||
"domain-org-name-address",
|
||||
"domain-senior-official",
|
||||
"domain-your-contact-information",
|
||||
"domain-security-email",
|
||||
]:
|
||||
with self.subTest(view_name=view_name):
|
||||
|
@ -200,7 +198,6 @@ class TestDomainPermissions(TestWithDomainPermissions):
|
|||
"domain-dns-dnssec-dsdata",
|
||||
"domain-org-name-address",
|
||||
"domain-senior-official",
|
||||
"domain-your-contact-information",
|
||||
"domain-security-email",
|
||||
]:
|
||||
for domain in [
|
||||
|
@ -1601,16 +1598,6 @@ class TestDomainSuborganization(TestDomainOverview):
|
|||
portfolio.delete()
|
||||
|
||||
|
||||
class TestDomainContactInformation(TestDomainOverview):
|
||||
@less_console_noise_decorator
|
||||
def test_domain_your_contact_information_content(self):
|
||||
"""Logged-in user's contact information appears on the page."""
|
||||
self.user.first_name = "Testy"
|
||||
self.user.save()
|
||||
page = self.app.get(reverse("domain-your-contact-information", kwargs={"pk": self.domain.id}))
|
||||
self.assertContains(page, "Testy")
|
||||
|
||||
|
||||
class TestDomainSecurityEmail(TestDomainOverview):
|
||||
def test_domain_security_email_existing_security_contact(self):
|
||||
"""Can load domain's security email page."""
|
||||
|
|
|
@ -827,18 +827,16 @@ class DomainRequestDeleteView(DomainRequestPermissionDeleteView):
|
|||
|
||||
# Get each contact object on the DomainRequest object
|
||||
so = domain_request.senior_official
|
||||
creator = domain_request.creator
|
||||
other_contacts = list(domain_request.other_contacts.all())
|
||||
other_contact_ids = domain_request.other_contacts.all().values_list("id", flat=True)
|
||||
|
||||
# Check if the desired item still exists in the DB
|
||||
if check_db:
|
||||
so = self._get_contacts_by_id([so.id]).first() if so is not None else None
|
||||
creator = self._get_contacts_by_id([creator.id]).first() if creator is not None else None
|
||||
other_contacts = self._get_contacts_by_id(other_contact_ids)
|
||||
|
||||
# Pair each contact with its db related name for use in checking if it has joins
|
||||
checked_contacts = [(so, "senior_official"), (creator, "submitted_domain_requests")]
|
||||
checked_contacts = [(so, "senior_official")]
|
||||
checked_contacts.extend((contact, "contact_domain_requests") for contact in other_contacts)
|
||||
|
||||
for contact, related_name in checked_contacts:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue