mirror of
https://github.com/GSA/notifications-api.git
synced 2026-08-23 07:46:06 -04:00
Merge pull request #1288 from alphagov/return-service_sms_sender_value
Return service_sms_sender
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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'
|
||||||
|
|||||||
Reference in New Issue
Block a user