Merge pull request #136 from dod-ccpo/factory-session
implement database sessions for test factories
This commit is contained in:
commit
ee8f37a862
@ -6,9 +6,10 @@ import alembic.command
|
|||||||
from atst.app import make_app, make_config
|
from atst.app import make_app, make_config
|
||||||
from atst.database import db as _db
|
from atst.database import db as _db
|
||||||
from .mocks import MOCK_USER
|
from .mocks import MOCK_USER
|
||||||
|
import tests.factories as factories
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope='session')
|
@pytest.fixture(scope="session")
|
||||||
def app(request):
|
def app(request):
|
||||||
config = make_config()
|
config = make_config()
|
||||||
|
|
||||||
@ -27,11 +28,11 @@ def apply_migrations():
|
|||||||
alembic_config = os.path.join(os.path.dirname(__file__), "../", "alembic.ini")
|
alembic_config = os.path.join(os.path.dirname(__file__), "../", "alembic.ini")
|
||||||
config = alembic.config.Config(alembic_config)
|
config = alembic.config.Config(alembic_config)
|
||||||
app_config = make_config()
|
app_config = make_config()
|
||||||
config.set_main_option('sqlalchemy.url', app_config["DATABASE_URI"])
|
config.set_main_option("sqlalchemy.url", app_config["DATABASE_URI"])
|
||||||
alembic.command.upgrade(config, 'head')
|
alembic.command.upgrade(config, "head")
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope='session')
|
@pytest.fixture(scope="session")
|
||||||
def db(app, request):
|
def db(app, request):
|
||||||
|
|
||||||
_db.app = app
|
_db.app = app
|
||||||
@ -43,7 +44,7 @@ def db(app, request):
|
|||||||
_db.drop_all()
|
_db.drop_all()
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope='function', autouse=True)
|
@pytest.fixture(scope="function", autouse=True)
|
||||||
def session(db, request):
|
def session(db, request):
|
||||||
"""Creates a new database session for a test."""
|
"""Creates a new database session for a test."""
|
||||||
connection = db.engine.connect()
|
connection = db.engine.connect()
|
||||||
@ -54,6 +55,14 @@ def session(db, request):
|
|||||||
|
|
||||||
db.session = session
|
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
|
yield session
|
||||||
|
|
||||||
transaction.rollback()
|
transaction.rollback()
|
||||||
@ -66,6 +75,7 @@ class DummyForm(dict):
|
|||||||
|
|
||||||
|
|
||||||
class DummyField(object):
|
class DummyField(object):
|
||||||
|
|
||||||
def __init__(self, data=None, errors=(), raw_data=None):
|
def __init__(self, data=None, errors=(), raw_data=None):
|
||||||
self.data = data
|
self.data = data
|
||||||
self.errors = list(errors)
|
self.errors = list(errors)
|
||||||
@ -81,10 +91,11 @@ def dummy_form():
|
|||||||
def dummy_field():
|
def dummy_field():
|
||||||
return DummyField()
|
return DummyField()
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def user_session(monkeypatch):
|
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)
|
monkeypatch.setattr("atst.domain.auth.get_current_user", lambda *args: user)
|
||||||
|
|
||||||
return set_user_session
|
return set_user_session
|
||||||
|
@ -6,20 +6,8 @@ from atst.domain.pe_numbers import PENumbers
|
|||||||
from tests.factories import PENumberFactory
|
from tests.factories import PENumberFactory
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="function")
|
def test_can_get_pe_number():
|
||||||
def new_pe_number(session):
|
new_pen = PENumberFactory.create(number="0701367F", description="Combat Support - Offensive")
|
||||||
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")
|
|
||||||
pen = PENumbers.get(new_pen.number)
|
pen = PENumbers.get(new_pen.number)
|
||||||
|
|
||||||
assert pen.number == new_pen.number
|
assert pen.number == new_pen.number
|
||||||
|
@ -9,11 +9,7 @@ from tests.factories import RequestFactory
|
|||||||
|
|
||||||
@pytest.fixture(scope="function")
|
@pytest.fixture(scope="function")
|
||||||
def new_request(session):
|
def new_request(session):
|
||||||
created_request = RequestFactory.create()
|
return RequestFactory.create()
|
||||||
session.add(created_request)
|
|
||||||
session.commit()
|
|
||||||
|
|
||||||
return created_request
|
|
||||||
|
|
||||||
|
|
||||||
def test_can_get_request(new_request):
|
def test_can_get_request(new_request):
|
||||||
|
@ -6,20 +6,8 @@ from atst.domain.task_orders import TaskOrders
|
|||||||
from tests.factories import TaskOrderFactory
|
from tests.factories import TaskOrderFactory
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="function")
|
def test_can_get_task_order():
|
||||||
def new_task_order(session):
|
new_to = TaskOrderFactory.create(number="0101969F")
|
||||||
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")
|
|
||||||
to = TaskOrders.get(new_to.number)
|
to = TaskOrders.get(new_to.number)
|
||||||
|
|
||||||
assert to.id == to.id
|
assert to.id == to.id
|
||||||
|
@ -8,27 +8,36 @@ from atst.models.user import User
|
|||||||
from atst.models.role import Role
|
from atst.models.role import Role
|
||||||
|
|
||||||
|
|
||||||
class RequestFactory(factory.Factory):
|
class RequestFactory(factory.alchemy.SQLAlchemyModelFactory):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Request
|
model = Request
|
||||||
|
|
||||||
id = factory.Sequence(lambda x: uuid4())
|
id = factory.Sequence(lambda x: uuid4())
|
||||||
|
|
||||||
class PENumberFactory(factory.Factory):
|
|
||||||
|
class PENumberFactory(factory.alchemy.SQLAlchemyModelFactory):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = PENumber
|
model = PENumber
|
||||||
|
|
||||||
class TaskOrderFactory(factory.Factory):
|
|
||||||
|
class TaskOrderFactory(factory.alchemy.SQLAlchemyModelFactory):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = TaskOrder
|
model = TaskOrder
|
||||||
|
|
||||||
class RoleFactory(factory.Factory):
|
|
||||||
|
class RoleFactory(factory.alchemy.SQLAlchemyModelFactory):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Role
|
model = Role
|
||||||
|
|
||||||
permissions = []
|
permissions = []
|
||||||
|
|
||||||
class UserFactory(factory.Factory):
|
|
||||||
|
class UserFactory(factory.alchemy.SQLAlchemyModelFactory):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = User
|
model = User
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
from tests.factories import RequestFactory, UserFactory
|
from tests.factories import RequestFactory, UserFactory
|
||||||
|
|
||||||
|
|
||||||
MOCK_USER = UserFactory.create()
|
MOCK_USER = UserFactory.build()
|
||||||
MOCK_REQUEST = RequestFactory.create(
|
MOCK_REQUEST = RequestFactory.build(
|
||||||
creator=MOCK_USER.id,
|
creator=MOCK_USER.id,
|
||||||
body={
|
body={
|
||||||
"financial_verification": {
|
"financial_verification": {
|
||||||
|
@ -61,11 +61,9 @@ class TestPENumberInForm:
|
|||||||
assert response.status_code == 302
|
assert response.status_code == 302
|
||||||
assert "/requests/financial_verification_submitted" in response.headers.get("Location")
|
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)
|
self._set_monkeypatches(monkeypatch)
|
||||||
pe = PENumberFactory.create(number="8675309U", description="sample PE number")
|
pe = PENumberFactory.create(number="8675309U", description="sample PE number")
|
||||||
session.add(pe)
|
|
||||||
session.commit()
|
|
||||||
|
|
||||||
data = dict(self.required_data)
|
data = dict(self.required_data)
|
||||||
data['pe_id'] = pe.number
|
data['pe_id'] = pe.number
|
||||||
|
Loading…
x
Reference in New Issue
Block a user