Conditional deletion

This commit is contained in:
zandercymatics 2024-01-05 09:54:31 -07:00
parent 403bfb6433
commit a251d1ca1a
No known key found for this signature in database
GPG key ID: FF4636ABEC9682B7
3 changed files with 44 additions and 28 deletions

View file

@ -81,7 +81,6 @@
{% endif %}
</a>
</td>
<td></td>
</tr>
{% endfor %}
</tbody>
@ -141,32 +140,34 @@
</a>
</td>
<td>
<a
id="button-toggle-delete-domain-alert-{{ forloop.counter }}"
href="#toggle-delete-domain-alert-{{ forloop.counter }}"
class="usa-button--unstyled"
aria-controls="toggle-delete-domain-alert-{{ forloop.counter }}"
data-open-modal
>
<svg class="usa-icon" aria-hidden="true" focusable="false" role="img" width="24">
<use xlink:href="{%static 'img/sprite.svg'%}#delete"></use>
</svg>
Delete
</a>
{% if application.status == "started" or application.status == "withdrawn" %}
<a
id="button-toggle-delete-domain-alert-{{ forloop.counter }}"
href="#toggle-delete-domain-alert-{{ forloop.counter }}"
class="usa-button--unstyled"
aria-controls="toggle-delete-domain-alert-{{ forloop.counter }}"
data-open-modal
>
<svg class="usa-icon" aria-hidden="true" focusable="false" role="img" width="24">
<use xlink:href="{%static 'img/sprite.svg'%}#delete"></use>
</svg>
Delete
</a>
<div
class="usa-modal"
id="toggle-delete-domain-alert-{{ forloop.counter }}"
aria-labelledby="Are you sure you want to continue?"
aria-describedby="User will be removed"
data-force-action
>
<form method="POST" action="{% url "application-delete" pk=application.id %}">
{% with heading="Are you sure you want to delete "|add:application.requested_domain.name|add:"?" %}
{% include 'includes/modal.html' with modal_heading=heading modal_description="This will remove the domain request from the .gov registrar. This action cannot be undone." modal_button=modal_button|safe %}
{% endwith %}
</form>
</div>
<div
class="usa-modal"
id="toggle-delete-domain-alert-{{ forloop.counter }}"
aria-labelledby="Are you sure you want to continue?"
aria-describedby="User will be removed"
data-force-action
>
<form method="POST" action="{% url "application-delete" pk=application.id %}">
{% with heading="Are you sure you want to delete "|add:application.requested_domain.name|add:"?" %}
{% include 'includes/modal.html' with modal_heading=heading modal_description="This will remove the domain request from the .gov registrar. This action cannot be undone." modal_button=modal_button|safe %}
{% endwith %}
</form>
</div>
{% endif %}
</td>
</tr>
{% endfor %}

View file

@ -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()

View file

@ -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")