Files
notifications-api/tests/app/dao/test_service_sms_sender_dao.py

273 lines
9.0 KiB
Python
Raw Normal View History

import uuid
import pytest
from sqlalchemy.exc import SQLAlchemyError
from app.dao.service_sms_sender_dao import (
archive_sms_sender,
dao_add_sms_sender_for_service,
dao_get_service_sms_senders_by_id,
dao_get_sms_senders_by_service_id,
2021-03-10 13:55:06 +00:00
dao_update_service_sms_sender,
update_existing_sms_sender_with_inbound_number,
)
from app.exceptions import ArchiveValidationError
from app.models import ServiceSmsSender
from tests.app.db import (
create_inbound_number,
create_service,
create_service_sms_sender,
2021-03-10 13:55:06 +00:00
create_service_with_inbound_number,
)
def test_dao_get_service_sms_senders_id(notify_db_session):
service = create_service()
2023-08-29 14:54:30 -07:00
second_sender = dao_add_sms_sender_for_service(
service_id=service.id,
sms_sender="second",
is_default=False,
inbound_number_id=None,
)
result = dao_get_service_sms_senders_by_id(
service_id=service.id, service_sms_sender_id=second_sender.id
)
assert result.sms_sender == "second"
assert not result.is_default
2023-08-29 14:54:30 -07:00
def test_dao_get_service_sms_senders_id_raise_exception_when_not_found(
notify_db_session,
):
service = create_service()
with pytest.raises(expected_exception=SQLAlchemyError):
2023-08-29 14:54:30 -07:00
dao_get_service_sms_senders_by_id(
service_id=service.id, service_sms_sender_id=uuid.uuid4()
)
2023-08-29 14:54:30 -07:00
def test_dao_get_service_sms_senders_id_raises_exception_with_archived_sms_sender(
notify_db_session,
):
service = create_service()
archived_sms_sender = create_service_sms_sender(
2023-08-29 14:54:30 -07:00
service=service, sms_sender="second", is_default=False, archived=True
)
with pytest.raises(expected_exception=SQLAlchemyError):
2023-08-29 14:54:30 -07:00
dao_get_service_sms_senders_by_id(
service_id=service.id, service_sms_sender_id=archived_sms_sender.id
)
def test_dao_get_sms_senders_by_service_id(notify_db_session):
service = create_service()
2023-08-29 14:54:30 -07:00
second_sender = dao_add_sms_sender_for_service(
service_id=service.id,
sms_sender="second",
is_default=False,
inbound_number_id=None,
)
results = dao_get_sms_senders_by_service_id(service_id=service.id)
assert len(results) == 2
for x in results:
if x.is_default:
2023-08-29 14:54:30 -07:00
assert x.sms_sender == "testing"
else:
assert x == second_sender
2023-08-29 14:54:30 -07:00
def test_dao_get_sms_senders_by_service_id_does_not_return_archived_senders(
notify_db_session,
):
service = create_service()
archived_sms_sender = create_service_sms_sender(
2023-08-29 14:54:30 -07:00
service=service, sms_sender="second", is_default=False, archived=True
)
results = dao_get_sms_senders_by_service_id(service_id=service.id)
assert len(results) == 1
assert archived_sms_sender not in results
def test_dao_add_sms_sender_for_service(notify_db_session):
service = create_service()
2023-08-29 14:54:30 -07:00
new_sms_sender = dao_add_sms_sender_for_service(
service_id=service.id,
sms_sender="new_sms",
is_default=False,
inbound_number_id=None,
)
2023-08-29 14:54:30 -07:00
service_sms_senders = ServiceSmsSender.query.order_by(
ServiceSmsSender.created_at
).all()
assert len(service_sms_senders) == 2
2023-08-29 14:54:30 -07:00
assert service_sms_senders[0].sms_sender == "testing"
assert service_sms_senders[0].is_default
assert not service_sms_senders[0].archived
assert service_sms_senders[1] == new_sms_sender
def test_dao_add_sms_sender_for_service_switches_default(notify_db_session):
service = create_service()
2023-08-29 14:54:30 -07:00
new_sms_sender = dao_add_sms_sender_for_service(
service_id=service.id,
sms_sender="new_sms",
is_default=True,
inbound_number_id=None,
)
service_sms_senders = ServiceSmsSender.query.order_by(
ServiceSmsSender.created_at
).all()
assert len(service_sms_senders) == 2
2023-08-29 14:54:30 -07:00
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()
2017-10-18 13:17:52 +01:00
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]
2023-08-29 14:54:30 -07:00
dao_update_service_sms_sender(
service_id=service.id,
service_sms_sender_id=sms_sender_to_update.id,
is_default=True,
sms_sender="updated",
)
sms_senders = ServiceSmsSender.query.filter_by(service_id=service.id).all()
assert len(sms_senders) == 1
assert sms_senders[0].is_default
2023-08-29 14:54:30 -07:00
assert sms_senders[0].sms_sender == "updated"
assert not sms_senders[0].inbound_number_id
def test_dao_update_service_sms_sender_switches_default(notify_db_session):
service = create_service()
2023-08-29 14:54:30 -07:00
sms_sender = dao_add_sms_sender_for_service(
service_id=service.id,
sms_sender="new_sms",
is_default=False,
inbound_number_id=None,
)
dao_update_service_sms_sender(
service_id=service.id,
service_sms_sender_id=sms_sender.id,
is_default=True,
sms_sender="updated",
)
sms_senders = ServiceSmsSender.query.filter_by(service_id=service.id).all()
expected = {("testing", False), ("updated", True)}
results = {(sender.sms_sender, sender.is_default) for sender in sms_senders}
assert expected == results
2023-08-29 14:54:30 -07:00
def test_dao_update_service_sms_sender_raises_exception_when_no_default_after_update(
notify_db_session,
):
service = create_service()
2023-08-29 14:54:30 -07:00
sms_sender = dao_add_sms_sender_for_service(
service_id=service.id,
sms_sender="new_sms",
is_default=True,
inbound_number_id=None,
)
with pytest.raises(expected_exception=Exception) as e:
2023-08-29 14:54:30 -07:00
dao_update_service_sms_sender(
service_id=service.id,
service_sms_sender_id=sms_sender.id,
is_default=False,
sms_sender="updated",
)
assert "You must have at least one SMS sender as the default" in str(e.value)
def test_update_existing_sms_sender_with_inbound_number(notify_db_session):
service = create_service()
2023-08-29 14:54:30 -07:00
inbound_number = create_inbound_number(number="12345", service_id=service.id)
existing_sms_sender = ServiceSmsSender.query.filter_by(service_id=service.id).one()
sms_sender = update_existing_sms_sender_with_inbound_number(
2023-08-29 14:54:30 -07:00
service_sms_sender=existing_sms_sender,
sms_sender=inbound_number.number,
inbound_number_id=inbound_number.id,
)
assert sms_sender.inbound_number_id == inbound_number.id
assert sms_sender.sms_sender == inbound_number.number
assert sms_sender.is_default
def test_update_existing_sms_sender_with_inbound_number_raises_exception_if_inbound_number_does_not_exist(
2023-08-29 14:54:30 -07:00
notify_db_session,
):
service = create_service()
existing_sms_sender = ServiceSmsSender.query.filter_by(service_id=service.id).one()
with pytest.raises(expected_exception=SQLAlchemyError):
2023-08-29 14:54:30 -07:00
update_existing_sms_sender_with_inbound_number(
service_sms_sender=existing_sms_sender,
sms_sender="blah",
inbound_number_id=uuid.uuid4(),
)
def test_archive_sms_sender(notify_db_session):
service = create_service()
2023-08-29 14:54:30 -07:00
second_sms_sender = dao_add_sms_sender_for_service(
service_id=service.id, sms_sender="second", is_default=False
)
archive_sms_sender(service_id=service.id, sms_sender_id=second_sms_sender.id)
assert second_sms_sender.archived is True
assert second_sms_sender.updated_at is not None
2023-08-29 14:54:30 -07:00
def test_archive_sms_sender_does_not_archive_a_sender_for_a_different_service(
sample_service,
):
service = create_service(service_name="First service")
2023-08-29 14:54:30 -07:00
sms_sender = dao_add_sms_sender_for_service(
service_id=sample_service.id, sms_sender="second", is_default=False
)
with pytest.raises(SQLAlchemyError):
archive_sms_sender(service.id, sms_sender.id)
assert not sms_sender.archived
2023-08-29 14:54:30 -07:00
def test_archive_sms_sender_raises_an_error_if_attempting_to_archive_a_default(
notify_db_session,
):
service = create_service()
sms_sender = service.service_sms_senders[0]
with pytest.raises(ArchiveValidationError) as e:
archive_sms_sender(service_id=service.id, sms_sender_id=sms_sender.id)
2023-08-29 14:54:30 -07:00
assert "You cannot delete a default sms sender" in str(e.value)
2023-08-29 14:54:30 -07:00
@pytest.mark.parametrize("is_default", [True, False])
def test_archive_sms_sender_raises_an_error_if_attempting_to_archive_an_inbound_number(
notify_db_session, is_default
):
service = create_service_with_inbound_number(inbound_number="7654321")
dao_add_sms_sender_for_service(service.id, "second", is_default=True)
inbound_number = next(x for x in service.service_sms_senders if x.inbound_number_id)
# regardless of whether inbound number is default or not, can't delete it
dao_update_service_sms_sender(service.id, inbound_number.id, is_default=is_default)
with pytest.raises(ArchiveValidationError) as e:
2023-08-29 14:54:30 -07:00
archive_sms_sender(service_id=service.id, sms_sender_id=inbound_number.id)
2023-08-29 14:54:30 -07:00
assert "You cannot delete an inbound number" in str(e.value)
assert not inbound_number.archived