Merge pull request #1288 from alphagov/return-service_sms_sender_value

Return service_sms_sender
This commit is contained in:
Rebecca Law
2017-10-04 15:29:24 +01:00
committed by GitHub
7 changed files with 55 additions and 32 deletions

View File

@@ -36,6 +36,8 @@ def post_allocate_inbound_number(service_id):
if inbound_number: if inbound_number:
if not inbound_number.active: if not inbound_number.active:
dao_set_inbound_number_active_flag(service_id, active=True) dao_set_inbound_number_active_flag(service_id, active=True)
service = dao_fetch_service_by_id(service_id)
insert_or_update_service_sms_sender(service, inbound_number.number, inbound_number.id)
return jsonify(), 204 return jsonify(), 204
else: else:
return jsonify(), 200 return jsonify(), 200

View File

@@ -253,21 +253,19 @@ class Service(db.Model, Versioned):
if self.inbound_number and self.inbound_number.active: if self.inbound_number and self.inbound_number.active:
return self.inbound_number.number return self.inbound_number.number
else: else:
return self.sms_sender return self.get_default_sms_sender()
def get_default_sms_sender(self):
default_sms_sender = [x for x in self.service_sms_senders if x.is_default]
return default_sms_sender[0].sms_sender
def get_default_reply_to_email_address(self): def get_default_reply_to_email_address(self):
default_reply_to = [x for x in self.reply_to_email_addresses if x.is_default] default_reply_to = [x for x in self.reply_to_email_addresses if x.is_default]
if len(default_reply_to) > 1: return default_reply_to[0].email_address if default_reply_to else None
raise Exception("There should only ever be one default")
else:
return default_reply_to[0].email_address if default_reply_to else None
def get_default_letter_contact(self): def get_default_letter_contact(self):
default_letter_contact = [x for x in self.letter_contacts if x.is_default] default_letter_contact = [x for x in self.letter_contacts if x.is_default]
if len(default_letter_contact) > 1: return default_letter_contact[0].contact_block if default_letter_contact else None
raise Exception("There should only ever be one default")
else:
return default_letter_contact[0].contact_block if default_letter_contact else None
class InboundNumber(db.Model): class InboundNumber(db.Model):
@@ -306,7 +304,7 @@ class ServiceSmsSender(db.Model):
id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
sms_sender = db.Column(db.String(11), nullable=False) sms_sender = db.Column(db.String(11), nullable=False)
service_id = db.Column(UUID(as_uuid=True), db.ForeignKey('services.id'), unique=True, index=True, nullable=False) service_id = db.Column(UUID(as_uuid=True), db.ForeignKey('services.id'), unique=True, index=True, nullable=False)
service = db.relationship(Service, backref=db.backref("service_sms_senders", uselist=False)) service = db.relationship(Service, backref=db.backref("service_sms_senders", uselist=True))
is_default = db.Column(db.Boolean, nullable=False, default=True) is_default = db.Column(db.Boolean, nullable=False, default=True)
inbound_number_id = db.Column(UUID(as_uuid=True), db.ForeignKey('inbound_numbers.id'), inbound_number_id = db.Column(UUID(as_uuid=True), db.ForeignKey('inbound_numbers.id'),
unique=True, index=True, nullable=True) unique=True, index=True, nullable=True)
@@ -1030,7 +1028,7 @@ class Notification(db.Model):
return NOTIFICATION_STATUS_LETTER_ACCEPTED return NOTIFICATION_STATUS_LETTER_ACCEPTED
else: else:
# Currently can only be technical-failure # Currently can only be technical-failure
return status return self.status
def serialize_for_csv(self): def serialize_for_csv(self):
created_at_in_bst = convert_utc_to_bst(self.created_at) created_at_in_bst = convert_utc_to_bst(self.created_at)

View File

@@ -183,6 +183,7 @@ class ServiceSchema(BaseSchema):
permissions = fields.Method("service_permissions") permissions = fields.Method("service_permissions")
override_flag = False override_flag = False
reply_to_email_address = fields.Method(method_name="get_reply_to_email_address") reply_to_email_address = fields.Method(method_name="get_reply_to_email_address")
sms_sender = fields.Method(method_name="get_sms_sender")
letter_contact_block = fields.Method(method_name="get_letter_contact") letter_contact_block = fields.Method(method_name="get_letter_contact")
def get_free_sms_fragment_limit(selfs, service): def get_free_sms_fragment_limit(selfs, service):
@@ -194,6 +195,9 @@ class ServiceSchema(BaseSchema):
def get_reply_to_email_address(self, service): def get_reply_to_email_address(self, service):
return service.get_default_reply_to_email_address() return service.get_default_reply_to_email_address()
def get_sms_sender(self, service):
return service.get_default_sms_sender()
def get_letter_contact(self, service): def get_letter_contact(self, service):
return service.get_default_letter_contact() return service.get_default_letter_contact()

View File

@@ -95,8 +95,8 @@ def test_update_letter_notifications_to_sent_to_dvla_updates_based_on_notificati
client, client,
sample_letter_template sample_letter_template
): ):
first = create_notification(sample_letter_template) first = create_notification(sample_letter_template, reference='first ref')
second = create_notification(sample_letter_template) second = create_notification(sample_letter_template, reference='second ref')
dt = datetime.utcnow() dt = datetime.utcnow()
with freeze_time(dt): with freeze_time(dt):
@@ -113,8 +113,8 @@ def test_update_letter_notifications_to_error_updates_based_on_notification_refe
client, client,
sample_letter_template sample_letter_template
): ):
first = create_notification(sample_letter_template) first = create_notification(sample_letter_template, reference='first ref')
second = create_notification(sample_letter_template) second = create_notification(sample_letter_template, reference='second ref')
dt = datetime.utcnow() dt = datetime.utcnow()
with freeze_time(dt): with freeze_time(dt):

