New table and endpoints for service contact lists.

- Table to store meta data for the emergency contact list for a service.
- Endpoint for fetching contact lists for service
- Endpoint for saving contact list for service.

The list will be stored in S3. The service will then be able to send emergency announcements to staff.
This commit is contained in:
Rebecca Law
2020-03-12 13:53:57 +00:00
parent 7636c4225d
commit 654e6fc657
8 changed files with 243 additions and 2 deletions

View File

@@ -0,0 +1,10 @@
from app.dao.service_contact_list_dao import dao_get_contact_lists
from tests.app.db import create_service_contact_list
def test_dao_get_contact_lists(notify_db_session):
contact_list = create_service_contact_list()
fetched_list = dao_get_contact_lists(contact_list.service_id)
assert len(fetched_list) == 1
assert fetched_list[0] == contact_list

View File

@@ -60,7 +60,8 @@ from app.models import (
LetterBranding,
Domain,
NotificationHistory,
ReturnedLetter
ReturnedLetter,
ServiceContactList
)
@@ -965,3 +966,26 @@ def create_returned_letter(service=None, reported_at=None, notification_id=None)
db.session.add(returned_letter)
db.session.commit()
return returned_letter
def create_service_contact_list(
service=None,
original_file_name='EmergencyContactList.xls',
row_count=100,
template_type='email',
created_by_id=None
):
if not service:
service = create_service(service_name='service for contact list', user=create_user())
contact_list = ServiceContactList(
service_id=service.id,
original_file_name=original_file_name,
row_count=row_count,
template_type=template_type,
created_by_id=created_by_id or service.users[0].id,
created_at=datetime.utcnow(),
)
db.session.add(contact_list)
db.session.commit()
return contact_list

View File

@@ -0,0 +1,81 @@
import uuid
from app.models import ServiceContactList
from tests.app.db import create_service_contact_list, create_service
def test_create_service_contact_list(sample_service, admin_request):
data = {
"id": str(uuid.uuid4()),
"row_count": 100,
"original_file_name": "staff_emergency_list.xls",
"template_type": 'email',
"created_by": str(sample_service.users[0].id)
}
response = admin_request.post(
'service.create_contact_list',
_data=data,
service_id=sample_service.id,
_expected_status=201
)
assert response['id'] == data['id']
assert response['original_file_name'] == 'staff_emergency_list.xls'
assert response['row_count'] == 100
assert response['template_type'] == 'email'
assert response['service_id'] == str(sample_service.id)
assert response['created_at']
db_results = ServiceContactList.query.all()
assert len(db_results) == 1
assert str(db_results[0].id) == data['id']
def test_create_service_contact_list_cannot_save_type_letter(sample_service, admin_request):
data = {
"id": str(uuid.uuid4()),
"row_count": 100,
"original_file_name": "staff_emergency_list.xls",
"template_type": 'letter',
"created_by": str(sample_service.users[0].id)
}
response = admin_request.post(
'service.create_contact_list',
_data=data,
service_id=sample_service.id,
_expected_status=400
)
assert response['errors'][0]['message'] == "template_type letter is not one of [email, sms]"
def test_get_contact_list(admin_request, notify_db_session):
contact_list = create_service_contact_list()
response = admin_request.get(
'service.get_contact_list',
service_id=contact_list.service_id
)
assert len(response) == 1
assert response[0] == contact_list.serialize()
def test_get_contact_list_returns_for_service(admin_request, notify_db_session):
service_1 = create_service(service_name='Service under test')
service_2 = create_service(service_name='Service should return results')
expected_list_1 = create_service_contact_list(service=service_1)
expected_list_2 = create_service_contact_list(service=service_1)
# not included in results
create_service_contact_list(service=service_2)
response = admin_request.get(
'service.get_contact_list',
service_id=service_1.id
)
assert len(response) == 2
assert response[0] == expected_list_2.serialize()
assert response[1] == expected_list_1.serialize()