Added dao, test framework and tests for dao.

This commit is contained in:
Nicholas Staples
2016-01-08 12:18:12 +00:00
parent a327702ad0
commit 5bcc615825
9 changed files with 118 additions and 17 deletions

22
tests/app/conftest.py Normal file
View File

@@ -0,0 +1,22 @@
import pytest
from app.main.dao.users_dao import (create_user, get_users)
from app.main.dao.services_dao import (create_service, get_services)
@pytest.fixture(scope='function')
def sample_user(notify_db,
notify_db_session,
email="notify@digital.cabinet-office.gov.uk"):
user_id = create_user(email)
return get_users(user_id=user_id)
@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)
service_id = create_service(service_name, user)
return get_services(service_id=service_id)

View File

View File

@@ -1,8 +1,38 @@
from app.main.dao.services_dao import (create_service, get_services)
from tests.app.conftest import sample_service as create_sample_service
from app.models import Service
def test_create_service(notify_api):
pass
def test_create_service(notify_api, notify_db, notify_db_session, sample_user):
assert Service.query.count() == 0
service_name = 'Sample Service'
service_id = create_service(service_name, sample_user)
assert Service.query.count() == 1
assert Service.query.first().name == service_name
assert Service.query.first().id == service_id
def test_get_all_services(notify_api):
pass
def test_get_services(notify_api, notify_db, notify_db_session, sample_user):
sample_service = create_sample_service(notify_db,
notify_db_session,
user=sample_user)
assert Service.query.count() == 1
assert len(get_services()) == 1
service_name = "Another service"
sample_service = create_sample_service(notify_db,
notify_db_session,
service_name=service_name,
user=sample_user)
assert Service.query.count() == 2
assert len(get_services()) == 2
def test_get_user_service(notify_api, notify_db, notify_db_session, sample_user):
assert Service.query.count() == 0
service_name = "Random service"
sample_service = create_sample_service(notify_db,
notify_db_session,
service_name=service_name,
user=sample_user)
assert get_services(service_id=sample_service.id).name == service_name
assert Service.query.count() == 1

View File

@@ -0,0 +1,30 @@
from app.main.dao.users_dao import (create_user, get_users)
from tests.app.conftest import sample_user as create_sample_user
from app.models import User
def test_create_user(notify_api, notify_db, notify_db_session):
email = 'notify@digital.cabinet-office.gov.uk'
user_id = create_user(email)
assert User.query.count() == 1
assert User.query.first().email_address == email
assert User.query.filter_by(id=user_id).one()
def test_get_all_users(notify_api, notify_db, notify_db_session, sample_user):
assert User.query.count() == 1
assert len(get_users()) == 1
email = "another.notify@digital.cabinet-office.gov.uk"
another_user = create_sample_user(notify_db,
notify_db_session,
email=email)
assert User.query.count() == 2
assert len(get_users()) == 2
def test_get_user(notify_api, notify_db, notify_db_session):
email = "another.notify@digital.cabinet-office.gov.uk"
another_user = create_sample_user(notify_db,
notify_db_session,
email=email)
assert get_users(user_id=another_user.id).email_address == email

View File

@@ -6,8 +6,9 @@ from alembic.command import upgrade
from alembic.config import Config
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 models
@pytest.fixture(scope='session')
@@ -33,6 +34,10 @@ def notify_db(notify_api, request):
config.set_main_option("script_location", ALEMBIC_CONFIG)
with notify_api.app_context():
# TODO this next line shouldn't be needed,
# but cannot work out the import order to
# remove it.
db.create_all()
upgrade(config, 'head')
def teardown():
@@ -44,6 +49,18 @@ def notify_db(notify_api, request):
request.addfinalizer(teardown)
@pytest.fixture(scope='function')
def notify_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 notify_config(notify_api):
notify_api.config['NOTIFY_API_ENVIRONMENT'] = 'test'