View File

@@ -28,8 +28,7 @@ from app.models import (
KEY_TYPE_NORMAL, KEY_TYPE_NORMAL,
ServiceInboundApi, ServiceInboundApi,
ServiceEmailReplyTo, ServiceEmailReplyTo,
ServiceLetterContact ServiceLetterContact, ServiceSmsSender)
)
from app.dao.users_dao import save_model_user from app.dao.users_dao import save_model_user
from app.dao.notifications_dao import dao_create_notification, dao_created_scheduled_notification from app.dao.notifications_dao import dao_create_notification, dao_created_scheduled_notification
from app.dao.templates_dao import dao_create_template from app.dao.templates_dao import dao_create_template
@@ -71,7 +70,7 @@ def create_service(
message_limit=1000, message_limit=1000,
restricted=restricted, restricted=restricted,
email_from=service_name.lower().replace(' ', '.'), email_from=service_name.lower().replace(' ', '.'),
created_by=user or create_user(), created_by=user or create_user(email='{}@digital.cabinet-office.gov.uk'.format(uuid.uuid4())),
sms_sender=sms_sender, sms_sender=sms_sender,
) )
@@ -143,9 +142,6 @@ def create_notification(
if not api_key: if not api_key:
api_key = create_api_key(template.service, key_type=key_type) api_key = create_api_key(template.service, key_type=key_type)
if template.template_type == LETTER_TYPE and reference is None:
reference = create_random_identifier()
data = { data = {
'id': uuid.uuid4(), 'id': uuid.uuid4(),
'to': to_field, 'to': to_field,
@@ -354,6 +350,24 @@ def create_reply_to_email(
return reply_to return reply_to
def create_service_sms_sender(
service,
sms_sender,
is_default=True
):
data = {
'service_id': service.id,
'sms_sender': sms_sender,
'is_default': is_default,
}
service_sms_sender = ServiceSmsSender(**data)
db.session.add(service_sms_sender)
db.session.commit()
return service_sms_sender
def create_letter_contact( def create_letter_contact(
service, service,
contact_block, contact_block,

View File

@@ -271,15 +271,14 @@ def test_should_not_send_to_provider_when_status_is_not_created(
def test_should_send_sms_sender_from_service_if_present( def test_should_send_sms_sender_from_service_if_present(
sample_service, notify_db_session,
sample_template,
mocker): mocker):
db_notification = create_notification(template=sample_template, service = create_service(sms_sender='elevenchars')
template = create_template(service=service)
db_notification = create_notification(template=template,
to_field="+447234123123", to_field="+447234123123",
status='created') status='created')
sample_service.sms_sender = 'elevenchars'
mocker.patch('app.mmg_client.send_sms') mocker.patch('app.mmg_client.send_sms')
mocker.patch('app.delivery.send_to_providers.create_initial_notification_statistic_tasks') mocker.patch('app.delivery.send_to_providers.create_initial_notification_statistic_tasks')
@@ -289,9 +288,9 @@ def test_should_send_sms_sender_from_service_if_present(
mmg_client.send_sms.assert_called_once_with( mmg_client.send_sms.assert_called_once_with(
to=validate_and_format_phone_number("+447234123123"), to=validate_and_format_phone_number("+447234123123"),
content="This is a template:\nwith a newline", content="Dear Sir/Madam, Hello. Yours Truly, The Government.",
reference=str(db_notification.id), reference=str(db_notification.id),
sender=sample_service.sms_sender sender=service.sms_sender
) )
@@ -656,16 +655,16 @@ def test_should_set_international_phone_number_to_sent_status(
('testing', 'testing', 'Sample service: bar'), ('testing', 'testing', 'Sample service: bar'),
]) ])
def test_should_handle_sms_sender_and_prefix_message( def test_should_handle_sms_sender_and_prefix_message(
sample_service,
mocker, mocker,
sms_sender, sms_sender,
expected_sender, expected_sender,
expected_content expected_content,
notify_db_session
): ):
mocker.patch('app.mmg_client.send_sms') mocker.patch('app.mmg_client.send_sms')
mocker.patch('app.delivery.send_to_providers.create_initial_notification_statistic_tasks') mocker.patch('app.delivery.send_to_providers.create_initial_notification_statistic_tasks')
sample_service.sms_sender = sms_sender service = create_service(sms_sender=sms_sender)
template = create_template(sample_service, content='bar') template = create_template(service, content='bar')
notification = create_notification(template) notification = create_notification(template)
send_to_providers.send_sms_to_provider(notification) send_to_providers.send_sms_to_provider(notification)

View File

@@ -26,6 +26,7 @@ from tests.app.db import (
create_service, create_service,
create_inbound_number, create_inbound_number,
create_reply_to_email, create_reply_to_email,
create_service_sms_sender,
create_letter_contact create_letter_contact
) )
from tests.conftest import set_config from tests.conftest import set_config
@@ -274,3 +275,8 @@ def test_service_get_default_contact_letter(sample_service):
create_letter_contact(service=sample_service, contact_block='London,\nNW1A 1AA') create_letter_contact(service=sample_service, contact_block='London,\nNW1A 1AA')
assert sample_service.get_default_letter_contact() == 'London,\nNW1A 1AA' assert sample_service.get_default_letter_contact() == 'London,\nNW1A 1AA'
def test_service_get_default_sms_sender(notify_db_session):
service = create_service(sms_sender='new_value')
assert service.get_default_sms_sender() == 'new_value'