Merge pull request #136 from dod-ccpo/factory-session

implement database sessions for test factories
This commit is contained in:
dandds 2018-08-07 15:31:08 -04:00 committed by GitHub
commit ee8f37a862
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 39 additions and 49 deletions

View File

@ -6,9 +6,10 @@ import alembic.command
from atst.app import make_app, make_config
from atst.database import db as _db
from .mocks import MOCK_USER
import tests.factories as factories
@pytest.fixture(scope='session')
@pytest.fixture(scope="session")
def app(request):
config = make_config()
@ -27,11 +28,11 @@ def apply_migrations():
alembic_config = os.path.join(os.path.dirname(__file__), "../", "alembic.ini")
config = alembic.config.Config(alembic_config)
app_config = make_config()
config.set_main_option('sqlalchemy.url', app_config["DATABASE_URI"])
alembic.command.upgrade(config, 'head')
config.set_main_option("sqlalchemy.url", app_config["DATABASE_URI"])
alembic.command.upgrade(config, "head")
@pytest.fixture(scope='session')
@pytest.fixture(scope="session")
def db(app, request):
_db.app = app
@ -43,7 +44,7 @@ def db(app, request):
_db.drop_all()
@pytest.fixture(scope='function', autouse=True)
@pytest.fixture(scope="function", autouse=True)
def session(db, request):
"""Creates a new database session for a test."""
connection = db.engine.connect()
@ -54,6 +55,14 @@ def session(db, request):
db.session = session
factory_list = [
cls
for _name, cls in factories.__dict__.items()
if isinstance(cls, type) and cls.__module__ == "tests.factories"
]
for factory in factory_list:
factory._meta.sqlalchemy_session = session
yield session
transaction.rollback()
@ -66,6 +75,7 @@ class DummyForm(dict):
class DummyField(object):
def __init__(self, data=None, errors=(), raw_data=None):
self.data = data
self.errors = list(errors)
@ -81,10 +91,11 @@ def dummy_form():
def dummy_field():
return DummyField()
@pytest.fixture
def user_session(monkeypatch):
def set_user_session(user = MOCK_USER):
def set_user_session(user=MOCK_USER):
monkeypatch.setattr("atst.domain.auth.get_current_user", lambda *args: user)
return set_user_session

View File

@ -6,20 +6,8 @@ from atst.domain.pe_numbers import PENumbers
from tests.factories import PENumberFactory
@pytest.fixture(scope="function")
def new_pe_number(session):
def make_pe_number(**kwargs):
pen = PENumberFactory.create(**kwargs)
session.add(pen)
session.commit()
return pen
return make_pe_number
def test_can_get_pe_number(new_pe_number):
new_pen = new_pe_number(number="0701367F", description="Combat Support - Offensive")
def test_can_get_pe_number():
new_pen = PENumberFactory.create(number="0701367F", description="Combat Support - Offensive")
pen = PENumbers.get(new_pen.number)
assert pen.number == new_pen.number

View File

@ -9,11 +9,7 @@ from tests.factories import RequestFactory
@pytest.fixture(scope="function")
def new_request(session):
created_request = RequestFactory.create()
session.add(created_request)
session.commit()
return created_request
return RequestFactory.create()
def test_can_get_request(new_request):

View File

@ -6,20 +6,8 @@ from atst.domain.task_orders import TaskOrders
from tests.factories import TaskOrderFactory
@pytest.fixture(scope="function")
def new_task_order(session):
def make_task_order(**kwargs):
to = TaskOrderFactory.create(**kwargs)
session.add(to)
session.commit()
return to
return make_task_order
def test_can_get_task_order(new_task_order):
new_to = new_task_order(number="0101969F")
def test_can_get_task_order():
new_to = TaskOrderFactory.create(number="0101969F")
to = TaskOrders.get(new_to.number)
assert to.id == to.id

View File

@ -8,27 +8,36 @@ from atst.models.user import User
from atst.models.role import Role
class RequestFactory(factory.Factory):
class RequestFactory(factory.alchemy.SQLAlchemyModelFactory):
class Meta:
model = Request
id = factory.Sequence(lambda x: uuid4())
class PENumberFactory(factory.Factory):
class PENumberFactory(factory.alchemy.SQLAlchemyModelFactory):
class Meta:
model = PENumber
class TaskOrderFactory(factory.Factory):
class TaskOrderFactory(factory.alchemy.SQLAlchemyModelFactory):
class Meta:
model = TaskOrder
class RoleFactory(factory.Factory):
class RoleFactory(factory.alchemy.SQLAlchemyModelFactory):
class Meta:
model = Role
permissions = []
class UserFactory(factory.Factory):
class UserFactory(factory.alchemy.SQLAlchemyModelFactory):
class Meta:
model = User

View File

@ -1,8 +1,8 @@
from tests.factories import RequestFactory, UserFactory
MOCK_USER = UserFactory.create()
MOCK_REQUEST = RequestFactory.create(
MOCK_USER = UserFactory.build()
MOCK_REQUEST = RequestFactory.build(
creator=MOCK_USER.id,
body={
"financial_verification": {

View File

@ -61,11 +61,9 @@ class TestPENumberInForm:
assert response.status_code == 302
assert "/requests/financial_verification_submitted" in response.headers.get("Location")
def test_submit_request_form_with_new_valid_pe_id(self, session, monkeypatch, client):
def test_submit_request_form_with_new_valid_pe_id(self, monkeypatch, client):
self._set_monkeypatches(monkeypatch)
pe = PENumberFactory.create(number="8675309U", description="sample PE number")
session.add(pe)
session.commit()
data = dict(self.required_data)
data['pe_id'] = pe.number