diff --git a/app/broadcast_message/broadcast_message_schema.py b/app/broadcast_message/broadcast_message_schema.py index 743ca54d7..3d617533a 100644 --- a/app/broadcast_message/broadcast_message_schema.py +++ b/app/broadcast_message/broadcast_message_schema.py @@ -14,6 +14,7 @@ create_broadcast_message_schema = { 'starts_at': {'type': 'string', 'format': 'datetime'}, 'finishes_at': {'type': 'string', 'format': 'datetime'}, 'areas': {"type": "array", "items": {"type": "string"}}, + 'simple_polygons': {"type": "array", "items": {"type": "array"}}, }, 'required': ['template_id', 'service_id', 'created_by'], 'additionalProperties': False @@ -29,6 +30,7 @@ update_broadcast_message_schema = { 'starts_at': {'type': 'string', 'format': 'datetime'}, 'finishes_at': {'type': 'string', 'format': 'datetime'}, 'areas': {"type": "array", "items": {"type": "string"}}, + 'simple_polygons': {"type": "array", "items": {"type": "array"}}, }, 'required': [], 'additionalProperties': False diff --git a/app/broadcast_message/rest.py b/app/broadcast_message/rest.py index db7f459c8..1438b29f9 100644 --- a/app/broadcast_message/rest.py +++ b/app/broadcast_message/rest.py @@ -101,7 +101,7 @@ def create_broadcast_message(service_id): template_id=template.id, template_version=template.version, personalisation=data.get('personalisation', {}), - areas=data.get('areas', []), + areas=data.get('areas', {}), status=BroadcastStatusType.DRAFT, starts_at=_parse_nullable_datetime(data.get('starts_at')), finishes_at=_parse_nullable_datetime(data.get('finishes_at')), @@ -133,8 +133,8 @@ def update_broadcast_message(service_id, broadcast_message_id): broadcast_message.starts_at = _parse_nullable_datetime(data['starts_at']) if 'finishes_at' in data: broadcast_message.finishes_at = _parse_nullable_datetime(data['finishes_at']) - if 'areas' in data: - broadcast_message.areas = data['areas'] + if 'areas' in data and 'simple_polygons' in data: + broadcast_message.areas = {"areas": data["areas"], "simple_polygons": data["simple_polygons"]} dao_save_object(broadcast_message) diff --git a/app/models.py b/app/models.py index 72e900af4..cde9874a7 100644 --- a/app/models.py +++ b/app/models.py @@ -2263,7 +2263,7 @@ class BroadcastMessage(db.Model): 'template_name': self.template.name, 'personalisation': self.personalisation, - 'areas': self.areas, + 'areas': self.areas.get("areas", []), 'status': self.status, diff --git a/tests/app/broadcast_message/test_rest.py b/tests/app/broadcast_message/test_rest.py index d9c04cc9d..2a17451b2 100644 --- a/tests/app/broadcast_message/test_rest.py +++ b/tests/app/broadcast_message/test_rest.py @@ -11,7 +11,10 @@ from tests.app.db import create_broadcast_message, create_template, create_servi def test_get_broadcast_message(admin_request, sample_service): t = create_template(sample_service, BROADCAST_TYPE) - bm = create_broadcast_message(t, areas=['place A', 'region B']) + bm = create_broadcast_message(t, areas={ + "areas": ['place A', 'region B'], + "simple_polygons": [[50.1, 1.2], [50.12, 1.2]] + }) response = admin_request.get( 'broadcast_message.get_broadcast_message', @@ -177,7 +180,10 @@ def test_update_broadcast_message_doesnt_allow_edits_after_broadcast_goes_live(a def test_update_broadcast_message_sets_finishes_at_separately(admin_request, sample_service): t = create_template(sample_service, BROADCAST_TYPE) - bm = create_broadcast_message(t, areas=['manchester']) + bm = create_broadcast_message( + t, + areas={"areas": ['london'], "simple_polygons": [[50.12, 1.2], [50.13, 1.2], [50.14, 1.21]]} + ) response = admin_request.post( 'broadcast_message.update_broadcast_message', diff --git a/tests/app/celery/test_broadcast_message_tasks.py b/tests/app/celery/test_broadcast_message_tasks.py index b39744e2f..e6c82c35a 100644 --- a/tests/app/celery/test_broadcast_message_tasks.py +++ b/tests/app/celery/test_broadcast_message_tasks.py @@ -11,7 +11,11 @@ from tests.app.db import create_template, create_broadcast_message, create_broad def test_send_broadcast_message_sends_data_correctly(sample_service): template = create_template(sample_service, BROADCAST_TYPE) - broadcast_message = create_broadcast_message(template, areas=['london'], status=BroadcastStatusType.BROADCASTING) + broadcast_message = create_broadcast_message( + template, + areas={"areas": ['london'], "simple_polygons": [[50.12, 1.2], [50.13, 1.2], [50.14, 1.21]]}, + status=BroadcastStatusType.BROADCASTING + ) with requests_mock.Mocker() as request_mock: request_mock.post("http://test-cbc-proxy/broadcasts/stub-1", json={'valid': 'true'}, status_code=200) @@ -29,7 +33,11 @@ def test_send_broadcast_message_sends_data_correctly(sample_service): def test_send_broadcast_message_sends_old_version_of_template(sample_service): template = create_template(sample_service, BROADCAST_TYPE, content='first content') - broadcast_message = create_broadcast_message(template, areas=['london'], status=BroadcastStatusType.BROADCASTING) + broadcast_message = create_broadcast_message( + template, + areas={"areas": ['london'], "simple_polygons": [[50.12, 1.2], [50.13, 1.2], [50.14, 1.21]]}, + status=BroadcastStatusType.BROADCASTING + ) template.content = 'second content' dao_update_template(template) diff --git a/tests/app/db.py b/tests/app/db.py index 75d4edeaa..89e42ec15 100644 --- a/tests/app/db.py +++ b/tests/app/db.py @@ -1006,7 +1006,7 @@ def create_broadcast_message( status=BroadcastStatusType.DRAFT, starts_at=None, finishes_at=None, - areas=[], + areas={}, ): broadcast_message = BroadcastMessage( service_id=template.service_id,