diff --git a/app/dao/service_sms_sender_dao.py b/app/dao/service_sms_sender_dao.py index a2c4fa9ea..bf718fee8 100644 --- a/app/dao/service_sms_sender_dao.py +++ b/app/dao/service_sms_sender_dao.py @@ -1,3 +1,5 @@ +from sqlalchemy import desc + from app import db from app.dao.dao_utils import transactional from app.models import ServiceSmsSender @@ -42,7 +44,7 @@ def dao_get_service_sms_senders_by_id(service_id, service_sms_sender_id): def dao_get_sms_senders_by_service_id(service_id): - return ServiceSmsSender.query.filter_by(service_id=service_id).all() + return ServiceSmsSender.query.filter_by(service_id=service_id).order_by(desc(ServiceSmsSender.is_default)).all() @transactional diff --git a/app/models.py b/app/models.py index 74bcd7cfc..36fb8c949 100644 --- a/app/models.py +++ b/app/models.py @@ -317,9 +317,9 @@ class ServiceSmsSender(db.Model): return { "id": str(self.id), "sms_sender": self.sms_sender, - "service_id": self.service_id, + "service_id": str(self.service_id), "is_default": self.is_default, - "inbound_number_id": self.inbound_number_id, + "inbound_number_id": str(self.inbound_number_id) if self.inbound_number_id else None, "created_at": self.created_at.strftime(DATETIME_FORMAT), "updated_at": self.updated_at.strftime(DATETIME_FORMAT) if self.updated_at else None, } diff --git a/app/service/rest.py b/app/service/rest.py index 7abc645d9..d4da620f2 100644 --- a/app/service/rest.py +++ b/app/service/rest.py @@ -24,7 +24,7 @@ from app.dao.service_inbound_api_dao import ( get_service_inbound_api ) from app.dao.service_sms_sender_dao import insert_or_update_service_sms_sender, dao_add_sms_sender_for_service, \ - dao_update_service_sms_sender, dao_get_service_sms_senders_by_id + dao_update_service_sms_sender, dao_get_service_sms_senders_by_id, dao_get_sms_senders_by_service_id from app.dao.services_dao import ( dao_fetch_service_by_id, dao_fetch_all_services, @@ -655,6 +655,19 @@ def update_service_sms_sender(service_id, sms_sender_id): return jsonify(data=new_sms_sender.serialize()), 200 +@service_blueprint.route('//sms-sender/', methods=['GET']) +def get_service_sms_sender_by_id(service_id, sms_sender_id): + sms_sender = dao_get_service_sms_senders_by_id(service_id=service_id, + service_sms_sender_id=sms_sender_id) + return jsonify(data=sms_sender.serialize()), 200 + + +@service_blueprint.route('//sms-sender', methods=['GET']) +def get_service_sms_senders_for_service(service_id): + sms_senders = dao_get_sms_senders_by_service_id(service_id=service_id) + return jsonify(data=[sms_sender.serialize() for sms_sender in sms_senders]), 200 + + @service_blueprint.route('/unique', methods=["GET"]) def is_service_name_unique(): name, email_from = check_request_args(request) diff --git a/app/service/service_senders_schema.py b/app/service/service_senders_schema.py index ef30b0bd3..9d168cb8d 100644 --- a/app/service/service_senders_schema.py +++ b/app/service/service_senders_schema.py @@ -37,4 +37,4 @@ add_service_sms_sender_request = { "inbound_number_id": uuid }, "required": ["sms_sender", "is_default"] -} \ No newline at end of file +} diff --git a/tests/app/service/test_rest.py b/tests/app/service/test_rest.py index edf38e7ff..9b9e0ef07 100644 --- a/tests/app/service/test_rest.py +++ b/tests/app/service/test_rest.py @@ -2678,6 +2678,7 @@ def test_update_service_sms_sender_switches_default(client, notify_db_session): assert response.status_code == 200 resp_json = json.loads(response.get_data(as_text=True))['data'] assert resp_json['sms_sender'] == 'second' + print(resp_json) assert not resp_json['inbound_number_id'] assert resp_json['is_default'] sms_senders = ServiceSmsSender.query.filter_by(sms_sender='first').first() @@ -2716,3 +2717,58 @@ def test_update_service_sms_sender_return_404_when_service_does_not_exist(client result = json.loads(response.get_data(as_text=True)) assert result['result'] == 'error' assert result['message'] == 'No result found' + + +def test_get_service_sms_sender_by_id(client, notify_db_session): + service_sms_sender = create_service_sms_sender(service=create_service(), + sms_sender='1235', + is_default=False) + response = client.get('/service/{}/sms-sender/{}'.format(service_sms_sender.service_id, service_sms_sender.id), + headers=[('Content-Type', 'application/json'), create_authorization_header()] + ) + assert response.status_code == 200 + assert json.loads(response.get_data(as_text=True))['data'] == service_sms_sender.serialize() + + +def test_get_service_sms_sender_by_id_returns_404_when_service_does_not_exist(client, notify_db_session): + service_sms_sender = create_service_sms_sender(service=create_service(), + sms_sender='1235', + is_default=False) + response = client.get('/service/{}/sms-sender/{}'.format(uuid.uuid4(), service_sms_sender.id), + headers=[('Content-Type', 'application/json'), create_authorization_header()] + ) + assert response.status_code == 404 + + +def test_get_service_sms_sender_by_id_returns_404_when_sms_sender_does_not_exist(client, notify_db_session): + service_sms_sender = create_service_sms_sender(service=create_service(), + sms_sender='1235', + is_default=False) + response = client.get('/service/{}/sms-sender/{}'.format(service_sms_sender.service_id, uuid.uuid4()), + headers=[('Content-Type', 'application/json'), create_authorization_header()] + ) + assert response.status_code == 404 + + +def test_get_service_sms_senders_for_service(client, notify_db_session): + service_sms_sender = create_service_sms_sender(service=create_service(sms_sender='first'), + sms_sender='second', + is_default=False) + response = client.get('/service/{}/sms-sender'.format(service_sms_sender.service_id), + headers=[('Content-Type', 'application/json'), create_authorization_header()] + ) + assert response.status_code == 200 + json_resp = json.loads(response.get_data(as_text=True))['data'] + assert len(json_resp) == 2 + assert json_resp[0]['is_default'] + assert json_resp[0]['sms_sender'] == 'first' + assert not json_resp[1]['is_default'] + assert json_resp[1]['sms_sender'] == 'second' + + +def test_get_service_sms_senders_for_service_returns_empty_list_when_service_does_not_exist(client): + response = client.get('/service/{}/sms-sender'.format(uuid.uuid4()), + headers=[('Content-Type', 'application/json'), create_authorization_header()] + ) + assert response.status_code == 200 + assert json.loads(response.get_data(as_text=True))['data'] == []