mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-16 20:49:00 -04:00
Working tests, hopefully all code changes done.
This commit is contained in:
@@ -8,7 +8,7 @@ from flask.ext.migrate import Migrate, MigrateCommand
|
||||
from flask.ext.script import Manager
|
||||
from sqlalchemy.schema import MetaData
|
||||
|
||||
from app import create_app, db
|
||||
from app import create_app
|
||||
from . import (
|
||||
create_test_user, service_json, TestClient,
|
||||
get_test_user, template_json, api_key_json)
|
||||
@@ -29,42 +29,9 @@ def app_(request):
|
||||
return app
|
||||
|
||||
|
||||
@pytest.fixture(scope='session')
|
||||
def db_(app_, request):
|
||||
Migrate(app_, db)
|
||||
Manager(db, MigrateCommand)
|
||||
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
|
||||
ALEMBIC_CONFIG = os.path.join(BASE_DIR, 'migrations')
|
||||
config = Config(ALEMBIC_CONFIG + '/alembic.ini')
|
||||
config.set_main_option("script_location", ALEMBIC_CONFIG)
|
||||
|
||||
with app_.app_context():
|
||||
upgrade(config, 'head')
|
||||
|
||||
def teardown():
|
||||
db.session.remove()
|
||||
db.drop_all()
|
||||
db.engine.execute("drop table alembic_version")
|
||||
db.get_engine(app_).dispose()
|
||||
|
||||
request.addfinalizer(teardown)
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def db_session(request):
|
||||
def teardown():
|
||||
db.session.remove()
|
||||
for tbl in reversed(meta.sorted_tables):
|
||||
if tbl.fullname not in ['roles']:
|
||||
db.engine.execute(tbl.delete())
|
||||
|
||||
meta = MetaData(bind=db.engine, reflect=True)
|
||||
request.addfinalizer(teardown)
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def service_one(request, mock_api_user):
|
||||
return service_json(1, 'service one', [mock_api_user.id])
|
||||
def service_one(request, api_user_active):
|
||||
return service_json(1, 'service one', [api_user_active.id])
|
||||
|
||||
|
||||
# @pytest.fixture(scope='function')
|
||||
@@ -86,10 +53,10 @@ def mock_send_email(request, mocker):
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def mock_get_service(mocker, mock_api_user):
|
||||
def mock_get_service(mocker, api_user_active):
|
||||
def _create(service_id):
|
||||
service = service_json(
|
||||
service_id, "Test Service", [mock_api_user.id], limit=1000,
|
||||
service_id, "Test Service", [api_user_active.id], limit=1000,
|
||||
active=False, restricted=True)
|
||||
return {'data': service, 'token': 1}
|
||||
|
||||
@@ -128,12 +95,12 @@ def mock_update_service(mocker):
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def mock_get_services(mocker, mock_api_user):
|
||||
def mock_get_services(mocker, api_user_active):
|
||||
def _create():
|
||||
service_one = service_json(
|
||||
1, "service_one", [mock_api_user.id], 1000, True, False)
|
||||
1, "service_one", [api_user_active.id], 1000, True, False)
|
||||
service_two = service_json(
|
||||
2, "service_two", [mock_api_user.id], 1000, True, False)
|
||||
2, "service_two", [api_user_active.id], 1000, True, False)
|
||||
return {'data': [service_one, service_two]}
|
||||
|
||||
mock_class = mocker.patch(
|
||||
@@ -217,7 +184,7 @@ def mock_delete_service_template(mocker):
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def mock_api_user(mocker):
|
||||
def api_user_pending(mocker):
|
||||
from app.notify_client.user_api_client import User
|
||||
user_data = {'id': 1,
|
||||
'name': 'Test User',
|
||||
@@ -232,55 +199,76 @@ def mock_api_user(mocker):
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def mock_register_user(mocker, mock_api_user):
|
||||
def api_user_active(mocker):
|
||||
from app.notify_client.user_api_client import User
|
||||
user_data = {'id': 1,
|
||||
'name': 'Test User',
|
||||
'password': 'somepassword',
|
||||
'email_address': 'test@user.gov.uk',
|
||||
'mobile_number': '+4412341234',
|
||||
'state': 'active',
|
||||
'failed_login_count': 0
|
||||
}
|
||||
user = User(user_data)
|
||||
return user
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def mock_register_user(mocker, api_user_pending):
|
||||
def _register(name, email_address, mobile_number, password):
|
||||
mock_api_user.fields['name'] = name
|
||||
mock_api_user.fields['email_address'] = email_address
|
||||
mock_api_user.fields['mobile_number'] = mobile_number
|
||||
mock_api_user.fields['password'] = password
|
||||
return mock_api_user
|
||||
api_user_pending.fields['name'] = name
|
||||
api_user_pending.fields['email_address'] = email_address
|
||||
api_user_pending.fields['mobile_number'] = mobile_number
|
||||
api_user_pending.fields['password'] = password
|
||||
return api_user_pending
|
||||
return mocker.patch('app.user_api_client.register_user', side_effect=_register)
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def mock_user_loader(mocker, mock_api_user):
|
||||
def mock_user_loader(mocker, api_user_active):
|
||||
mock_class = mocker.patch('app.main.dao.users_dao.get_user_by_id')
|
||||
mock_class.return_value = mock_api_user
|
||||
mock_class.return_value = api_user_active
|
||||
return mock_class
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def mock_activate_user(mocker, mock_api_user):
|
||||
def _activate(mock_api_user):
|
||||
mock_api_user.state = 'active'
|
||||
return mock_api_user
|
||||
def mock_activate_user(mocker, api_user_pending):
|
||||
def _activate(api_user_pending):
|
||||
api_user_pending.state = 'active'
|
||||
return api_user_pending
|
||||
return mocker.patch('app.user_api_client.update_user', side_effect=_activate)
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def mock_user_dao_get_user(mocker, mock_api_user):
|
||||
def mock_user_dao_get_user(mocker, api_user_active):
|
||||
def _get_user(id):
|
||||
return mock_api_user
|
||||
return api_user_active
|
||||
return mocker.patch('app.main.dao.users_dao.get_user_by_id', side_effect=_get_user)
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def mock_user_dao_get_by_email(mocker, mock_api_user):
|
||||
mock_api_user.state = 'active'
|
||||
def mock_get_user(mocker, api_user_active):
|
||||
def _get_user(id):
|
||||
return api_user_active
|
||||
return mocker.patch(
|
||||
'app.user_api_client.get_user', side_effect=_get_user)
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def mock_user_dao_get_by_email(mocker, api_user_active):
|
||||
|
||||
def _get_user(email_address):
|
||||
mock_api_user.fields['email_address'] = email_address
|
||||
return mock_api_user
|
||||
api_user_active.fields['email_address'] = email_address
|
||||
return api_user_active
|
||||
return mocker.patch('app.main.dao.users_dao.get_user_by_email', side_effect=_get_user)
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def mock_inactive_user_dao_get_by_email(mocker, mock_api_user):
|
||||
def mock_inactive_user_dao_get_by_email(mocker, api_user_pending):
|
||||
def _get_user(email_address):
|
||||
mock_api_user.fields['email_address'] = email_address
|
||||
mock_api_user.state = 'pending'
|
||||
mock_api_user.fields['is_locked'] = True
|
||||
return mock_api_user
|
||||
api_user_pending.fields['email_address'] = email_address
|
||||
api_user_pending.fields['is_locked'] = True
|
||||
return api_user_pending
|
||||
return mocker.patch('app.main.dao.users_dao.get_user_by_email', side_effect=_get_user)
|
||||
|
||||
|
||||
@@ -290,42 +278,77 @@ def mock_user_by_email_not_found(mocker):
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def mock_user_dao_checkpassword(mocker, mock_api_user):
|
||||
def mock_get_user_by_email(mocker, api_user_active):
|
||||
|
||||
def _check(mock_api_user, password):
|
||||
def _get_user(email_address):
|
||||
api_user_active.fields['email_address'] = email_address
|
||||
return api_user_active
|
||||
return mocker.patch(
|
||||
'app.user_api_client.get_user_by_email', side_effect=_get_user)
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def mock_get_user_by_email_not_found(mocker):
|
||||
return mocker.patch(
|
||||
'app.user_api_client.get_user_by_email', return_value=None)
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def mock_user_dao_checkpassword(mocker, api_user_active):
|
||||
|
||||
def _check(api_user_active, password):
|
||||
return True
|
||||
return mocker.patch('app.main.dao.users_dao.verify_password', side_effect=_check)
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def mock_user_dao_update_email(mocker, mock_api_user):
|
||||
def mock_verify_password(mocker):
|
||||
def _verify_password(user, password):
|
||||
return True
|
||||
return mocker.patch(
|
||||
'app.user_api_client.verify_password',
|
||||
side_effect=_verify_password)
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def mock_user_dao_update_email(mocker, api_user_active):
|
||||
|
||||
def _update(id, email_address):
|
||||
mock_api_user.fields['email_address'] = email_address
|
||||
api_user_active.fields['email_address'] = email_address
|
||||
return api_user_active
|
||||
return mocker.patch('app.main.dao.users_dao.update_email_address', side_effect=_update)
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def mock_user_dao_update_mobile(mocker, mock_api_user):
|
||||
def mock_user_dao_update_mobile(mocker, api_user_active):
|
||||
|
||||
def _update(id, mobile_number):
|
||||
mock_api_user.fields['mobile_number'] = mobile_number
|
||||
api_user_active.fields['mobile_number'] = mobile_number
|
||||
return api_user_active
|
||||
return mocker.patch('app.main.dao.users_dao.update_mobile_number', side_effect=_update)
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def mock_user_dao_password_reset(mocker, mock_api_user):
|
||||
def mock_user_dao_password_reset(mocker, api_user_active):
|
||||
|
||||
def _reset(email):
|
||||
mock_api_user.state = 'request_password_reset'
|
||||
api_user_active.state = 'request_password_reset'
|
||||
return mocker.patch('app.main.dao.users_dao.request_password_reset', side_effect=_reset)
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def mock_user_dao_get_new_password(mocker, mock_api_user):
|
||||
mock_api_user.state = 'request_password_reset'
|
||||
def mock_update_user(mocker):
|
||||
|
||||
def _update(user):
|
||||
return user
|
||||
return mocker.patch('app.user_api_client.update_user', side_effect=_update)
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def mock_user_dao_get_new_password(mocker, api_user_active):
|
||||
api_user_active.state = 'request_password_reset'
|
||||
mock_class = mocker.patch('app.main.dao.users_dao.get_user_by_email')
|
||||
mock_class.return_value = mock_api_user
|
||||
mock_class.return_value = api_user_active
|
||||
return mock_class
|
||||
|
||||
|
||||
@@ -344,7 +367,9 @@ def mock_revoke_api_key(mocker):
|
||||
def _revoke(service_id, key_id):
|
||||
return {}
|
||||
|
||||
mock_class = mocker.patch('app.api_key_api_client.revoke_api_key', side_effect=_revoke)
|
||||
mock_class = mocker.patch(
|
||||
'app.api_key_api_client.revoke_api_key',
|
||||
side_effect=_revoke)
|
||||
return mock_class
|
||||
|
||||
|
||||
@@ -367,3 +392,49 @@ def mock_get_no_api_keys(mocker):
|
||||
|
||||
mock_class = mocker.patch('app.api_key_api_client.get_api_keys', side_effect=_get_keys)
|
||||
return mock_class
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def mock_login(mocker, mock_user_dao_get_user, mock_update_user):
|
||||
def _verify_code(user_id, code, code_type):
|
||||
return True, ''
|
||||
mock_class = mocker.patch(
|
||||
'app.user_api_client.check_verify_code',
|
||||
side_effect=_verify_code)
|
||||
return mock_class
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def mock_send_verify_code(mocker):
|
||||
mock_class = mocker.patch('app.user_api_client.send_verify_code')
|
||||
return mock_class
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def mock_check_verify_code(mocker):
|
||||
def _verify(user_id, code, code_type):
|
||||
return True, ''
|
||||
mock_class = mocker.patch(
|
||||
'app.user_api_client.check_verify_code',
|
||||
side_effect=_verify)
|
||||
return mock_class
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def mock_check_verify_code_code_not_found(mocker):
|
||||
def _verify(user_id, code, code_type):
|
||||
return False, 'Code not found'
|
||||
mock_class = mocker.patch(
|
||||
'app.user_api_client.check_verify_code',
|
||||
side_effect=_verify)
|
||||
return mock_class
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def mock_check_verify_code_code_expired(mocker):
|
||||
def _verify(user_id, code, code_type):
|
||||
return False, 'Code has expired'
|
||||
mock_class = mocker.patch(
|
||||
'app.user_api_client.check_verify_code',
|
||||
side_effect=_verify)
|
||||
return mock_class
|
||||
|
||||
Reference in New Issue
Block a user