def update_broadcast_message(service_id, broadcast_message_id): data = request.get_json() validate(data, update_broadcast_message_schema) broadcast_message = dao_get_broadcast_message_by_id_and_service_id(broadcast_message_id, service_id) if broadcast_message.status not in BroadcastStatusType.PRE_BROADCAST_STATUSES: raise InvalidRequest( f'Cannot update broadcast_message {broadcast_message.id} while it has status {broadcast_message.status}', status_code=400 ) if ('areas' in data and 'simple_polygons' not in data) or ('areas' not in data and 'simple_polygons' in data): raise InvalidRequest( f'Cannot update broadcast_message {broadcast_message.id}, areas or polygons are missing.', status_code=400 ) if 'personalisation' in data: broadcast_message.personalisation = data['personalisation'] if 'starts_at' in data: 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 and 'simple_polygons' in data: broadcast_message.areas = {"areas": data["areas"], "simple_polygons": data["simple_polygons"]} dao_save_object(broadcast_message) return jsonify(broadcast_message.serialize()), 200
def update_broadcast_message_status(service_id, broadcast_message_id): data = request.get_json() validate(data, update_broadcast_message_status_schema) broadcast_message = dao_get_broadcast_message_by_id_and_service_id(broadcast_message_id, service_id) new_status = data['status'] updating_user = get_user_by_id(data['created_by']) _update_broadcast_message(broadcast_message, new_status, updating_user) dao_save_object(broadcast_message) if new_status in {BroadcastStatusType.BROADCASTING, BroadcastStatusType.CANCELLED}: _create_broadcast_event(broadcast_message) return jsonify(broadcast_message.serialize()), 200
def test_valid_post_cap_xml_broadcast_sets_stubbed_to_true_for_training_mode_services( client, sample_broadcast_service, training_mode_service): sample_broadcast_service.restricted = training_mode_service auth_header = create_authorization_header( service_id=sample_broadcast_service.id) response = client.post( path='/v2/broadcast', data=sample_cap_xml_documents.WAINFLEET, headers=[('Content-Type', 'application/cap+xml'), auth_header], ) assert response.status_code == 201 response_json = json.loads(response.get_data(as_text=True)) broadcast_message = dao_get_broadcast_message_by_id_and_service_id( response_json['id'], sample_broadcast_service.id) assert broadcast_message.stubbed == training_mode_service
def test_create_broadcast_message(admin_request, sample_broadcast_service, training_mode_service): sample_broadcast_service.restricted = training_mode_service t = create_template(sample_broadcast_service, BROADCAST_TYPE) response = admin_request.post('broadcast_message.create_broadcast_message', _data={ 'template_id': str(t.id), 'service_id': str(t.service_id), 'created_by': str(t.created_by_id), }, service_id=t.service_id, _expected_status=201) assert response['template_name'] == t.name assert response['status'] == BroadcastStatusType.DRAFT assert response['created_at'] is not None assert response['created_by_id'] == str(t.created_by_id) assert response['personalisation'] == {} assert response['areas'] == [] broadcast_message = dao_get_broadcast_message_by_id_and_service_id( response["id"], sample_broadcast_service.id) assert broadcast_message.stubbed == training_mode_service
def get_broadcast_message(service_id, broadcast_message_id): return jsonify(dao_get_broadcast_message_by_id_and_service_id(broadcast_message_id, service_id).serialize())