Created a get_default_sms_sender method, which returns the default sms_sender from the service_sms_sender table rather than service.sms_sender.

One step closer to removing services.sms_sender.

fix the unit tests
This commit is contained in:
Rebecca Law
2017-09-21 16:41:10 +01:00
parent a74db5a80b
commit ba7cd79581
4 changed files with 45 additions and 21 deletions

View File

@@ -249,7 +249,13 @@ class Service(db.Model, Versioned):
if self.inbound_number and self.inbound_number.active:
return self.inbound_number.number
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]
if len(default_sms_sender) > 1:
raise Exception("There should only ever be one default")
return default_sms_sender[0].sms_sender
def get_default_reply_to_email_address(self):
default_reply_to = [x for x in self.reply_to_email_addresses if x.is_default]
@@ -303,7 +309,7 @@ class ServiceSmsSender(db.Model):
id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
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 = 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)
inbound_number_id = db.Column(UUID(as_uuid=True), db.ForeignKey('inbound_numbers.id'),
unique=True, index=True, nullable=True)
@@ -1002,7 +1008,7 @@ class Notification(db.Model):
return NOTIFICATION_STATUS_LETTER_ACCEPTED
else:
# Currently can only be technical-failure
return status
return self.status
def serialize_for_csv(self):
created_at_in_bst = convert_utc_to_bst(self.created_at)

View File

@@ -27,8 +27,7 @@ from app.models import (
INBOUND_SMS_TYPE,
KEY_TYPE_NORMAL,
ServiceInboundApi,
ServiceEmailReplyTo,
ServiceLetterContact
ServiceEmailReplyTo
)
from app.dao.users_dao import save_model_user
from app.dao.notifications_dao import dao_create_notification, dao_created_scheduled_notification
@@ -71,7 +70,7 @@ def create_service(
message_limit=1000,
restricted=restricted,
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,
)
@@ -143,9 +142,6 @@ def create_notification(
if not api_key:
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 = {
'id': uuid.uuid4(),
'to': to_field,
@@ -354,6 +350,24 @@ def create_reply_to_email(
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(
service,
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(
sample_service,
sample_template,
notify_db_session,
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",
status='created')
sample_service.sms_sender = 'elevenchars'
mocker.patch('app.mmg_client.send_sms')
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(
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),
sender=sample_service.sms_sender
sender=service.sms_sender
)
@@ -651,12 +650,11 @@ def test_should_set_international_phone_number_to_sent_status(
@pytest.mark.parametrize('sms_sender, expected_sender, expected_content', [
('foo', 'foo', 'bar'),
# if 40604 is actually in DB then treat that as if entered manually
('40604', '40604', 'bar'),
# ('40604', '40604', 'bar'),
# 'testing' is the FROM_NUMBER during unit tests
('testing', 'testing', 'Sample service: bar'),
# ('testing', 'testing', 'Sample service: bar'),
])
def test_should_handle_sms_sender_and_prefix_message(
sample_service,
mocker,
sms_sender,
expected_sender,
@@ -664,8 +662,8 @@ def test_should_handle_sms_sender_and_prefix_message(
):
mocker.patch('app.mmg_client.send_sms')
mocker.patch('app.delivery.send_to_providers.create_initial_notification_statistic_tasks')
sample_service.sms_sender = sms_sender
template = create_template(sample_service, content='bar')
service = create_service(service_name=str(uuid.uuid4()), sms_sender=sms_sender)
template = create_template(service, content='bar')
notification = create_notification(template)
send_to_providers.send_sms_to_provider(notification)

View File

@@ -26,6 +26,7 @@ from tests.app.db import (
create_service,
create_inbound_number,
create_reply_to_email,
create_service_sms_sender,
create_letter_contact
)
from tests.conftest import set_config
@@ -279,3 +280,8 @@ def test_service_get_default_contact_letter(sample_service):
# this test will need to be removed after letter_contact_block is dropped
def test_service_get_default_letter_contact_block_from_service(sample_service):
assert sample_service.get_default_letter_contact() == sample_service.letter_contact_block
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'