mirror of
https://github.com/GSA/notifications-api.git
synced 2026-05-05 16:48:31 -04:00
Start allowing any three lines in addresses
This is part of moving away from `postcode` and towards `address line 7` We think it will be easier for people to map their existing data to our API if we let them fill in any 3 lines, instead of requiring at least 1, 2, and postcode specifically.
This commit is contained in:
@@ -27,29 +27,6 @@ personalisation = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
letter_personalisation = dict(
|
|
||||||
personalisation,
|
|
||||||
properties={
|
|
||||||
"address_line_1": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1,
|
|
||||||
"validationMessage": "address_line_1 is required"
|
|
||||||
},
|
|
||||||
"address_line_2": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1,
|
|
||||||
"validationMessage": "address_line_2 is required"
|
|
||||||
},
|
|
||||||
"postcode": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1,
|
|
||||||
"validationMessage": "postcode is required"
|
|
||||||
},
|
|
||||||
},
|
|
||||||
required=["address_line_1", "address_line_2", "postcode"],
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
https_url = {
|
https_url = {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"format": "uri",
|
"format": "uri",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ from app.models import (
|
|||||||
NOTIFICATION_STATUS_LETTER_RECEIVED,
|
NOTIFICATION_STATUS_LETTER_RECEIVED,
|
||||||
TEMPLATE_TYPES
|
TEMPLATE_TYPES
|
||||||
)
|
)
|
||||||
from app.schema_validation.definitions import (uuid, personalisation, letter_personalisation)
|
from app.schema_validation.definitions import (uuid, personalisation)
|
||||||
|
|
||||||
|
|
||||||
template = {
|
template = {
|
||||||
@@ -226,7 +226,7 @@ post_letter_request = {
|
|||||||
"properties": {
|
"properties": {
|
||||||
"reference": {"type": "string"},
|
"reference": {"type": "string"},
|
||||||
"template_id": uuid,
|
"template_id": uuid,
|
||||||
"personalisation": letter_personalisation
|
"personalisation": personalisation
|
||||||
},
|
},
|
||||||
"required": ["template_id", "personalisation"],
|
"required": ["template_id", "personalisation"],
|
||||||
"additionalProperties": False
|
"additionalProperties": False
|
||||||
|
|||||||
@@ -348,8 +348,22 @@ def process_letter_notification(*, letter_data, api_key, template, reply_to_text
|
|||||||
template=template,
|
template=template,
|
||||||
reply_to_text=reply_to_text)
|
reply_to_text=reply_to_text)
|
||||||
|
|
||||||
if not PostalAddress.from_personalisation(letter_data['personalisation']).postcode:
|
address = PostalAddress.from_personalisation(letter_data['personalisation'])
|
||||||
raise ValidationError(message='Must be a real UK postcode')
|
|
||||||
|
if not address.has_enough_lines:
|
||||||
|
raise ValidationError(
|
||||||
|
message=f'Address must be at least {PostalAddress.MIN_LINES} lines'
|
||||||
|
)
|
||||||
|
|
||||||
|
if address.has_too_many_lines:
|
||||||
|
raise ValidationError(
|
||||||
|
message=f'Address must be no more than {PostalAddress.MAX_LINES} lines'
|
||||||
|
)
|
||||||
|
|
||||||
|
if not address.postcode:
|
||||||
|
raise ValidationError(
|
||||||
|
message='Must be a real UK postcode'
|
||||||
|
)
|
||||||
|
|
||||||
test_key = api_key.key_type == KEY_TYPE_TEST
|
test_key = api_key.key_type == KEY_TYPE_TEST
|
||||||
|
|
||||||
|
|||||||
@@ -270,9 +270,7 @@ def test_post_letter_notification_returns_400_for_empty_personalisation(
|
|||||||
assert error_json['status_code'] == 400
|
assert error_json['status_code'] == 400
|
||||||
assert all([e['error'] == 'ValidationError' for e in error_json['errors']])
|
assert all([e['error'] == 'ValidationError' for e in error_json['errors']])
|
||||||
assert set([e['message'] for e in error_json['errors']]) == {
|
assert set([e['message'] for e in error_json['errors']]) == {
|
||||||
'personalisation address_line_1 is required',
|
'Address must be at least 3 lines',
|
||||||
'personalisation address_line_2 is required',
|
|
||||||
'personalisation postcode is required'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -344,15 +342,12 @@ def test_notification_returns_400_if_address_doesnt_have_underscores(
|
|||||||
error_json = letter_request(client, data, service_id=sample_letter_template.service_id, _expected_status=400)
|
error_json = letter_request(client, data, service_id=sample_letter_template.service_id, _expected_status=400)
|
||||||
|
|
||||||
assert error_json['status_code'] == 400
|
assert error_json['status_code'] == 400
|
||||||
assert len(error_json['errors']) == 2
|
assert error_json['errors'] == [
|
||||||
assert {
|
{
|
||||||
'error': 'ValidationError',
|
'error': 'ValidationError',
|
||||||
'message': 'personalisation address_line_1 is a required property'
|
'message': 'Address must be at least 3 lines'
|
||||||
} in error_json['errors']
|
}
|
||||||
assert {
|
]
|
||||||
'error': 'ValidationError',
|
|
||||||
'message': 'personalisation address_line_2 is a required property'
|
|
||||||
} in error_json['errors']
|
|
||||||
|
|
||||||
|
|
||||||
def test_returns_a_429_limit_exceeded_if_rate_limit_exceeded(
|
def test_returns_a_429_limit_exceeded_if_rate_limit_exceeded(
|
||||||
|
|||||||
Reference in New Issue
Block a user