mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-06-10 08:21:13 -04:00
Merge pull request #885 from alphagov/new-api-for-deleting-templates
Using new endpoint for template statistics
This commit is contained in:
@@ -186,7 +186,23 @@ def delete_service_template(service_id, template_id):
|
||||
template['template_content'] = template['content']
|
||||
form = form_objects[template['template_type']](**template)
|
||||
|
||||
flash('Are you sure you want to delete it?', 'delete')
|
||||
try:
|
||||
last_used_notification = template_statistics_client.get_template_statistics_for_template(
|
||||
service_id, template['id']
|
||||
)
|
||||
message = '{} was last used {} ago'.format(
|
||||
last_used_notification['template']['name'],
|
||||
get_human_readable_delta(
|
||||
parse(last_used_notification['created_at']).replace(tzinfo=None),
|
||||
datetime.utcnow())
|
||||
)
|
||||
except HTTPError as e:
|
||||
if e.status_code == 404:
|
||||
message = '{} has never been used'.format(template['name'])
|
||||
else:
|
||||
raise e
|
||||
|
||||
flash('{}. Are you sure you want to delete it?'.format(message), 'delete')
|
||||
return render_template(
|
||||
'views/edit-{}-template.html'.format(template['template_type']),
|
||||
h1='Edit template',
|
||||
|
||||
@@ -213,6 +213,10 @@ def notification_json(
|
||||
'next': '/service/{}/notifications'.format(service_id),
|
||||
'last': '/service/{}/notifications'.format(service_id)
|
||||
}
|
||||
job_payload = None
|
||||
if job:
|
||||
job_payload = {'id': job['id'], 'original_file_name': job['original_file_name']}
|
||||
|
||||
data = {
|
||||
'notifications': [{
|
||||
'to': to,
|
||||
@@ -220,7 +224,7 @@ def notification_json(
|
||||
'id': template['id'],
|
||||
'name': template['name'],
|
||||
'template_type': template['template_type']},
|
||||
'job': {'id': job['id'], 'original_file_name': job['original_file_name']} if job else None,
|
||||
'job': job_payload,
|
||||
'sent_at': sent_at,
|
||||
'status': status,
|
||||
'created_at': created_at,
|
||||
@@ -228,13 +232,56 @@ def notification_json(
|
||||
'job_row_number': job_row_number,
|
||||
'template_version': template['version']
|
||||
} for i in range(rows)],
|
||||
'total': 5,
|
||||
'total': rows,
|
||||
'page_size': 50,
|
||||
'links': links
|
||||
}
|
||||
return data
|
||||
|
||||
|
||||
def single_notification_json(
|
||||
service_id,
|
||||
job=None,
|
||||
template=None,
|
||||
status=None,
|
||||
sent_at=None,
|
||||
created_at=None,
|
||||
updated_at=None
|
||||
):
|
||||
if template is None:
|
||||
template = template_json(service_id, str(generate_uuid()))
|
||||
if sent_at is None:
|
||||
sent_at = str(datetime.utcnow())
|
||||
if created_at is None:
|
||||
created_at = str(datetime.utcnow())
|
||||
if updated_at is None:
|
||||
updated_at = str(datetime.utcnow() + timedelta(minutes=1))
|
||||
if status is None:
|
||||
status = 'delivered'
|
||||
job_payload = None
|
||||
if job:
|
||||
job_payload = {'id': job['id'], 'original_file_name': job['original_file_name']}
|
||||
|
||||
data = {
|
||||
'sent_at': sent_at,
|
||||
'billable_units': 1,
|
||||
'status': status,
|
||||
'created_at': created_at,
|
||||
'reference': None,
|
||||
'updated_at': updated_at,
|
||||
'template_version': 5,
|
||||
'service': service_id,
|
||||
'id': '29441662-17ce-4ffe-9502-fcaed73b2826',
|
||||
'template': template,
|
||||
'job_row_number': 0,
|
||||
'notification_type': 'sms',
|
||||
'api_key': None,
|
||||
'job': job_payload,
|
||||
'sent_by': 'mmg'
|
||||
}
|
||||
return data
|
||||
|
||||
|
||||
def validate_route_permission(mocker,
|
||||
app_,
|
||||
method,
|
||||
|
||||
@@ -1,24 +1,26 @@
|
||||
from datetime import datetime
|
||||
from unittest.mock import Mock
|
||||
|
||||
import pytest
|
||||
from bs4 import BeautifulSoup
|
||||
from flask import url_for
|
||||
from freezegun import freeze_time
|
||||
from notifications_python_client.errors import HTTPError
|
||||
|
||||
from tests import validate_route_permission
|
||||
from tests import validate_route_permission, template_json, single_notification_json
|
||||
from app.main.views.templates import get_last_use_message, get_human_readable_delta
|
||||
|
||||
|
||||
def test_should_show_page_for_one_template(
|
||||
app_,
|
||||
api_user_active,
|
||||
mock_login,
|
||||
mock_get_service,
|
||||
mock_get_service_template,
|
||||
mock_get_user,
|
||||
mock_get_user_by_email,
|
||||
mock_has_permissions,
|
||||
fake_uuid
|
||||
app_,
|
||||
api_user_active,
|
||||
mock_login,
|
||||
mock_get_service,
|
||||
mock_get_service_template,
|
||||
mock_get_user,
|
||||
mock_get_user_by_email,
|
||||
mock_has_permissions,
|
||||
fake_uuid
|
||||
):
|
||||
with app_.test_request_context():
|
||||
with app_.test_client() as client:
|
||||
@@ -74,16 +76,16 @@ def test_should_redirect_when_saving_a_template(app_,
|
||||
|
||||
|
||||
def test_should_show_interstitial_when_making_breaking_change(
|
||||
app_,
|
||||
api_user_active,
|
||||
mock_login,
|
||||
mock_get_service_template,
|
||||
mock_update_service_template,
|
||||
mock_get_user,
|
||||
mock_get_service,
|
||||
mock_get_user_by_email,
|
||||
mock_has_permissions,
|
||||
fake_uuid
|
||||
app_,
|
||||
api_user_active,
|
||||
mock_login,
|
||||
mock_get_service_template,
|
||||
mock_update_service_template,
|
||||
mock_get_user,
|
||||
mock_get_service,
|
||||
mock_get_user_by_email,
|
||||
mock_has_permissions,
|
||||
fake_uuid
|
||||
):
|
||||
with app_.test_request_context():
|
||||
with app_.test_client() as client:
|
||||
@@ -143,9 +145,9 @@ def test_should_not_create_too_big_template(app_,
|
||||
|
||||
assert resp.status_code == 200
|
||||
assert (
|
||||
"Content has a character count greater"
|
||||
" than the limit of 459"
|
||||
) in resp.get_data(as_text=True)
|
||||
"Content has a character count greater"
|
||||
" than the limit of 459"
|
||||
) in resp.get_data(as_text=True)
|
||||
|
||||
|
||||
def test_should_not_update_too_big_template(app_,
|
||||
@@ -178,9 +180,9 @@ def test_should_not_update_too_big_template(app_,
|
||||
|
||||
assert resp.status_code == 200
|
||||
assert (
|
||||
"Content has a character count greater"
|
||||
" than the limit of 459"
|
||||
) in resp.get_data(as_text=True)
|
||||
"Content has a character count greater"
|
||||
" than the limit of 459"
|
||||
) in resp.get_data(as_text=True)
|
||||
|
||||
|
||||
def test_should_redirect_when_saving_a_template_email(app_,
|
||||
@@ -223,18 +225,59 @@ def test_should_redirect_when_saving_a_template_email(app_,
|
||||
template_id, name, 'email', content, service_id, subject)
|
||||
|
||||
|
||||
def test_should_show_delete_template_page(app_,
|
||||
api_user_active,
|
||||
mock_login,
|
||||
mock_get_service,
|
||||
mock_get_service_template,
|
||||
mock_get_user,
|
||||
mock_get_user_by_email,
|
||||
mock_has_permissions,
|
||||
mock_get_template_statistics_for_template,
|
||||
fake_uuid):
|
||||
def test_should_show_delete_template_page_with_time_block(app_,
|
||||
api_user_active,
|
||||
mock_login,
|
||||
mock_get_service,
|
||||
mock_get_service_template,
|
||||
mock_get_user,
|
||||
mock_get_user_by_email,
|
||||
mock_has_permissions,
|
||||
fake_uuid,
|
||||
mocker):
|
||||
with app_.test_request_context():
|
||||
with app_.test_client() as client:
|
||||
with freeze_time('2012-01-01 12:00:00'):
|
||||
template = template_json('1234', '1234', "Test template", "sms", "Something very interesting")
|
||||
notification = single_notification_json('1234', template=template)
|
||||
|
||||
mocker.patch('app.template_statistics_client.get_template_statistics_for_template',
|
||||
return_value=notification)
|
||||
|
||||
with freeze_time('2012-01-01 12:10:00'):
|
||||
client.login(api_user_active)
|
||||
service_id = fake_uuid
|
||||
template_id = fake_uuid
|
||||
response = client.get(url_for(
|
||||
'.delete_service_template',
|
||||
service_id=service_id,
|
||||
template_id=template_id))
|
||||
content = response.get_data(as_text=True)
|
||||
assert response.status_code == 200
|
||||
assert 'Test template was last used 10 minutes ago. Are you sure you want to delete it?' in content
|
||||
assert 'Are you sure' in content
|
||||
assert 'Two week reminder' in content
|
||||
assert 'Your vehicle tax is about to expire' in content
|
||||
mock_get_service_template.assert_called_with(service_id, template_id)
|
||||
|
||||
|
||||
def test_should_show_delete_template_page_with_never_used_block(app_,
|
||||
api_user_active,
|
||||
mock_login,
|
||||
mock_get_service,
|
||||
mock_get_service_template,
|
||||
mock_get_user,
|
||||
mock_get_user_by_email,
|
||||
mock_has_permissions,
|
||||
fake_uuid,
|
||||
mocker):
|
||||
with app_.test_request_context():
|
||||
with app_.test_client() as client:
|
||||
mocker.patch(
|
||||
'app.template_statistics_client.get_template_statistics_for_template',
|
||||
side_effect=HTTPError(response=Mock(status_code=404), message="Default message")
|
||||
)
|
||||
|
||||
client.login(api_user_active)
|
||||
service_id = fake_uuid
|
||||
template_id = fake_uuid
|
||||
@@ -243,12 +286,13 @@ def test_should_show_delete_template_page(app_,
|
||||
service_id=service_id,
|
||||
template_id=template_id))
|
||||
|
||||
content = response.get_data(as_text=True)
|
||||
assert response.status_code == 200
|
||||
assert 'Are you sure' in content
|
||||
assert 'Two week reminder' in content
|
||||
assert 'Your vehicle tax is about to expire' in content
|
||||
mock_get_service_template.assert_called_with(service_id, template_id)
|
||||
content = response.get_data(as_text=True)
|
||||
assert response.status_code == 200
|
||||
assert 'Two week reminder has never been used. Are you sure you want to delete it?' in content
|
||||
assert 'Are you sure' in content
|
||||
assert 'Two week reminder' in content
|
||||
assert 'Your vehicle tax is about to expire' in content
|
||||
mock_get_service_template.assert_called_with(service_id, template_id)
|
||||
|
||||
|
||||
def test_should_redirect_when_deleting_a_template(app_,
|
||||
@@ -294,15 +338,15 @@ def test_should_redirect_when_deleting_a_template(app_,
|
||||
|
||||
@freeze_time('2016-01-01T15:00')
|
||||
def test_should_show_page_for_a_deleted_template(
|
||||
app_,
|
||||
api_user_active,
|
||||
mock_login,
|
||||
mock_get_service,
|
||||
mock_get_deleted_template,
|
||||
mock_get_user,
|
||||
mock_get_user_by_email,
|
||||
mock_has_permissions,
|
||||
fake_uuid
|
||||
app_,
|
||||
api_user_active,
|
||||
mock_login,
|
||||
mock_get_service,
|
||||
mock_get_deleted_template,
|
||||
mock_get_user,
|
||||
mock_get_user_by_email,
|
||||
mock_has_permissions,
|
||||
fake_uuid
|
||||
):
|
||||
with app_.test_request_context(), app_.test_client() as client:
|
||||
client.login(api_user_active)
|
||||
|
||||
@@ -14,7 +14,7 @@ from . import (
|
||||
notification_json,
|
||||
invite_json,
|
||||
sample_uuid,
|
||||
generate_uuid)
|
||||
generate_uuid, single_notification_json)
|
||||
from app.notify_client.models import (
|
||||
User,
|
||||
InvitedUser
|
||||
@@ -1086,20 +1086,8 @@ def mock_get_template_statistics(mocker, service_one, fake_uuid):
|
||||
def mock_get_template_statistics_for_template(mocker, service_one):
|
||||
def _get_stats(service_id, template_id):
|
||||
template = template_json(service_id, template_id, "Test template", "sms", "Something very interesting")
|
||||
return [
|
||||
{
|
||||
"usage_count": 1,
|
||||
"template": {
|
||||
"name": template['name'],
|
||||
"template_type": template['template_type'],
|
||||
"id": template['id']
|
||||
},
|
||||
"service": template['service'],
|
||||
"id": str(generate_uuid()),
|
||||
"day": "2016-04-04",
|
||||
"updated_at": "2016-04-04T12:00:00.000000+00:00"
|
||||
}
|
||||
]
|
||||
notification = single_notification_json(service_id, template=template)
|
||||
return notification
|
||||
|
||||
return mocker.patch(
|
||||
'app.template_statistics_client.get_template_statistics_for_template', side_effect=_get_stats)
|
||||
|
||||
Reference in New Issue
Block a user