{% endfor %}
diff --git a/src/registrar/tests/test_views.py b/src/registrar/tests/test_views.py
index 8f812b815..246222fe7 100644
--- a/src/registrar/tests/test_views.py
+++ b/src/registrar/tests/test_views.py
@@ -88,8 +88,9 @@ class LoggedInTests(TestWithUser):
site = DraftDomain.objects.create(name="igorville.gov")
application = DomainApplication.objects.create(creator=self.user, requested_domain=site)
response = self.client.get("/")
- # count = 2 because it is also in screenreader content
- self.assertContains(response, "igorville.gov", count=2)
+
+ # count = 6 because it is also in screenreader content, and in the delete modal
+ self.assertContains(response, "igorville.gov", count=6)
# clean up
application.delete()
diff --git a/src/registrar/views/application.py b/src/registrar/views/application.py
index 63adbf3d9..5043ef245 100644
--- a/src/registrar/views/application.py
+++ b/src/registrar/views/application.py
@@ -1,4 +1,5 @@
import logging
+from django.forms import ValidationError
from django.http import Http404, HttpResponse, HttpResponseRedirect
from django.shortcuts import redirect, render
@@ -576,7 +577,20 @@ class ApplicationWithdrawn(DomainApplicationPermissionWithdrawView):
class DomainApplicationDeleteView(DomainApplicationPermissionDeleteView):
+ """Delete view for home that allows the end user to delete DomainApplications"""
object: DomainApplication # workaround for type mismatch in DeleteView
+ def has_permission(self):
+ """Custom override for has_permission to exclude all statuses, except WITHDRAWN and STARTED"""
+ has_perm = super().has_permission()
+ if not has_perm:
+ return False
+
+ status = self.get_object().status
+ if status not in [DomainApplication.ApplicationStatus.WITHDRAWN, DomainApplication.ApplicationStatus.STARTED]:
+ return False
+
+ return True
+
def get_success_url(self):
return reverse("home")
\ No newline at end of file