From 5439b01a6e3d108b3195357b965bc3a4bab00f6d Mon Sep 17 00:00:00 2001 From: Rebecca Law Date: Tue, 12 Sep 2017 12:09:32 +0100 Subject: [PATCH] When an inbound number is allocated insert or update a row in service_sms_senders. --- app/dao/service_sms_sender_dao.py | 12 +++++++++--- app/inbound_number/rest.py | 4 ++++ app/schemas.py | 6 ++++-- tests/app/inbound_number/test_rest.py | 26 ++++++++++++++++++++------ 4 files changed, 37 insertions(+), 11 deletions(-) diff --git a/app/dao/service_sms_sender_dao.py b/app/dao/service_sms_sender_dao.py index 70e1325cb..18760cd29 100644 --- a/app/dao/service_sms_sender_dao.py +++ b/app/dao/service_sms_sender_dao.py @@ -4,23 +4,29 @@ from app.models import ServiceSmsSender @transactional -def insert_or_update_service_sms_sender(service, sms_sender): +def insert_or_update_service_sms_sender(service, sms_sender, inbound_number_id=None): result = db.session.query( ServiceSmsSender ).filter( ServiceSmsSender.service_id == service.id ).update( - {'sms_sender': sms_sender} + {'sms_sender': sms_sender, + 'inbound_number_id': inbound_number_id + } ) if result == 0: new_sms_sender = ServiceSmsSender(sms_sender=sms_sender, service=service, - is_default=True + is_default=True, + inbound_number_id=inbound_number_id ) db.session.add(new_sms_sender) def insert_service_sms_sender(service, sms_sender): + """ + This method is called from create_service which is wrapped in a transaction. + """ new_sms_sender = ServiceSmsSender(sms_sender=sms_sender, service=service, is_default=True diff --git a/app/inbound_number/rest.py b/app/inbound_number/rest.py index 0127e4c8c..db5a52f4f 100644 --- a/app/inbound_number/rest.py +++ b/app/inbound_number/rest.py @@ -7,6 +7,8 @@ from app.dao.inbound_numbers_dao import ( dao_set_inbound_number_to_service, dao_set_inbound_number_active_flag ) +from app.dao.service_sms_sender_dao import insert_or_update_service_sms_sender +from app.dao.services_dao import dao_fetch_service_by_id from app.errors import InvalidRequest, register_errors inbound_number_blueprint = Blueprint('inbound_number', __name__, url_prefix='/inbound-number') @@ -42,6 +44,8 @@ def post_allocate_inbound_number(service_id): if len(available_numbers) > 0: dao_set_inbound_number_to_service(service_id, available_numbers[0]) + service = dao_fetch_service_by_id(service_id) + insert_or_update_service_sms_sender(service, available_numbers[0].number, available_numbers[0].id) return jsonify(), 204 else: raise InvalidRequest('No available inbound numbers', status_code=400) diff --git a/app/schemas.py b/app/schemas.py index 6a32e22ac..02856c824 100644 --- a/app/schemas.py +++ b/app/schemas.py @@ -202,7 +202,8 @@ class ServiceSchema(BaseSchema): 'template_statistics', 'service_provider_stats', 'service_notification_stats', - 'service_sms_senders' + 'service_sms_senders', + 'monthly_billing' ) strict = True @@ -254,7 +255,8 @@ class DetailedServiceSchema(BaseSchema): 'service_provider_stats', 'service_notification_stats', 'organisation', - 'service_sms_senders' + 'service_sms_senders', + 'monthly_billing' ) diff --git a/tests/app/inbound_number/test_rest.py b/tests/app/inbound_number/test_rest.py index a5268f283..37a04829f 100644 --- a/tests/app/inbound_number/test_rest.py +++ b/tests/app/inbound_number/test_rest.py @@ -1,10 +1,5 @@ -import pytest - -from flask import url_for -import json - -from app.models import InboundNumber from app.dao.inbound_numbers_dao import dao_get_inbound_number_for_service +from app.models import ServiceSmsSender from tests.app.db import create_service, create_inbound_number @@ -115,3 +110,22 @@ def test_rest_set_inbound_number_active_flag_off( inbound_number_from_db = dao_get_inbound_number_for_service(service.id) assert not inbound_number_from_db.active + + +def test_allocate_inbound_number_insert_update_service_sms_sender( + admin_request, notify_db_session +): + service = create_service() + inbound_number = create_inbound_number(number='123') + + admin_request.post( + 'inbound_number.post_allocate_inbound_number', + _expected_status=204, + service_id=service.id + ) + + service_sms_senders = ServiceSmsSender.query.all() + assert len(service_sms_senders) == 1 + assert service_sms_senders[0].sms_sender == inbound_number.number + assert service_sms_senders[0].inbound_number_id == inbound_number.id + assert service_sms_senders[0].is_default