mirror of
https://github.com/GSA/notifications-api.git
synced 2025-12-17 18:52:30 -05:00
205 lines
6.4 KiB
Python
205 lines
6.4 KiB
Python
import pytest
|
|
|
|
from app.models import (User, Service, Template, ApiKey, Job, Notification)
|
|
from app.dao.users_dao import (save_model_user, create_user_code, create_secret_code)
|
|
from app.dao.services_dao import save_model_service
|
|
from app.dao.templates_dao import save_model_template
|
|
from app.dao.api_key_dao import save_model_api_key
|
|
from app.dao.jobs_dao import save_job
|
|
from app.dao.notifications_dao import save_notification
|
|
import uuid
|
|
|
|
|
|
@pytest.fixture(scope='function')
|
|
def service_factory(notify_db, notify_db_session):
|
|
class ServiceFactory(object):
|
|
def get(self, service_name):
|
|
user = sample_user(notify_db, notify_db_session)
|
|
service = sample_service(notify_db, notify_db_session, service_name, user)
|
|
sample_template(notify_db, notify_db_session, service=service)
|
|
return service
|
|
|
|
return ServiceFactory()
|
|
|
|
|
|
@pytest.fixture(scope='function')
|
|
def sample_user(notify_db,
|
|
notify_db_session,
|
|
email="notify@digital.cabinet-office.gov.uk"):
|
|
data = {
|
|
'name': 'Test User',
|
|
'email_address': email,
|
|
'password': 'password',
|
|
'mobile_number': '+447700900986',
|
|
'state': 'active'
|
|
}
|
|
usr = User.query.filter_by(email_address=email).first()
|
|
if not usr:
|
|
usr = User(**data)
|
|
save_model_user(usr)
|
|
return usr
|
|
|
|
|
|
def create_code(notify_db, notify_db_session, code_type, usr=None, code=None):
|
|
if code is None:
|
|
code = create_secret_code()
|
|
if usr is None:
|
|
usr = sample_user(notify_db, notify_db_session)
|
|
return create_user_code(usr, code, code_type), code
|
|
|
|
|
|
@pytest.fixture(scope='function')
|
|
def sample_email_code(notify_db,
|
|
notify_db_session,
|
|
code=None,
|
|
code_type="email",
|
|
usr=None):
|
|
code, txt_code = create_code(notify_db,
|
|
notify_db_session,
|
|
code_type,
|
|
usr=usr,
|
|
code=code)
|
|
code.txt_code = txt_code
|
|
return code
|
|
|
|
|
|
@pytest.fixture(scope='function')
|
|
def sample_sms_code(notify_db,
|
|
notify_db_session,
|
|
code=None,
|
|
code_type="sms",
|
|
usr=None):
|
|
code, txt_code = create_code(notify_db,
|
|
notify_db_session,
|
|
code_type,
|
|
usr=usr,
|
|
code=code)
|
|
code.txt_code = txt_code
|
|
return code
|
|
|
|
|
|
@pytest.fixture(scope='function')
|
|
def sample_service(notify_db,
|
|
notify_db_session,
|
|
service_name="Sample service",
|
|
user=None):
|
|
if user is None:
|
|
user = sample_user(notify_db, notify_db_session)
|
|
data = {
|
|
'name': service_name,
|
|
'users': [user],
|
|
'limit': 1000,
|
|
'active': False,
|
|
'restricted': False}
|
|
service = Service.query.filter_by(name=service_name).first()
|
|
if not service:
|
|
service = Service(**data)
|
|
save_model_service(service)
|
|
return service
|
|
|
|
|
|
@pytest.fixture(scope='function')
|
|
def sample_template(notify_db,
|
|
notify_db_session,
|
|
template_name="Template Name",
|
|
template_type="sms",
|
|
content="This is a template",
|
|
service=None):
|
|
if service is None:
|
|
service = sample_service(notify_db, notify_db_session)
|
|
sample_api_key(notify_db, notify_db_session, service=service)
|
|
data = {
|
|
'name': template_name,
|
|
'template_type': template_type,
|
|
'content': content,
|
|
'service': service
|
|
}
|
|
template = Template(**data)
|
|
save_model_template(template)
|
|
return template
|
|
|
|
|
|
@pytest.fixture(scope='function')
|
|
def sample_api_key(notify_db,
|
|
notify_db_session,
|
|
service=None):
|
|
if service is None:
|
|
service = sample_service(notify_db, notify_db_session)
|
|
data = {'service_id': service.id, 'name': uuid.uuid4()}
|
|
api_key = ApiKey(**data)
|
|
save_model_api_key(api_key)
|
|
return api_key
|
|
|
|
|
|
@pytest.fixture(scope='function')
|
|
def sample_job(notify_db,
|
|
notify_db_session,
|
|
service=None,
|
|
template=None):
|
|
if service is None:
|
|
service = sample_service(notify_db, notify_db_session)
|
|
if template is None:
|
|
template = sample_template(notify_db, notify_db_session,
|
|
service=service)
|
|
job_id = uuid.uuid4()
|
|
bucket_name = 'service-{}-notify'.format(service.id)
|
|
file_name = '{}.csv'.format(job_id)
|
|
data = {
|
|
'id': uuid.uuid4(),
|
|
'service_id': service.id,
|
|
'template_id': template.id,
|
|
'bucket_name': bucket_name,
|
|
'file_name': file_name,
|
|
'original_file_name': 'some.csv'
|
|
}
|
|
job = Job(**data)
|
|
save_job(job)
|
|
return job
|
|
|
|
|
|
@pytest.fixture(scope='function')
|
|
def sample_admin_service_id(notify_db, notify_db_session):
|
|
admin_user = sample_user(notify_db, notify_db_session, email="notify_admin@digital.cabinet-office.gov.uk")
|
|
admin_service = sample_service(notify_db, notify_db_session, service_name="Sample Admin Service", user=admin_user)
|
|
data = {'service': admin_service, 'name': 'sample admin key'}
|
|
api_key = ApiKey(**data)
|
|
save_model_api_key(api_key)
|
|
return admin_service.id
|
|
|
|
|
|
@pytest.fixture(scope='function')
|
|
def mock_secret_code(mocker):
|
|
def _create():
|
|
return '11111'
|
|
|
|
mock_class = mocker.patch('app.dao.users_dao.create_secret_code', side_effect=_create)
|
|
return mock_class
|
|
|
|
|
|
@pytest.fixture(scope='function')
|
|
def sample_notification(notify_db,
|
|
notify_db_session,
|
|
service=None,
|
|
template=None,
|
|
job=None):
|
|
if service is None:
|
|
service = sample_service(notify_db, notify_db_session)
|
|
if template is None:
|
|
template = sample_template(notify_db, notify_db_session, service=service)
|
|
if job is None:
|
|
job = sample_job(notify_db, notify_db_session, service=service, template=template)
|
|
|
|
notificaton_id = uuid.uuid4()
|
|
to = '+44709123456'
|
|
|
|
data = {
|
|
'id': notificaton_id,
|
|
'to': to,
|
|
'job': job,
|
|
'service': service,
|
|
'template': template
|
|
}
|
|
notification = Notification(**data)
|
|
save_notification(notification)
|
|
return notification
|