mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-05-24 10:44:00 -04:00
Merge pull request #3377 from alphagov/delete-contact-list
Let users delete a contact list
This commit is contained in:
@@ -443,6 +443,29 @@ def contact_list(service_id, contact_list_id):
|
||||
)
|
||||
|
||||
|
||||
@main.route("/services/<uuid:service_id>/contact-list/<uuid:contact_list_id>/delete", methods=['GET', 'POST'])
|
||||
@user_has_permissions('manage_templates')
|
||||
def delete_contact_list(service_id, contact_list_id):
|
||||
contact_list = ContactList.from_id(contact_list_id, service_id=service_id)
|
||||
|
||||
if request.method == 'POST':
|
||||
contact_list.delete()
|
||||
return redirect(url_for(
|
||||
'.uploads',
|
||||
service_id=service_id,
|
||||
))
|
||||
|
||||
flash([
|
||||
f"Are you sure you want to delete ‘{contact_list.original_file_name}’?",
|
||||
], 'delete')
|
||||
|
||||
return render_template(
|
||||
'views/uploads/contact-list/contact-list.html',
|
||||
contact_list=contact_list,
|
||||
confirm_delete_banner=True,
|
||||
)
|
||||
|
||||
|
||||
@main.route("/services/<uuid:service_id>/contact-list/<uuid:contact_list_id>.csv", methods=['GET'])
|
||||
@user_has_permissions('send_messages')
|
||||
def download_contact_list(service_id, contact_list_id):
|
||||
|
||||
@@ -105,6 +105,12 @@ class ContactList(JSONModel):
|
||||
template_type=metadata['template_type'],
|
||||
))
|
||||
|
||||
def delete(self):
|
||||
contact_list_api_client.delete_contact_list(
|
||||
service_id=self.service_id,
|
||||
contact_list_id=self.id,
|
||||
)
|
||||
|
||||
@property
|
||||
def contents(self):
|
||||
return self.download(self.service_id, self.id)
|
||||
|
||||
@@ -326,6 +326,7 @@ class HeaderNavigation(Navigation):
|
||||
'check_contact_list',
|
||||
'save_contact_list',
|
||||
'contact_list',
|
||||
'delete_contact_list',
|
||||
'upload_letter',
|
||||
'uploaded_letter_preview',
|
||||
'uploads',
|
||||
@@ -400,6 +401,7 @@ class MainNavigation(Navigation):
|
||||
'check_contact_list',
|
||||
'save_contact_list',
|
||||
'contact_list',
|
||||
'delete_contact_list',
|
||||
'upload_letter',
|
||||
'uploaded_letter_preview',
|
||||
'uploads',
|
||||
@@ -686,6 +688,7 @@ class CaseworkNavigation(Navigation):
|
||||
'check_contact_list',
|
||||
'save_contact_list',
|
||||
'contact_list',
|
||||
'delete_contact_list',
|
||||
'upload_letter',
|
||||
'uploaded_letter_preview',
|
||||
'uploads',
|
||||
@@ -1234,6 +1237,7 @@ class OrgNavigation(Navigation):
|
||||
'check_contact_list',
|
||||
'save_contact_list',
|
||||
'contact_list',
|
||||
'delete_contact_list',
|
||||
'upload_letter',
|
||||
'uploaded_letter_preview',
|
||||
'uploads',
|
||||
|
||||
@@ -30,5 +30,8 @@ class ContactListApiClient(NotifyAdminAPIClient):
|
||||
def get_contact_list(self, *, service_id, contact_list_id):
|
||||
return self.get(f'/service/{service_id}/contact-list/{contact_list_id}')
|
||||
|
||||
def delete_contact_list(self, *, service_id, contact_list_id):
|
||||
return self.delete(f'/service/{service_id}/contact-list/{contact_list_id}')
|
||||
|
||||
|
||||
contact_list_api_client = ContactListApiClient()
|
||||
|
||||
@@ -45,4 +45,14 @@
|
||||
</p>
|
||||
{% endif %}
|
||||
|
||||
{% if not confirm_delete_banner %}
|
||||
<div class="js-stick-at-bottom-when-scrolling">
|
||||
<div class="page-footer">
|
||||
<span class="page-footer-delete-link page-footer-delete-link-without-button">
|
||||
<a class="govuk-link govuk-link--destructive" href="{{ url_for('main.delete_contact_list', service_id=current_service.id, contact_list_id=contact_list.id) }}">Delete this contact list</a>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
@@ -1261,3 +1261,52 @@ def test_download_contact_list(
|
||||
'phone number\n'
|
||||
'07900900321'
|
||||
)
|
||||
|
||||
|
||||
def test_confirm_delete_contact_list(
|
||||
mocker,
|
||||
client_request,
|
||||
fake_uuid,
|
||||
mock_get_contact_list,
|
||||
):
|
||||
mocker.patch(
|
||||
'app.models.contact_list.s3download',
|
||||
return_value='phone number\n07900900321'
|
||||
)
|
||||
page = client_request.get(
|
||||
'main.delete_contact_list',
|
||||
service_id=SERVICE_ONE_ID,
|
||||
contact_list_id=fake_uuid,
|
||||
)
|
||||
assert normalize_spaces(page.select_one('.banner-dangerous').text) == (
|
||||
'Are you sure you want to delete ‘EmergencyContactList.xls’? '
|
||||
'Yes, delete'
|
||||
)
|
||||
assert 'action' not in page.select_one('form')
|
||||
assert page.select_one('form')['method'] == 'post'
|
||||
assert page.select_one('form button')['type'] == 'submit'
|
||||
|
||||
|
||||
def test_delete_contact_list(
|
||||
mocker,
|
||||
client_request,
|
||||
fake_uuid,
|
||||
mock_get_contact_list,
|
||||
):
|
||||
mock_delete = mocker.patch(
|
||||
'app.models.contact_list.contact_list_api_client.delete_contact_list'
|
||||
)
|
||||
client_request.post(
|
||||
'main.delete_contact_list',
|
||||
service_id=SERVICE_ONE_ID,
|
||||
contact_list_id=fake_uuid,
|
||||
_expected_redirect=url_for(
|
||||
'main.uploads',
|
||||
service_id=SERVICE_ONE_ID,
|
||||
_external=True,
|
||||
)
|
||||
)
|
||||
mock_delete.assert_called_once_with(
|
||||
service_id=SERVICE_ONE_ID,
|
||||
contact_list_id=fake_uuid,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user