mirror of
https://github.com/GSA/notifications-api.git
synced 2026-09-11 18:38:14 -04:00
Refactor the sms sender code to remove any unused methods.
Refactor tests/db/create_service() to behave more like the real world. Created new create_service_with_inbound_number and create_service_with_defined_sms_sender() test/db methods.
This commit is contained in:
@@ -159,8 +159,6 @@ def dao_create_service(service, user, service_id=None, service_permissions=None)
|
||||
# the default property does not appear to work when there is a difference between the sqlalchemy schema and the
|
||||
# db schema (ie: during a migration), so we have to set sms_sender manually here. After the GOVUK sms_sender
|
||||
# migration is completed, this code should be able to be removed.
|
||||
if not service.sms_sender:
|
||||
service.sms_sender = current_app.config['FROM_NUMBER']
|
||||
|
||||
if service_permissions is None:
|
||||
service_permissions = DEFAULT_SERVICE_PERMISSIONS
|
||||
@@ -179,7 +177,8 @@ def dao_create_service(service, user, service_id=None, service_permissions=None)
|
||||
service_permission = ServicePermission(service_id=service.id, permission=permission)
|
||||
service.permissions.append(service_permission)
|
||||
|
||||
insert_service_sms_sender(service, service.sms_sender)
|
||||
# do we just add the default - or will we get a value from FE?
|
||||
insert_service_sms_sender(service, current_app.config['FROM_NUMBER'])
|
||||
dao_insert_annual_billing(service)
|
||||
db.session.add(service)
|
||||
|
||||
|
||||
@@ -4,12 +4,9 @@ from app.dao.inbound_numbers_dao import (
|
||||
dao_get_inbound_numbers,
|
||||
dao_get_inbound_number_for_service,
|
||||
dao_get_available_inbound_numbers,
|
||||
dao_set_inbound_number_to_service,
|
||||
dao_set_inbound_number_active_flag,
|
||||
dao_allocate_number_for_service)
|
||||
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
|
||||
dao_set_inbound_number_active_flag
|
||||
)
|
||||
from app.errors import register_errors
|
||||
|
||||
inbound_number_blueprint = Blueprint('inbound_number', __name__, url_prefix='/inbound-number')
|
||||
register_errors(inbound_number_blueprint)
|
||||
@@ -29,46 +26,12 @@ def get_inbound_number_for_service(service_id):
|
||||
return jsonify(data=inbound_number.serialize() if inbound_number else {})
|
||||
|
||||
|
||||
@inbound_number_blueprint.route('/service/<uuid:service_id>', methods=['POST'])
|
||||
def post_allocate_inbound_number(service_id):
|
||||
inbound_number = dao_get_inbound_number_for_service(service_id)
|
||||
|
||||
if inbound_number:
|
||||
if not inbound_number.active:
|
||||
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
|
||||
else:
|
||||
return jsonify(), 200
|
||||
|
||||
available_numbers = dao_get_available_inbound_numbers()
|
||||
|
||||
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)
|
||||
|
||||
|
||||
@inbound_number_blueprint.route('/service/<uuid:service_id>/off', methods=['POST'])
|
||||
def post_set_inbound_number_off(service_id):
|
||||
dao_set_inbound_number_active_flag(service_id, active=False)
|
||||
return jsonify(), 204
|
||||
|
||||
|
||||
@inbound_number_blueprint.route('<uuid:inbound_number_id>/service/<uuid:service_id>', methods=['POST'])
|
||||
def allocate_inbound_number_to_service(inbound_number_id, service_id):
|
||||
service = dao_fetch_service_by_id(service_id=service_id, only_active=True)
|
||||
updated_inbound_number = dao_allocate_number_for_service(service_id=service_id, inbound_number_id=inbound_number_id)
|
||||
insert_or_update_service_sms_sender(service=service,
|
||||
sms_sender=updated_inbound_number.number,
|
||||
inbound_number_id=inbound_number_id)
|
||||
return jsonify(), 204
|
||||
|
||||
|
||||
@inbound_number_blueprint.route('/available', methods=['GET'])
|
||||
def get_available_inbound_numbers():
|
||||
inbound_numbers = [i.serialize() for i in dao_get_available_inbound_numbers()]
|
||||
|
||||
+1
-1
@@ -223,7 +223,7 @@ class Service(db.Model, Versioned):
|
||||
created_by_id = db.Column(UUID(as_uuid=True), db.ForeignKey('users.id'), index=True, nullable=False)
|
||||
_reply_to_email_address = db.Column("reply_to_email_address", db.Text, index=False, unique=False, nullable=True)
|
||||
_letter_contact_block = db.Column('letter_contact_block', db.Text, index=False, unique=False, nullable=True)
|
||||
sms_sender = db.Column(db.String(11), nullable=False, default=lambda: current_app.config['FROM_NUMBER'])
|
||||
sms_sender = db.Column(db.String(11), nullable=True)
|
||||
prefix_sms = db.Column(db.Boolean, nullable=True)
|
||||
organisation_id = db.Column(UUID(as_uuid=True), db.ForeignKey('organisation.id'), index=True, nullable=True)
|
||||
free_sms_fragment_limit = db.Column(db.BigInteger, index=False, unique=False, nullable=True)
|
||||
|
||||
+8
-7
@@ -24,12 +24,12 @@ 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_get_sms_senders_by_service_id,
|
||||
update_existing_sms_sender_with_inbound_number)
|
||||
update_existing_sms_sender_with_inbound_number
|
||||
)
|
||||
from app.dao.services_dao import (
|
||||
dao_fetch_service_by_id,
|
||||
dao_fetch_all_services,
|
||||
@@ -74,7 +74,10 @@ from app.errors import (
|
||||
register_errors
|
||||
)
|
||||
|
||||
from app.models import Service, ServiceInboundApi, AnnualBilling
|
||||
from app.models import (
|
||||
Service,
|
||||
ServiceInboundApi
|
||||
)
|
||||
from app.schema_validation import validate
|
||||
from app.service import statistics
|
||||
from app.service.service_inbound_api_schema import (
|
||||
@@ -84,7 +87,8 @@ from app.service.service_inbound_api_schema import (
|
||||
from app.service.service_senders_schema import (
|
||||
add_service_email_reply_to_request,
|
||||
add_service_letter_contact_block_request,
|
||||
add_service_sms_sender_request)
|
||||
add_service_sms_sender_request
|
||||
)
|
||||
from app.service.utils import get_whitelist_objects
|
||||
from app.service.sender import send_notification_to_service_users
|
||||
from app.service.send_notification import send_one_off_notification
|
||||
@@ -196,9 +200,6 @@ def update_service(service_id):
|
||||
if 'reply_to_email_address' in req_json:
|
||||
create_or_update_email_reply_to(fetched_service.id, req_json['reply_to_email_address'])
|
||||
|
||||
if 'sms_sender' in req_json:
|
||||
insert_or_update_service_sms_sender(fetched_service, req_json['sms_sender'])
|
||||
|
||||
if 'letter_contact_block' in req_json:
|
||||
create_or_update_letter_contact(fetched_service.id, req_json['letter_contact_block'])
|
||||
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
"""
|
||||
|
||||
Revision ID: 2054e740350f
|
||||
Revises: 0132_add_sms_prefix_setting
|
||||
Create Date: 2017-11-06 15:44:59.471977
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
from sqlalchemy.dialects import postgresql
|
||||
|
||||
revision = '0133_sms_sender_nullable'
|
||||
down_revision = '0132_add_sms_prefix_setting'
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.drop_table('notification_statistics')
|
||||
op.alter_column('services', 'sms_sender',
|
||||
existing_type=sa.VARCHAR(length=11),
|
||||
nullable=True)
|
||||
op.alter_column('services_history', 'sms_sender',
|
||||
existing_type=sa.VARCHAR(length=11),
|
||||
nullable=True)
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.alter_column('services_history', 'sms_sender',
|
||||
existing_type=sa.VARCHAR(length=11),
|
||||
nullable=False)
|
||||
op.alter_column('services', 'sms_sender',
|
||||
existing_type=sa.VARCHAR(length=11),
|
||||
nullable=False)
|
||||
op.create_table('notification_statistics',
|
||||
sa.Column('id', postgresql.UUID(), autoincrement=False, nullable=False),
|
||||
sa.Column('service_id', postgresql.UUID(), autoincrement=False, nullable=False),
|
||||
sa.Column('emails_requested', sa.BIGINT(), autoincrement=False, nullable=False),
|
||||
sa.Column('emails_delivered', sa.BIGINT(), autoincrement=False, nullable=False),
|
||||
sa.Column('emails_failed', sa.BIGINT(), autoincrement=False, nullable=False),
|
||||
sa.Column('sms_requested', sa.BIGINT(), autoincrement=False, nullable=False),
|
||||
sa.Column('sms_delivered', sa.BIGINT(), autoincrement=False, nullable=False),
|
||||
sa.Column('sms_failed', sa.BIGINT(), autoincrement=False, nullable=False),
|
||||
sa.Column('day', sa.DATE(), autoincrement=False, nullable=False),
|
||||
sa.ForeignKeyConstraint(['service_id'], ['services.id'],
|
||||
name='notification_statistics_service_id_fkey'),
|
||||
sa.PrimaryKeyConstraint('id', name='notification_statistics_pkey'),
|
||||
sa.UniqueConstraint('service_id', 'day', name='uix_service_to_day')
|
||||
)
|
||||
# ### end Alembic commands ###
|
||||
@@ -4,7 +4,6 @@ import pytest
|
||||
from sqlalchemy.exc import SQLAlchemyError
|
||||
|
||||
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,
|
||||
@@ -14,34 +13,8 @@ from app.models import ServiceSmsSender
|
||||
from tests.app.db import create_service, create_inbound_number
|
||||
|
||||
|
||||
def test_update_service_sms_sender_updates_existing_row(notify_db_session):
|
||||
service = create_service()
|
||||
insert_or_update_service_sms_sender(service, 'testing')
|
||||
service_sms_senders = ServiceSmsSender.query.filter_by(service_id=service.id).all()
|
||||
assert len(service_sms_senders) == 1
|
||||
assert service_sms_senders[0].sms_sender == service.sms_sender
|
||||
|
||||
insert_or_update_service_sms_sender(service, 'NEW_SMS')
|
||||
|
||||
updated_sms_senders = ServiceSmsSender.query.filter_by(service_id=service.id).all()
|
||||
assert len(updated_sms_senders) == 1
|
||||
assert updated_sms_senders[0].sms_sender == 'NEW_SMS'
|
||||
assert updated_sms_senders[0].is_default
|
||||
|
||||
|
||||
def test_create_service_inserts_new_service_sms_sender(notify_db_session):
|
||||
assert ServiceSmsSender.query.count() == 0
|
||||
|
||||
service = create_service(sms_sender='new_sms')
|
||||
insert_or_update_service_sms_sender(service, 'new_sms')
|
||||
service_sms_senders = ServiceSmsSender.query.all()
|
||||
assert len(service_sms_senders) == 1
|
||||
assert service_sms_senders[0].sms_sender == 'new_sms'
|
||||
assert service_sms_senders[0].is_default
|
||||
|
||||
|
||||
def test_dao_get_service_sms_senders_id(notify_db_session):
|
||||
service = create_service(sms_sender='first_sms')
|
||||
service = create_service()
|
||||
second_sender = dao_add_sms_sender_for_service(service_id=service.id,
|
||||
sms_sender='second',
|
||||
is_default=False,
|
||||
@@ -60,7 +33,7 @@ def test_dao_get_service_sms_senders_id_raise_exception_when_not_found(notify_db
|
||||
|
||||
|
||||
def test_dao_get_sms_senders_by_service_id(notify_db_session):
|
||||
service = create_service(sms_sender='first_sms')
|
||||
service = create_service()
|
||||
second_sender = dao_add_sms_sender_for_service(service_id=service.id,
|
||||
sms_sender='second',
|
||||
is_default=False,
|
||||
@@ -69,13 +42,13 @@ def test_dao_get_sms_senders_by_service_id(notify_db_session):
|
||||
assert len(results) == 2
|
||||
for x in results:
|
||||
if x.is_default:
|
||||
assert x.sms_sender == 'first_sms'
|
||||
assert x.sms_sender == 'testing'
|
||||
else:
|
||||
assert x == second_sender
|
||||
|
||||
|
||||
def test_dao_add_sms_sender_for_service(notify_db_session):
|
||||
service = create_service(sms_sender="first_sms")
|
||||
service = create_service()
|
||||
new_sms_sender = dao_add_sms_sender_for_service(service_id=service.id,
|
||||
sms_sender='new_sms',
|
||||
is_default=False,
|
||||
@@ -83,13 +56,13 @@ def test_dao_add_sms_sender_for_service(notify_db_session):
|
||||
|
||||
service_sms_senders = ServiceSmsSender.query.order_by(ServiceSmsSender.created_at).all()
|
||||
assert len(service_sms_senders) == 2
|
||||
assert service_sms_senders[0].sms_sender == 'first_sms'
|
||||
assert service_sms_senders[0].sms_sender == 'testing'
|
||||
assert service_sms_senders[0].is_default
|
||||
assert service_sms_senders[1] == new_sms_sender
|
||||
|
||||
|
||||
def test_dao_add_sms_sender_for_service_switches_default(notify_db_session):
|
||||
service = create_service(sms_sender="first_sms")
|
||||
service = create_service()
|
||||
new_sms_sender = dao_add_sms_sender_for_service(service_id=service.id,
|
||||
sms_sender='new_sms',
|
||||
is_default=True,
|
||||
@@ -97,13 +70,13 @@ def test_dao_add_sms_sender_for_service_switches_default(notify_db_session):
|
||||
|
||||
service_sms_senders = ServiceSmsSender.query.order_by(ServiceSmsSender.created_at).all()
|
||||
assert len(service_sms_senders) == 2
|
||||
assert service_sms_senders[0].sms_sender == 'first_sms'
|
||||
assert service_sms_senders[0].sms_sender == 'testing'
|
||||
assert not service_sms_senders[0].is_default
|
||||
assert service_sms_senders[1] == new_sms_sender
|
||||
|
||||
|
||||
def test_dao_update_service_sms_sender(notify_db_session):
|
||||
service = create_service(sms_sender='first_sms')
|
||||
service = create_service()
|
||||
service_sms_senders = ServiceSmsSender.query.filter_by(service_id=service.id).all()
|
||||
assert len(service_sms_senders) == 1
|
||||
sms_sender_to_update = service_sms_senders[0]
|
||||
@@ -120,7 +93,7 @@ def test_dao_update_service_sms_sender(notify_db_session):
|
||||
|
||||
|
||||
def test_dao_update_service_sms_sender_switches_default(notify_db_session):
|
||||
service = create_service(sms_sender='first_sms')
|
||||
service = create_service()
|
||||
sms_sender = dao_add_sms_sender_for_service(service_id=service.id,
|
||||
sms_sender='new_sms',
|
||||
is_default=False,
|
||||
@@ -131,14 +104,14 @@ def test_dao_update_service_sms_sender_switches_default(notify_db_session):
|
||||
sms_sender="updated")
|
||||
sms_senders = ServiceSmsSender.query.filter_by(service_id=service.id).order_by(ServiceSmsSender.created_at).all()
|
||||
assert len(sms_senders) == 2
|
||||
assert sms_senders[0].sms_sender == 'first_sms'
|
||||
assert sms_senders[0].sms_sender == 'testing'
|
||||
assert not sms_senders[0].is_default
|
||||
assert sms_senders[1].sms_sender == 'updated'
|
||||
assert sms_senders[1].is_default
|
||||
|
||||
|
||||
def test_dao_update_service_sms_sender_raises_exception_when_no_default_after_update(notify_db_session):
|
||||
service = create_service(sms_sender='first_sms')
|
||||
service = create_service()
|
||||
sms_sender = dao_add_sms_sender_for_service(service_id=service.id,
|
||||
sms_sender='new_sms',
|
||||
is_default=True,
|
||||
@@ -151,7 +124,7 @@ def test_dao_update_service_sms_sender_raises_exception_when_no_default_after_up
|
||||
|
||||
|
||||
def test_update_existing_sms_sender_with_inbound_number(notify_db_session):
|
||||
service = create_service(sms_sender='testing')
|
||||
service = create_service()
|
||||
inbound_number = create_inbound_number(number='12345', service_id=service.id)
|
||||
|
||||
existing_sms_sender = ServiceSmsSender.query.filter_by(service_id=service.id).one()
|
||||
@@ -166,7 +139,7 @@ def test_update_existing_sms_sender_with_inbound_number(notify_db_session):
|
||||
def test_update_existing_sms_sender_with_inbound_number_raises_exception_if_inbound_number_does_not_exist(
|
||||
notify_db_session
|
||||
):
|
||||
service = create_service(sms_sender='testing')
|
||||
service = create_service()
|
||||
existing_sms_sender = ServiceSmsSender.query.filter_by(service_id=service.id).one()
|
||||
with pytest.raises(expected_exception=SQLAlchemyError):
|
||||
update_existing_sms_sender_with_inbound_number(service_sms_sender=existing_sms_sender,
|
||||
|
||||
@@ -9,7 +9,8 @@ from freezegun import freeze_time
|
||||
from app import db
|
||||
from app.dao.inbound_numbers_dao import (
|
||||
dao_set_inbound_number_to_service,
|
||||
dao_get_available_inbound_numbers
|
||||
dao_get_available_inbound_numbers,
|
||||
dao_set_inbound_number_active_flag
|
||||
)
|
||||
from app.dao.services_dao import (
|
||||
dao_create_service,
|
||||
@@ -61,7 +62,10 @@ from app.models import (
|
||||
SERVICE_PERMISSION_TYPES
|
||||
)
|
||||
|
||||
from tests.app.db import create_inbound_number, create_user, create_service
|
||||
from tests.app.db import (
|
||||
create_inbound_number, create_user, create_service, create_service_with_inbound_number,
|
||||
create_service_with_defined_sms_sender
|
||||
)
|
||||
from tests.app.conftest import (
|
||||
sample_notification as create_notification,
|
||||
sample_notification_history as create_notification_history,
|
||||
@@ -941,10 +945,9 @@ def test_dao_fetch_active_users_for_service_returns_active_only(notify_db, notif
|
||||
|
||||
|
||||
def test_dao_fetch_service_by_inbound_number_with_inbound_number(notify_db_session):
|
||||
foo1 = create_service(service_name='a', sms_sender='1')
|
||||
foo2 = create_service(service_name='b', sms_sender='2')
|
||||
bar = create_service(service_name='c', sms_sender='3')
|
||||
create_inbound_number('1', service_id=foo1.id)
|
||||
foo1 = create_service_with_inbound_number(service_name='a', inbound_number='1')
|
||||
create_service_with_defined_sms_sender(service_name='b', sms_sender_value='2')
|
||||
create_service_with_defined_sms_sender(service_name='c', sms_sender_value='3')
|
||||
create_inbound_number('2')
|
||||
create_inbound_number('3')
|
||||
|
||||
@@ -962,9 +965,8 @@ def test_dao_fetch_service_by_inbound_number_with_inbound_number_not_set(notify_
|
||||
|
||||
|
||||
def test_dao_fetch_service_by_inbound_number_when_inbound_number_set(notify_db_session):
|
||||
service_1 = create_service(service_name='a', sms_sender=None)
|
||||
service_2 = create_service(service_name='b')
|
||||
inbound_number = create_inbound_number('1', service_id=service_1.id)
|
||||
service_1 = create_service_with_inbound_number(inbound_number='1', service_name='a')
|
||||
create_service(service_name='b')
|
||||
|
||||
service = dao_fetch_service_by_inbound_number('1')
|
||||
|
||||
@@ -972,8 +974,7 @@ def test_dao_fetch_service_by_inbound_number_when_inbound_number_set(notify_db_s
|
||||
|
||||
|
||||
def test_dao_fetch_service_by_inbound_number_with_unknown_number(notify_db_session):
|
||||
service = create_service(service_name='a', sms_sender=None)
|
||||
inbound_number = create_inbound_number('1', service_id=service.id)
|
||||
create_service_with_inbound_number(inbound_number='1', service_name='a')
|
||||
|
||||
service = dao_fetch_service_by_inbound_number('9')
|
||||
|
||||
@@ -981,8 +982,8 @@ def test_dao_fetch_service_by_inbound_number_with_unknown_number(notify_db_sessi
|
||||
|
||||
|
||||
def test_dao_fetch_service_by_inbound_number_with_inactive_number_returns_empty(notify_db_session):
|
||||
service = create_service(service_name='a', sms_sender=None)
|
||||
inbound_number = create_inbound_number('1', service_id=service.id, active=False)
|
||||
service = create_service_with_inbound_number(inbound_number='1', service_name='a')
|
||||
dao_set_inbound_number_active_flag(service_id=service.id, active=False)
|
||||
|
||||
service = dao_fetch_service_by_inbound_number('1')
|
||||
|
||||
|
||||
+71
-6
@@ -4,6 +4,7 @@ import uuid
|
||||
from app import db
|
||||
from app.dao.jobs_dao import dao_create_job
|
||||
from app.dao.service_inbound_api_dao import save_service_inbound_api
|
||||
from app.dao.service_sms_sender_dao import update_existing_sms_sender_with_inbound_number, dao_update_service_sms_sender
|
||||
from app.models import (
|
||||
ApiKey,
|
||||
InboundSms,
|
||||
@@ -64,10 +65,8 @@ def create_service(
|
||||
service_id=None,
|
||||
restricted=False,
|
||||
service_permissions=[EMAIL_TYPE, SMS_TYPE],
|
||||
sms_sender='testing',
|
||||
research_mode=False,
|
||||
active=True,
|
||||
do_create_inbound_number=True,
|
||||
email_from=None,
|
||||
prefix_sms=None,
|
||||
):
|
||||
@@ -77,18 +76,84 @@ def create_service(
|
||||
restricted=restricted,
|
||||
email_from=email_from if email_from else service_name.lower().replace(' ', '.'),
|
||||
created_by=user or create_user(email='{}@digital.cabinet-office.gov.uk'.format(uuid.uuid4())),
|
||||
sms_sender=sms_sender,
|
||||
prefix_sms=prefix_sms,
|
||||
)
|
||||
|
||||
dao_create_service(service, service.created_by, service_id, service_permissions=service_permissions)
|
||||
|
||||
if do_create_inbound_number and INBOUND_SMS_TYPE in service_permissions:
|
||||
create_inbound_number(number=sms_sender, service_id=service.id)
|
||||
service.active = active
|
||||
service.research_mode = research_mode
|
||||
|
||||
return service
|
||||
|
||||
|
||||
def create_service_with_inbound_number(
|
||||
inbound_number='1234567',
|
||||
user=None,
|
||||
service_name="Sample service",
|
||||
service_id=None,
|
||||
restricted=False,
|
||||
service_permissions=[EMAIL_TYPE, SMS_TYPE],
|
||||
research_mode=False,
|
||||
active=True,
|
||||
email_from=None,
|
||||
prefix_sms=None
|
||||
):
|
||||
service = Service(
|
||||
name=service_name,
|
||||
message_limit=1000,
|
||||
restricted=restricted,
|
||||
email_from=email_from if email_from else service_name.lower().replace(' ', '.'),
|
||||
created_by=user or create_user(email='{}@digital.cabinet-office.gov.uk'.format(uuid.uuid4())),
|
||||
prefix_sms=prefix_sms,
|
||||
)
|
||||
|
||||
dao_create_service(service, service.created_by, service_id, service_permissions=service_permissions)
|
||||
|
||||
service.active = active
|
||||
service.research_mode = research_mode
|
||||
|
||||
sms_sender = ServiceSmsSender.query.filter_by(service_id=service.id).first()
|
||||
inbound = create_inbound_number(number=inbound_number, service_id=service.id)
|
||||
update_existing_sms_sender_with_inbound_number(service_sms_sender=sms_sender,
|
||||
sms_sender=inbound_number,
|
||||
inbound_number_id=inbound.id)
|
||||
|
||||
return service
|
||||
|
||||
|
||||
def create_service_with_defined_sms_sender(
|
||||
sms_sender_value='1234567',
|
||||
user=None,
|
||||
service_name="Sample service",
|
||||
service_id=None,
|
||||
restricted=False,
|
||||
service_permissions=[EMAIL_TYPE, SMS_TYPE],
|
||||
research_mode=False,
|
||||
active=True,
|
||||
email_from=None,
|
||||
prefix_sms=None
|
||||
):
|
||||
service = Service(
|
||||
name=service_name,
|
||||
message_limit=1000,
|
||||
restricted=restricted,
|
||||
email_from=email_from if email_from else service_name.lower().replace(' ', '.'),
|
||||
created_by=user or create_user(email='{}@digital.cabinet-office.gov.uk'.format(uuid.uuid4())),
|
||||
prefix_sms=prefix_sms,
|
||||
)
|
||||
|
||||
dao_create_service(service, service.created_by, service_id, service_permissions=service_permissions)
|
||||
|
||||
service.active = active
|
||||
service.research_mode = research_mode
|
||||
|
||||
sms_sender = ServiceSmsSender.query.filter_by(service_id=service.id).first()
|
||||
dao_update_service_sms_sender(service_id=service_id,
|
||||
service_sms_sender_id=sms_sender.id,
|
||||
is_default=True,
|
||||
sms_sender=sms_sender_value)
|
||||
|
||||
return service
|
||||
|
||||
|
||||
@@ -248,7 +313,7 @@ def create_inbound_sms(
|
||||
inbound = InboundSms(
|
||||
service=service,
|
||||
created_at=created_at or datetime.utcnow(),
|
||||
notify_number=notify_number or service.sms_sender,
|
||||
notify_number=notify_number or service.get_default_sms_sender(),
|
||||
user_number=user_number,
|
||||
provider_date=provider_date or datetime.utcnow(),
|
||||
provider_reference=provider_reference or 'foo',
|
||||
|
||||
@@ -33,7 +33,10 @@ from tests.app.db import (
|
||||
create_inbound_number,
|
||||
create_reply_to_email,
|
||||
create_reply_to_email_for_notification,
|
||||
create_service_sms_sender)
|
||||
create_service_sms_sender,
|
||||
create_service_with_inbound_number,
|
||||
create_service_with_defined_sms_sender
|
||||
)
|
||||
|
||||
|
||||
def test_should_return_highest_priority_active_provider(restore_provider_details):
|
||||
@@ -293,30 +296,6 @@ def test_should_not_send_to_provider_when_status_is_not_created(
|
||||
stats_mock.assert_not_called()
|
||||
|
||||
|
||||
def test_should_send_sms_sender_from_service_if_present(
|
||||
notify_db_session,
|
||||
mocker):
|
||||
service = create_service(sms_sender='elevenchars')
|
||||
template = create_template(service=service)
|
||||
db_notification = create_notification(template=template,
|
||||
to_field="+447234123123",
|
||||
status='created')
|
||||
|
||||
mocker.patch('app.mmg_client.send_sms')
|
||||
mocker.patch('app.delivery.send_to_providers.create_initial_notification_statistic_tasks')
|
||||
|
||||
send_to_providers.send_sms_to_provider(
|
||||
db_notification
|
||||
)
|
||||
|
||||
mmg_client.send_sms.assert_called_once_with(
|
||||
to=validate_and_format_phone_number("+447234123123"),
|
||||
content="Dear Sir/Madam, Hello. Yours Truly, The Government.",
|
||||
reference=str(db_notification.id),
|
||||
sender=service.sms_sender
|
||||
)
|
||||
|
||||
|
||||
def test_should_send_sms_with_downgraded_content(notify_db_session, mocker):
|
||||
# é, o, and u are in GSM.
|
||||
# á, ï, grapes, tabs, zero width space and ellipsis are not
|
||||
@@ -708,7 +687,7 @@ 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')
|
||||
service = create_service(sms_sender=sms_sender)
|
||||
service = create_service_with_defined_sms_sender(sms_sender_value=sms_sender)
|
||||
template = create_template(service, content='bar')
|
||||
notification = create_notification(template)
|
||||
|
||||
@@ -739,9 +718,8 @@ def test_should_handle_sms_prefix_setting(
|
||||
):
|
||||
mocker.patch('app.mmg_client.send_sms')
|
||||
mocker.patch('app.delivery.send_to_providers.create_initial_notification_statistic_tasks')
|
||||
service = create_service(
|
||||
sms_sender=sms_sender,
|
||||
prefix_sms=prefix_setting,
|
||||
service = create_service_with_defined_sms_sender(
|
||||
sms_sender_value=sms_sender, prefix_sms=prefix_setting
|
||||
)
|
||||
template = create_template(service, content='bar')
|
||||
notification = create_notification(template)
|
||||
@@ -759,12 +737,8 @@ def test_should_use_inbound_number_as_sender_if_default_sms_sender(
|
||||
notify_db_session,
|
||||
mocker
|
||||
):
|
||||
service = create_service(sms_sender='test sender')
|
||||
inbound_number = create_inbound_number('1')
|
||||
dao_add_sms_sender_for_service(service_id=service.id,
|
||||
sms_sender=inbound_number.number,
|
||||
is_default=True,
|
||||
inbound_number_id=inbound_number.id)
|
||||
service = create_service_with_inbound_number(inbound_number='inbound')
|
||||
create_service_sms_sender(service=service, sms_sender="sms_sender", is_default=False)
|
||||
template = create_template(service, content='bar')
|
||||
notification = create_notification(template)
|
||||
|
||||
@@ -777,7 +751,7 @@ def test_should_use_inbound_number_as_sender_if_default_sms_sender(
|
||||
to=ANY,
|
||||
content=ANY,
|
||||
reference=str(notification.id),
|
||||
sender=inbound_number.number
|
||||
sender='inbound'
|
||||
)
|
||||
|
||||
|
||||
@@ -785,12 +759,7 @@ def test_should_use_default_sms_sender(
|
||||
notify_db_session,
|
||||
mocker
|
||||
):
|
||||
service = create_service(sms_sender='test sender')
|
||||
inbound_number = create_inbound_number('1')
|
||||
dao_add_sms_sender_for_service(service_id=service.id,
|
||||
sms_sender=inbound_number.number,
|
||||
is_default=False,
|
||||
inbound_number_id=inbound_number.id)
|
||||
service = create_service_with_defined_sms_sender(sms_sender_value="test sender")
|
||||
template = create_template(service, content='bar')
|
||||
notification = create_notification(template)
|
||||
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
import uuid
|
||||
|
||||
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
|
||||
|
||||
@@ -38,66 +35,6 @@ def test_rest_get_inbound_number_when_service_is_not_assigned_returns_empty_dict
|
||||
assert result['data'] == {}
|
||||
|
||||
|
||||
def test_rest_allocate_inbound_number_to_service(
|
||||
admin_request, notify_db_session, sample_service):
|
||||
service = create_service(service_name='test service 1')
|
||||
inbound_number = create_inbound_number(number='1', provider='mmg', active=True)
|
||||
|
||||
result = admin_request.post(
|
||||
'inbound_number.post_allocate_inbound_number',
|
||||
_expected_status=204,
|
||||
service_id=service.id
|
||||
)
|
||||
|
||||
inbound_number_from_db = dao_get_inbound_number_for_service(service.id)
|
||||
|
||||
assert inbound_number_from_db.active
|
||||
assert inbound_number_from_db.id == inbound_number.id
|
||||
assert inbound_number_from_db.number == inbound_number.number
|
||||
|
||||
|
||||
def test_rest_allocate_inbound_number_to_service_raises_400_when_no_available_numbers(
|
||||
admin_request, notify_db_session, sample_service):
|
||||
service = create_service(service_name='test service 1')
|
||||
create_inbound_number(number='1', provider='mmg', active=False)
|
||||
|
||||
result = admin_request.post(
|
||||
'inbound_number.post_allocate_inbound_number',
|
||||
_expected_status=400,
|
||||
service_id=service.id
|
||||
)
|
||||
|
||||
assert result['message'] == 'No available inbound numbers'
|
||||
|
||||
|
||||
def test_rest_allocate_inbound_number_to_service_sets_active_flag_true_when_flag_is_false(
|
||||
admin_request, notify_db_session, sample_service):
|
||||
service = create_service(service_name='test service 1')
|
||||
create_inbound_number(number='1', provider='mmg', active=False, service_id=service.id)
|
||||
|
||||
result = admin_request.post(
|
||||
'inbound_number.post_allocate_inbound_number',
|
||||
_expected_status=204,
|
||||
service_id=service.id
|
||||
)
|
||||
|
||||
inbound_number = dao_get_inbound_number_for_service(service.id)
|
||||
|
||||
assert inbound_number.active
|
||||
|
||||
|
||||
def test_rest_allocate_inbound_number_to_service_sets_active_flag_true_when_flag_is_true(
|
||||
admin_request, notify_db_session, sample_service):
|
||||
service = create_service(service_name='test service 1')
|
||||
create_inbound_number(number='1', provider='mmg', active=True, service_id=service.id)
|
||||
|
||||
result = admin_request.post(
|
||||
'inbound_number.post_allocate_inbound_number',
|
||||
_expected_status=200,
|
||||
service_id=service.id
|
||||
)
|
||||
|
||||
|
||||
def test_rest_set_inbound_number_active_flag_off(
|
||||
admin_request, notify_db_session):
|
||||
service = create_service(service_name='test service 1')
|
||||
@@ -114,67 +51,6 @@ def test_rest_set_inbound_number_active_flag_off(
|
||||
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
|
||||
|
||||
|
||||
def test_allocate_inbound_number_to_service(admin_request, notify_db_session):
|
||||
service = create_service()
|
||||
inbound_number = create_inbound_number(number='1235468')
|
||||
|
||||
admin_request.post(
|
||||
'inbound_number.allocate_inbound_number_to_service',
|
||||
_expected_status=204,
|
||||
service_id=service.id,
|
||||
inbound_number_id=inbound_number.id
|
||||
)
|
||||
sms_sender = ServiceSmsSender.query.filter_by(service_id=service.id).first()
|
||||
assert sms_sender.sms_sender == inbound_number.number
|
||||
assert sms_sender.inbound_number_id == inbound_number.id
|
||||
|
||||
|
||||
def test_allocate_inbound_number_to_service_returns_404_if_service_does_not_exist(
|
||||
admin_request, notify_db_session
|
||||
):
|
||||
inbound_number = create_inbound_number(number='1235468')
|
||||
|
||||
admin_request.post(
|
||||
'inbound_number.allocate_inbound_number_to_service',
|
||||
_expected_status=404,
|
||||
service_id=uuid.uuid4(),
|
||||
inbound_number_id=inbound_number.id
|
||||
)
|
||||
|
||||
|
||||
def test_allocate_inbound_number_to_service_returns_500_if_inbound_number_is_assigned(
|
||||
admin_request, notify_db_session
|
||||
):
|
||||
service = create_service()
|
||||
inbound_number = create_inbound_number(number='1235468', service_id=service.id)
|
||||
|
||||
admin_request.post(
|
||||
'inbound_number.allocate_inbound_number_to_service',
|
||||
_expected_status=404,
|
||||
service_id=uuid.uuid4(),
|
||||
inbound_number_id=inbound_number.id
|
||||
)
|
||||
|
||||
|
||||
def test_get_available_inbound_numbers_returns_empty_list(admin_request):
|
||||
result = admin_request.get('inbound_number.get_available_inbound_numbers')
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ from flask import json
|
||||
from freezegun import freeze_time
|
||||
|
||||
from tests import create_authorization_header
|
||||
from tests.app.db import create_inbound_sms, create_service
|
||||
from tests.app.db import create_inbound_sms, create_service, create_service_with_inbound_number
|
||||
|
||||
|
||||
def test_get_inbound_sms_with_no_params(client, sample_service):
|
||||
@@ -273,17 +273,18 @@ def test_get_inbound_sms_summary_with_no_inbound(admin_request, sample_service):
|
||||
}
|
||||
|
||||
|
||||
def test_get_inbound_sms_by_id_returns_200(admin_request, sample_service):
|
||||
inbound = create_inbound_sms(sample_service, user_number='447700900001')
|
||||
def test_get_inbound_sms_by_id_returns_200(admin_request, notify_db_session):
|
||||
service = create_service_with_inbound_number(inbound_number='12345')
|
||||
inbound = create_inbound_sms(service=service, user_number='447700900001')
|
||||
|
||||
response = admin_request.get(
|
||||
'inbound_sms.get_inbound_by_id',
|
||||
service_id=sample_service.id,
|
||||
service_id=service.id,
|
||||
inbound_sms_id=inbound.id,
|
||||
)
|
||||
|
||||
assert response['user_number'] == '447700900001'
|
||||
assert response['service_id'] == str(sample_service.id)
|
||||
assert response['service_id'] == str(service.id)
|
||||
|
||||
|
||||
def test_get_inbound_sms_by_id_invalid_id_returns_404(admin_request, sample_service):
|
||||
|
||||
@@ -15,7 +15,7 @@ from app.notifications.receive_notifications import (
|
||||
)
|
||||
|
||||
from app.models import InboundSms, EMAIL_TYPE, SMS_TYPE, INBOUND_SMS_TYPE
|
||||
from tests.app.db import create_inbound_number, create_service
|
||||
from tests.app.db import create_inbound_number, create_service, create_service_with_inbound_number
|
||||
from tests.app.conftest import sample_service
|
||||
|
||||
|
||||
@@ -70,7 +70,7 @@ def test_receive_notification_from_mmg_without_permissions_does_not_persist(
|
||||
permissions
|
||||
):
|
||||
mocked = mocker.patch("app.notifications.receive_notifications.tasks.send_inbound_sms_to_service.apply_async")
|
||||
service = create_service(sms_sender='07111111111', service_permissions=permissions)
|
||||
service = create_service_with_inbound_number(inbound_number='07111111111', service_permissions=permissions)
|
||||
data = {
|
||||
"ID": "1234",
|
||||
"MSISDN": "07111111111",
|
||||
@@ -98,7 +98,7 @@ def test_receive_notification_from_firetext_without_permissions_does_not_persist
|
||||
notify_db_session,
|
||||
permissions
|
||||
):
|
||||
service = create_service(sms_sender='07111111111', service_permissions=permissions)
|
||||
service = create_service_with_inbound_number(inbound_number='07111111111', service_permissions=permissions)
|
||||
mocker.patch("app.notifications.receive_notifications.dao_fetch_service_by_inbound_number",
|
||||
return_value=service)
|
||||
mocked_send_inbound_sms = mocker.patch(
|
||||
@@ -223,17 +223,15 @@ def test_create_inbound_mmg_sms_object_uses_inbound_number_if_set(sample_service
|
||||
|
||||
@pytest.mark.parametrize('notify_number', ['foo', 'baz'], ids=['two_matching_services', 'no_matching_services'])
|
||||
def test_receive_notification_error_if_not_single_matching_service(client, notify_db_session, notify_number):
|
||||
create_service(
|
||||
create_service_with_inbound_number(
|
||||
inbound_number='dog',
|
||||
service_name='a',
|
||||
sms_sender='foo',
|
||||
service_permissions=[EMAIL_TYPE, SMS_TYPE, INBOUND_SMS_TYPE],
|
||||
do_create_inbound_number=False
|
||||
service_permissions=[EMAIL_TYPE, SMS_TYPE, INBOUND_SMS_TYPE]
|
||||
)
|
||||
create_service(
|
||||
create_service_with_inbound_number(
|
||||
inbound_number='bar',
|
||||
service_name='b',
|
||||
sms_sender='foo',
|
||||
service_permissions=[EMAIL_TYPE, SMS_TYPE, INBOUND_SMS_TYPE],
|
||||
do_create_inbound_number=False
|
||||
service_permissions=[EMAIL_TYPE, SMS_TYPE, INBOUND_SMS_TYPE]
|
||||
)
|
||||
|
||||
data = {
|
||||
@@ -255,8 +253,8 @@ def test_receive_notification_returns_received_to_firetext(notify_db_session, cl
|
||||
mocked = mocker.patch("app.notifications.receive_notifications.tasks.send_inbound_sms_to_service.apply_async")
|
||||
mock = mocker.patch('app.notifications.receive_notifications.statsd_client.incr')
|
||||
|
||||
service = create_service(
|
||||
service_name='b', sms_sender='07111111111', service_permissions=[EMAIL_TYPE, SMS_TYPE, INBOUND_SMS_TYPE])
|
||||
service = create_service_with_inbound_number(
|
||||
service_name='b', inbound_number='07111111111', service_permissions=[EMAIL_TYPE, SMS_TYPE, INBOUND_SMS_TYPE])
|
||||
|
||||
data = "source=07999999999&destination=07111111111&message=this is a message&time=2017-01-01 12:00:00"
|
||||
|
||||
@@ -276,8 +274,10 @@ def test_receive_notification_from_firetext_persists_message(notify_db_session,
|
||||
mocked = mocker.patch("app.notifications.receive_notifications.tasks.send_inbound_sms_to_service.apply_async")
|
||||
mocker.patch('app.notifications.receive_notifications.statsd_client.incr')
|
||||
|
||||
service = create_service(
|
||||
service_name='b', sms_sender='07111111111', service_permissions=[EMAIL_TYPE, SMS_TYPE, INBOUND_SMS_TYPE])
|
||||
service = create_service_with_inbound_number(
|
||||
inbound_number='07111111111',
|
||||
service_name='b',
|
||||
service_permissions=[EMAIL_TYPE, SMS_TYPE, INBOUND_SMS_TYPE])
|
||||
|
||||
data = "source=07999999999&destination=07111111111&message=this is a message&time=2017-01-01 12:00:00"
|
||||
|
||||
@@ -287,7 +287,6 @@ def test_receive_notification_from_firetext_persists_message(notify_db_session,
|
||||
result = json.loads(response.get_data(as_text=True))
|
||||
|
||||
persisted = InboundSms.query.first()
|
||||
|
||||
assert result['status'] == 'ok'
|
||||
assert persisted.notify_number == '07111111111'
|
||||
assert persisted.user_number == '447999999999'
|
||||
@@ -302,8 +301,8 @@ def test_receive_notification_from_firetext_persists_message_with_normalized_pho
|
||||
mocker.patch("app.notifications.receive_notifications.tasks.send_inbound_sms_to_service.apply_async")
|
||||
mock = mocker.patch('app.notifications.receive_notifications.statsd_client.incr')
|
||||
|
||||
create_service(
|
||||
service_name='b', sms_sender='07111111111', service_permissions=[EMAIL_TYPE, SMS_TYPE, INBOUND_SMS_TYPE])
|
||||
create_service_with_inbound_number(
|
||||
inbound_number='07111111111', service_name='b', service_permissions=[EMAIL_TYPE, SMS_TYPE, INBOUND_SMS_TYPE])
|
||||
|
||||
data = "source=(+44)7999999999&destination=07111111111&message=this is a message&time=2017-01-01 12:00:00"
|
||||
|
||||
@@ -322,8 +321,8 @@ def test_returns_ok_to_firetext_if_mismatched_sms_sender(notify_db_session, clie
|
||||
mocked = mocker.patch("app.notifications.receive_notifications.tasks.send_inbound_sms_to_service.apply_async")
|
||||
mock = mocker.patch('app.notifications.receive_notifications.statsd_client.incr')
|
||||
|
||||
create_service(
|
||||
service_name='b', sms_sender='07111111199', service_permissions=[EMAIL_TYPE, SMS_TYPE, INBOUND_SMS_TYPE])
|
||||
create_service_with_inbound_number(
|
||||
inbound_number='07111111199', service_name='b', service_permissions=[EMAIL_TYPE, SMS_TYPE, INBOUND_SMS_TYPE])
|
||||
|
||||
data = "source=(+44)7999999999&destination=07111111111&message=this is a message&time=2017-01-01 12:00:00"
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ import pytest
|
||||
from flask import url_for, current_app
|
||||
from freezegun import freeze_time
|
||||
|
||||
from app.dao.service_sms_sender_dao import dao_add_sms_sender_for_service
|
||||
from app.dao.services_dao import dao_remove_user_from_service
|
||||
from app.dao.templates_dao import dao_redact_template
|
||||
from app.dao.users_dao import save_model_user
|
||||
@@ -307,7 +308,6 @@ def test_create_service(client, sample_user):
|
||||
|
||||
service_db = Service.query.get(json_resp['data']['id'])
|
||||
assert service_db.name == 'created service'
|
||||
assert service_db.sms_sender == current_app.config['FROM_NUMBER']
|
||||
|
||||
auth_header_fetch = create_authorization_header()
|
||||
|
||||
@@ -322,7 +322,7 @@ def test_create_service(client, sample_user):
|
||||
|
||||
service_sms_senders = ServiceSmsSender.query.filter_by(service_id=service_db.id).all()
|
||||
assert len(service_sms_senders) == 1
|
||||
assert service_sms_senders[0].sms_sender == service_db.sms_sender
|
||||
assert service_sms_senders[0].sms_sender == service_db.get_default_sms_sender()
|
||||
|
||||
|
||||
def test_should_not_create_service_with_missing_user_id_field(notify_api, fake_uuid):
|
||||
@@ -1505,63 +1505,6 @@ def test_get_only_api_created_notifications_for_service(
|
||||
assert resp['notifications'][0]['id'] == str(without_job.id)
|
||||
|
||||
|
||||
def test_set_sms_sender_for_service(client, sample_service):
|
||||
data = {
|
||||
'sms_sender': 'elevenchars',
|
||||
}
|
||||
|
||||
auth_header = create_authorization_header()
|
||||
|
||||
resp = client.post(
|
||||
'/service/{}'.format(sample_service.id),
|
||||
data=json.dumps(data),
|
||||
headers=[('Content-Type', 'application/json'), auth_header]
|
||||
)
|
||||
result = json.loads(resp.get_data(as_text=True))
|
||||
assert resp.status_code == 200
|
||||
assert result['data']['sms_sender'] == 'elevenchars'
|
||||
service_sms_senders = ServiceSmsSender.query.filter_by(service_id=sample_service.id).all()
|
||||
assert len(service_sms_senders) == 1
|
||||
assert service_sms_senders[0].sms_sender == 'elevenchars'
|
||||
assert service_sms_senders[0].is_default
|
||||
|
||||
|
||||
def test_set_sms_sender_for_service_rejects_invalid_characters(client, sample_service):
|
||||
data = {
|
||||
'sms_sender': 'invalid####',
|
||||
}
|
||||
|
||||
auth_header = create_authorization_header()
|
||||
|
||||
resp = client.post(
|
||||
'/service/{}'.format(sample_service.id),
|
||||
data=json.dumps(data),
|
||||
headers=[('Content-Type', 'application/json'), auth_header]
|
||||
)
|
||||
result = json.loads(resp.get_data(as_text=True))
|
||||
assert resp.status_code == 400
|
||||
assert result['result'] == 'error'
|
||||
assert result['message'] == {'sms_sender': ['Only alphanumeric characters allowed']}
|
||||
|
||||
|
||||
def test_set_sms_sender_for_service_rejects_null(client, sample_service):
|
||||
data = {
|
||||
'sms_sender': None,
|
||||
}
|
||||
|
||||
auth_header = create_authorization_header()
|
||||
|
||||
resp = client.post(
|
||||
'/service/{}'.format(sample_service.id),
|
||||
data=json.dumps(data),
|
||||
headers=[('Content-Type', 'application/json'), auth_header]
|
||||
)
|
||||
result = json.loads(resp.get_data(as_text=True))
|
||||
assert resp.status_code == 400
|
||||
assert result['result'] == 'error'
|
||||
assert result['message'] == {'sms_sender': ['Field may not be null.']}
|
||||
|
||||
|
||||
@pytest.mark.parametrize('default_sms_sender, should_prefix', [
|
||||
(None, True), # None means use default
|
||||
('Foo', False),
|
||||
@@ -1572,9 +1515,10 @@ def test_prefixing_messages_based_on_sms_sender(
|
||||
default_sms_sender,
|
||||
should_prefix,
|
||||
):
|
||||
service = create_service(
|
||||
sms_sender=default_sms_sender or current_app.config['FROM_NUMBER']
|
||||
)
|
||||
service = create_service()
|
||||
if default_sms_sender:
|
||||
# add another sms sender that is the default.
|
||||
dao_add_sms_sender_for_service(service_id=service.id, sms_sender=default_sms_sender, is_default=True)
|
||||
create_service_sms_sender(
|
||||
service=service,
|
||||
sms_sender='ignored',
|
||||
@@ -2688,7 +2632,7 @@ def test_add_service_sms_sender_can_add_multiple_senders(client, notify_db_sessi
|
||||
|
||||
def test_add_service_sms_sender_when_it_is_an_inbound_number_updates_the_only_existing_sms_sender(
|
||||
client, notify_db_session):
|
||||
service = create_service(sms_sender='GOVUK')
|
||||
service = create_service()
|
||||
inbound_number = create_inbound_number(number='12345')
|
||||
data = {
|
||||
"sms_sender": str(inbound_number.id),
|
||||
@@ -2713,7 +2657,7 @@ def test_add_service_sms_sender_when_it_is_an_inbound_number_updates_the_only_ex
|
||||
|
||||
def test_add_service_sms_sender_when_it_is_an_inbound_number_inserts_new_sms_sender_when_more_than_one(
|
||||
client, notify_db_session):
|
||||
service = create_service(sms_sender='GOVUK')
|
||||
service = create_service()
|
||||
create_service_sms_sender(service=service, sms_sender="second", is_default=False)
|
||||
inbound_number = create_inbound_number(number='12345')
|
||||
data = {
|
||||
@@ -2738,7 +2682,7 @@ def test_add_service_sms_sender_when_it_is_an_inbound_number_inserts_new_sms_sen
|
||||
|
||||
|
||||
def test_add_service_sms_sender_switches_default(client, notify_db_session):
|
||||
service = create_service(sms_sender='first')
|
||||
service = create_service()
|
||||
data = {
|
||||
"sms_sender": 'second',
|
||||
"is_default": True,
|
||||
@@ -2752,7 +2696,7 @@ def test_add_service_sms_sender_switches_default(client, notify_db_session):
|
||||
assert resp_json['sms_sender'] == 'second'
|
||||
assert not resp_json['inbound_number_id']
|
||||
assert resp_json['is_default']
|
||||
sms_senders = ServiceSmsSender.query.filter_by(sms_sender='first').first()
|
||||
sms_senders = ServiceSmsSender.query.filter_by(sms_sender='testing').first()
|
||||
assert not sms_senders.is_default
|
||||
|
||||
|
||||
@@ -2790,7 +2734,7 @@ def test_update_service_sms_sender(client, notify_db_session):
|
||||
|
||||
|
||||
def test_update_service_sms_sender_switches_default(client, notify_db_session):
|
||||
service = create_service(sms_sender='first')
|
||||
service = create_service()
|
||||
service_sms_sender = create_service_sms_sender(service=service, sms_sender='1235', is_default=False)
|
||||
data = {
|
||||
"sms_sender": 'second',
|
||||
@@ -2805,7 +2749,7 @@ def test_update_service_sms_sender_switches_default(client, notify_db_session):
|
||||
assert resp_json['sms_sender'] == 'second'
|
||||
assert not resp_json['inbound_number_id']
|
||||
assert resp_json['is_default']
|
||||
sms_senders = ServiceSmsSender.query.filter_by(sms_sender='first').first()
|
||||
sms_senders = ServiceSmsSender.query.filter_by(sms_sender='testing').first()
|
||||
assert not sms_senders.is_default
|
||||
|
||||
|
||||
@@ -2875,7 +2819,7 @@ def test_get_service_sms_sender_by_id_returns_404_when_sms_sender_does_not_exist
|
||||
|
||||
|
||||
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'),
|
||||
service_sms_sender = create_service_sms_sender(service=create_service(),
|
||||
sms_sender='second',
|
||||
is_default=False)
|
||||
response = client.get('/service/{}/sms-sender'.format(service_sms_sender.service_id),
|
||||
@@ -2885,7 +2829,7 @@ def test_get_service_sms_senders_for_service(client, notify_db_session):
|
||||
json_resp = json.loads(response.get_data(as_text=True))
|
||||
assert len(json_resp) == 2
|
||||
assert json_resp[0]['is_default']
|
||||
assert json_resp[0]['sms_sender'] == 'first'
|
||||
assert json_resp[0]['sms_sender'] == current_app.config['FROM_NUMBER']
|
||||
assert not json_resp[1]['is_default']
|
||||
assert json_resp[1]['sms_sender'] == 'second'
|
||||
|
||||
|
||||
@@ -30,7 +30,6 @@ from tests.app.db import (
|
||||
create_reply_to_email,
|
||||
create_letter_contact
|
||||
)
|
||||
from tests.conftest import set_config
|
||||
|
||||
|
||||
@pytest.mark.parametrize('mobile_number', [
|
||||
@@ -256,8 +255,7 @@ def test_inbound_number_returns_inbound_number(client, notify_db_session):
|
||||
|
||||
|
||||
def test_inbound_number_returns_none_when_no_inbound_number(client, notify_db_session):
|
||||
with set_config(client.application, 'FROM_NUMBER', 'test'):
|
||||
service = create_service(sms_sender=None)
|
||||
service = create_service()
|
||||
|
||||
assert not service.get_inbound_number()
|
||||
|
||||
@@ -275,5 +273,5 @@ def test_service_get_default_contact_letter(sample_service):
|
||||
|
||||
|
||||
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'
|
||||
service = create_service()
|
||||
assert service.get_default_sms_sender() == 'testing'
|
||||
|
||||
@@ -3,13 +3,15 @@ import uuid
|
||||
import pytest
|
||||
from freezegun import freeze_time
|
||||
|
||||
from app.dao.service_sms_sender_dao import update_existing_sms_sender_with_inbound_number
|
||||
from app.models import (
|
||||
NotificationEmailReplyTo,
|
||||
ScheduledNotification,
|
||||
SCHEDULE_NOTIFICATIONS,
|
||||
EMAIL_TYPE,
|
||||
SMS_TYPE,
|
||||
NotificationSmsSender)
|
||||
NotificationSmsSender, ServiceSmsSender
|
||||
)
|
||||
from flask import json, current_app
|
||||
|
||||
from app.models import Notification
|
||||
@@ -29,7 +31,9 @@ from tests.app.db import (
|
||||
create_service,
|
||||
create_template,
|
||||
create_reply_to_email,
|
||||
create_service_sms_sender, create_notification)
|
||||
create_service_sms_sender, create_notification, create_inbound_number,
|
||||
create_service_with_inbound_number
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.parametrize("reference", [None, "reference_from_client"])
|
||||
@@ -69,7 +73,8 @@ def test_post_sms_notification_returns_201(client, sample_template_with_placehol
|
||||
|
||||
|
||||
def test_post_sms_notification_uses_inbound_number_as_sender(client, notify_db_session, mocker):
|
||||
service = create_service(sms_sender='1', do_create_inbound_number=True)
|
||||
service = create_service_with_inbound_number(inbound_number='1')
|
||||
|
||||
template = create_template(service=service, content="Hello (( Name))\nYour thing is due soon")
|
||||
mocked = mocker.patch('app.celery.provider_tasks.deliver_sms.apply_async')
|
||||
data = {
|
||||
|
||||
Reference in New Issue
Block a user