Quietly ignore extra personalisation

> If a user makes an API request with additional personalisation fields,
> we should simply discard any fields that the template doesn't have.
>
> This gives a couple of related advantages:
>
> - modifying template parameters no longer requires downtime for
>   clients - as they can pass in extra new parameters before a template
>   change, or continue passing in old unused parameters after removing
>   them from a template
>
> - services can pass in large user objects, for example, and then play
>   around with templates adding and removing fields at will
>
> we should make sure we still return an error if a user doesn't pass in
> a required parameter.

– https://www.pivotaltracker.com/story/show/140774195
This commit is contained in:
Chris Hill-Scott
2017-03-07 16:03:10 +00:00
parent b0d5def289
commit e507fed152
6 changed files with 7 additions and 27 deletions

View File

@@ -913,14 +913,12 @@ def test_create_template_raises_invalid_request_exception_with_missing_personali
assert {'template': ['Missing personalisation: Name']} == e.value.message
def test_create_template_raises_invalid_request_exception_with_too_much_personalisation_data(
def test_create_template_doesnt_raise_with_too_much_personalisation(
sample_template_with_placeholders
):
from app.notifications.rest import create_template_object_for_notification
template = Template.query.get(sample_template_with_placeholders.id)
with pytest.raises(InvalidRequest) as e:
create_template_object_for_notification(template, {'name': 'Jo', 'extra': 'stuff'})
assert {'template': ['Personalisation not needed for template: foo']} in e.value.message
create_template_object_for_notification(template, {'name': 'Jo', 'extra': 'stuff'})
@pytest.mark.parametrize(