refactor sample_user to create a new create_user function

this create_user function can be imported for use in creating specific
users in your tests, for example

```
from tests.app.db import create_user
def test_create_user_persists_to_database(notify_db_session):
    user = create_user()
    assert User.query.count() == 1
```

this has the benefit of not requiring you to pass the notify_db and
notify_db_session fixtures around, and separating custom object
creation from the fixture dependency trees to aid clarity

I started with sample_user since it has no downstream dependencies, but
the intention is to push this out to all db fixtures eventually. This
is a total conversion, but can be rolled out in a non-breaking manner
by keeping arguments in the fixture, and passing them through to the
new db function - then tests can be updated to use the create_* instead
of sample_* functions as and when you want to
This commit is contained in:
Leo Hemsted
2016-12-28 12:30:21 +00:00
parent 46d1e3bdb6
commit aeb79a0de9
2 changed files with 31 additions and 27 deletions

View File

@@ -25,7 +25,7 @@ from app.models import (
ServiceWhitelist, ServiceWhitelist,
KEY_TYPE_NORMAL, KEY_TYPE_TEST, KEY_TYPE_TEAM, KEY_TYPE_NORMAL, KEY_TYPE_TEST, KEY_TYPE_TEAM,
MOBILE_TYPE, EMAIL_TYPE, NOTIFICATION_STATUS_TYPES_COMPLETED) MOBILE_TYPE, EMAIL_TYPE, NOTIFICATION_STATUS_TYPES_COMPLETED)
from app.dao.users_dao import (save_model_user, create_user_code, create_secret_code) from app.dao.users_dao import (create_user_code, create_secret_code)
from app.dao.services_dao import (dao_create_service, dao_add_user_to_service) from app.dao.services_dao import (dao_create_service, dao_add_user_to_service)
from app.dao.templates_dao import dao_create_template from app.dao.templates_dao import dao_create_template
from app.dao.api_key_dao import save_model_api_key from app.dao.api_key_dao import save_model_api_key
@@ -35,6 +35,8 @@ from app.dao.invited_user_dao import save_invited_user
from app.dao.provider_rates_dao import create_provider_rates from app.dao.provider_rates_dao import create_provider_rates
from app.clients.sms.firetext import FiretextClient from app.clients.sms.firetext import FiretextClient
from tests.app.db import create_user
@pytest.yield_fixture @pytest.yield_fixture
def rmock(): def rmock():
@@ -47,7 +49,7 @@ def service_factory(notify_db, notify_db_session):
class ServiceFactory(object): class ServiceFactory(object):
def get(self, service_name, user=None, template_type=None, email_from=None): def get(self, service_name, user=None, template_type=None, email_from=None):
if not user: if not user:
user = sample_user(notify_db, notify_db_session) user = create_user()
if not email_from: if not email_from:
email_from = service_name email_from = service_name
service = sample_service(notify_db, notify_db_session, service_name, user, email_from=email_from) service = sample_service(notify_db, notify_db_session, service_name, user, email_from=email_from)
@@ -71,30 +73,15 @@ def service_factory(notify_db, notify_db_session):
@pytest.fixture(scope='function') @pytest.fixture(scope='function')
def sample_user(notify_db, def sample_user(notify_db_session):
notify_db_session, return create_user()
mobile_numnber="+447700900986",
email="notify@digital.cabinet-office.gov.uk"):
data = {
'name': 'Test User',
'email_address': email,
'password': 'password',
'mobile_number': mobile_numnber,
'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): def create_code(notify_db, notify_db_session, code_type, usr=None, code=None):
if code is None: if code is None:
code = create_secret_code() code = create_secret_code()
if usr is None: if usr is None:
usr = sample_user(notify_db, notify_db_session) usr = create_user()
return create_user_code(usr, code, code_type), code return create_user_code(usr, code, code_type), code
@@ -138,7 +125,7 @@ def sample_service(notify_db,
limit=1000, limit=1000,
email_from=None): email_from=None):
if user is None: if user is None:
user = sample_user(notify_db, notify_db_session) user = create_user()
if email_from is None: if email_from is None:
email_from = service_name.lower().replace(' ', '.') email_from = service_name.lower().replace(' ', '.')
data = { data = {
@@ -171,11 +158,11 @@ def sample_template(notify_db,
service=None, service=None,
created_by=None): created_by=None):
if user is None: if user is None:
user = sample_user(notify_db, notify_db_session) user = create_user()
if service is None: if service is None:
service = sample_service(notify_db, notify_db_session) service = sample_service(notify_db, notify_db_session)
if created_by is None: if created_by is None:
created_by = sample_user(notify_db, notify_db_session) created_by = create_user()
data = { data = {
'name': template_name, 'name': template_name,
'template_type': template_type, 'template_type': template_type,
@@ -210,7 +197,7 @@ def sample_email_template(
subject_line='Email Subject', subject_line='Email Subject',
service=None): service=None):
if user is None: if user is None:
user = sample_user(notify_db, notify_db_session) user = create_user()
if service is None: if service is None:
service = sample_service(notify_db, notify_db_session) service = sample_service(notify_db, notify_db_session)
data = { data = {
@@ -590,7 +577,7 @@ def sample_permission(notify_db,
user=None, user=None,
permission="manage_settings"): permission="manage_settings"):
if user is None: if user is None:
user = sample_user(notify_db, notify_db_session) user = create_user()
data = { data = {
'user': user, 'user': user,
'permission': permission 'permission': permission
@@ -617,7 +604,7 @@ def sample_service_permission(notify_db,
user=None, user=None,
permission="manage_settings"): permission="manage_settings"):
if user is None: if user is None:
user = sample_user(notify_db, notify_db_session) user = create_user()
if service is None: if service is None:
service = sample_service(notify_db, notify_db_session, user=user) service = sample_service(notify_db, notify_db_session, user=user)
data = { data = {
@@ -816,7 +803,7 @@ def create_notify_template(service, user, template_config_name, content, templat
def notify_service(notify_db, notify_db_session): def notify_service(notify_db, notify_db_session):
user = sample_user(notify_db, notify_db_session) user = create_user()
service = Service.query.get(current_app.config['NOTIFY_SERVICE_ID']) service = Service.query.get(current_app.config['NOTIFY_SERVICE_ID'])
if not service: if not service:
data = { data = {

17
tests/app/db.py Normal file
View File

@@ -0,0 +1,17 @@
from app.models import User
from app.dao.users_dao import save_model_user
def create_user(mobile_number="+447700900986", email="notify@digital.cabinet-office.gov.uk"):
data = {
'name': 'Test User',
'email_address': email,
'password': 'password',
'mobile_number': mobile_number,
'state': 'active'
}
usr = User.query.filter_by(email_address=email).first()
if not usr:
usr = User(**data)
save_model_user(usr)
return usr