mirror of
https://github.com/GSA/notifications-api.git
synced 2026-09-11 10:28:55 -04:00
add redact to notification with template schema.
So that when the admin gets notifications, the template they return also has a "redact_personalisation" boolean attached to it. Note, it won't do the redacting on the api - that'll be part of the admin. Under the hood, this uses an association_proxy, which is essentially black magic. But it proxies the `redact_personalisation` property of `TemplateRedacted` onto the `Template` object, so that Marshmallow can pick it up. Note: NOT currently added to NotificationWithTemplateHistory
This commit is contained in:
@@ -443,6 +443,8 @@ class Template(db.Model):
|
|||||||
default=NORMAL
|
default=NORMAL
|
||||||
)
|
)
|
||||||
|
|
||||||
|
redact_personalisation = association_proxy('template_redacted', 'redact_personalisation')
|
||||||
|
|
||||||
def get_link(self):
|
def get_link(self):
|
||||||
# TODO: use "/v2/" route once available
|
# TODO: use "/v2/" route once available
|
||||||
return url_for(
|
return url_for(
|
||||||
|
|||||||
+6
-1
@@ -297,6 +297,11 @@ class BaseTemplateSchema(BaseSchema):
|
|||||||
strict = True
|
strict = True
|
||||||
|
|
||||||
|
|
||||||
|
class TemplateRedactedSchema(BaseSchema):
|
||||||
|
class Meta:
|
||||||
|
model = models.TemplateRedacted
|
||||||
|
|
||||||
|
|
||||||
class TemplateSchema(BaseTemplateSchema):
|
class TemplateSchema(BaseTemplateSchema):
|
||||||
|
|
||||||
created_by = field_for(models.Template, 'created_by', required=True)
|
created_by = field_for(models.Template, 'created_by', required=True)
|
||||||
@@ -440,7 +445,7 @@ class NotificationWithTemplateSchema(BaseSchema):
|
|||||||
|
|
||||||
template = fields.Nested(
|
template = fields.Nested(
|
||||||
TemplateSchema,
|
TemplateSchema,
|
||||||
only=['id', 'version', 'name', 'template_type', 'content', 'subject'],
|
only=['id', 'version', 'name', 'template_type', 'content', 'subject', 'redact_personalisation'],
|
||||||
dump_only=True
|
dump_only=True
|
||||||
)
|
)
|
||||||
job = fields.Nested(JobSchema, only=["id", "original_file_name"], dump_only=True)
|
job = fields.Nested(JobSchema, only=["id", "original_file_name"], dump_only=True)
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ from freezegun import freeze_time
|
|||||||
from app import encryption
|
from app import encryption
|
||||||
from app.dao.users_dao import save_model_user
|
from app.dao.users_dao import save_model_user
|
||||||
from app.dao.services_dao import dao_remove_user_from_service
|
from app.dao.services_dao import dao_remove_user_from_service
|
||||||
|
from app.dao.templates_dao import dao_redact_template
|
||||||
from app.models import (
|
from app.models import (
|
||||||
User, Organisation, Rate, Service, ServicePermission, Notification,
|
User, Organisation, Rate, Service, ServicePermission, Notification,
|
||||||
DVLA_ORG_LAND_REGISTRY,
|
DVLA_ORG_LAND_REGISTRY,
|
||||||
@@ -19,7 +20,7 @@ from app.models import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
from tests import create_authorization_header
|
from tests import create_authorization_header
|
||||||
from tests.app.db import create_template, create_service_inbound_api, create_user
|
from tests.app.db import create_template, create_service_inbound_api, create_user, create_notification
|
||||||
from tests.app.conftest import (
|
from tests.app.conftest import (
|
||||||
sample_service as create_service,
|
sample_service as create_service,
|
||||||
sample_user_service_permission as create_user_service_permission,
|
sample_user_service_permission as create_user_service_permission,
|
||||||
@@ -2263,3 +2264,37 @@ def test_send_one_off_notification(admin_request, sample_template, mocker):
|
|||||||
|
|
||||||
noti = Notification.query.one()
|
noti = Notification.query.one()
|
||||||
assert response['id'] == str(noti.id)
|
assert response['id'] == str(noti.id)
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_notification_for_service_includes_template_redacted(admin_request, sample_notification):
|
||||||
|
resp = admin_request.get(
|
||||||
|
'service.get_notification_for_service',
|
||||||
|
service_id=sample_notification.service_id,
|
||||||
|
notification_id=sample_notification.id
|
||||||
|
)
|
||||||
|
|
||||||
|
assert resp['id'] == str(sample_notification.id)
|
||||||
|
assert resp['template']['redact_personalisation'] is False
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_all_notifications_for_service_includes_template_redacted(admin_request, sample_service):
|
||||||
|
normal_template = create_template(sample_service)
|
||||||
|
|
||||||
|
redacted_template = create_template(sample_service)
|
||||||
|
dao_redact_template(redacted_template, sample_service.created_by_id)
|
||||||
|
|
||||||
|
with freeze_time('2000-01-01'):
|
||||||
|
redacted_noti = create_notification(redacted_template)
|
||||||
|
with freeze_time('2000-01-02'):
|
||||||
|
normal_noti = create_notification(normal_template)
|
||||||
|
|
||||||
|
resp = admin_request.get(
|
||||||
|
'service.get_all_notifications_for_service',
|
||||||
|
service_id=sample_service.id
|
||||||
|
)
|
||||||
|
|
||||||
|
assert resp['notifications'][0]['id'] == str(normal_noti.id)
|
||||||
|
assert resp['notifications'][0]['template']['redact_personalisation'] is False
|
||||||
|
|
||||||
|
assert resp['notifications'][1]['id'] == str(redacted_noti.id)
|
||||||
|
assert resp['notifications'][1]['template']['redact_personalisation'] is True
|
||||||
|
|||||||
Reference in New Issue
Block a user