use pytest.mark.usefixtures instead of funcargs

when you invoke the fixture `sample_user`, it does two things: it
creates the user in the database, but also returns the user, a useful
object that you may want to manipulate or reference in your test.

however, when you invoke the fixture `notify_db_session`, it doesn't
do anything - rather, it *promises* to clear up the database tables
at the end of the test run.

because we have no need of the notify_db_session object in our tests
(indeed, for a long time this fixture just returned `None`), using
`pytest.mark.usefixtures('notify_db_session')` brings attention to the
fact that this is a side-effect fixture rather than a data setup
fixture. Functionally it is identical to passing as a parameter
This commit is contained in:
Leo Hemsted
2016-12-28 13:38:55 +00:00
parent 996bd2579a
commit 44a8526807

View File

@@ -1,10 +1,10 @@
from datetime import datetime, timedelta from datetime import datetime, timedelta
from sqlalchemy.exc import DataError from sqlalchemy.exc import DataError
from sqlalchemy.orm.exc import NoResultFound from sqlalchemy.orm.exc import NoResultFound
from app import db
import pytest import pytest
from app import db
from app.dao.users_dao import ( from app.dao.users_dao import (
save_model_user, save_model_user,
save_user_attribute, save_user_attribute,
@@ -21,7 +21,8 @@ from app.models import User, VerifyCode
from tests.app.db import create_user from tests.app.db import create_user
def test_create_user(notify_db_session): @pytest.mark.usefixtures('notify_db_session')
def test_create_user():
email = 'notify@digital.cabinet-office.gov.uk' email = 'notify@digital.cabinet-office.gov.uk'
data = { data = {
'name': 'Test User', 'name': 'Test User',
@@ -37,7 +38,8 @@ def test_create_user(notify_db_session):
assert not user.platform_admin assert not user.platform_admin
def test_get_all_users(notify_db_session): @pytest.mark.usefixtures('notify_db_session')
def test_get_all_users():
create_user(email='1@test.com') create_user(email='1@test.com')
create_user(email='2@test.com') create_user(email='2@test.com')
@@ -45,18 +47,21 @@ def test_get_all_users(notify_db_session):
assert len(get_user_by_id()) == 2 assert len(get_user_by_id()) == 2
def test_get_user(notify_db_session): @pytest.mark.usefixtures('notify_db_session')
def test_get_user():
email = '1@test.com' email = '1@test.com'
user = create_user(email=email) user = create_user(email=email)
assert get_user_by_id(user_id=user.id).email_address == email assert get_user_by_id(user_id=user.id).email_address == email
def test_get_user_not_exists(notify_db_session, fake_uuid): @pytest.mark.usefixtures('notify_db_session')
def test_get_user_not_exists(fake_uuid):
with pytest.raises(NoResultFound): with pytest.raises(NoResultFound):
get_user_by_id(user_id=fake_uuid) get_user_by_id(user_id=fake_uuid)
def test_get_user_invalid_id(notify_db_session): @pytest.mark.usefixtures('notify_db_session')
def test_get_user_invalid_id():
with pytest.raises(DataError): with pytest.raises(DataError):
get_user_by_id(user_id="blah") get_user_by_id(user_id="blah")