Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test: Use scoped session db #6979

Merged
merged 1 commit into from
May 7, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions tests/all/conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import pytest
from app.models import db as _db
from tests.all.integration.setup_database import (
Setup,
create_app,
set_settings,
Environment,
)


@pytest.fixture(scope='module')

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Black would make changes.

def app():
app = create_app()
with app.test_request_context():
yield app


@pytest.fixture(scope='module')
def database(app):
_db.create_all()
set_settings(app_name='Open Event', app_environment=Environment.TESTING)
yield _db
Setup.drop_db()


@pytest.fixture(scope='module')
def connection(database):
with database.engine.connect() as conn:
yield conn


@pytest.fixture(scope='function')
def db(database, connection):
transaction = connection.begin()

options = dict(bind=connection, binds={})
session = database.create_scoped_session(options=options)
old_session = database.session
database.session = session

yield database

session.remove()
database.session = old_session
transaction.rollback()
22 changes: 3 additions & 19 deletions tests/all/integration/api/helpers/test_auth.py
Original file line number Diff line number Diff line change
@@ -1,23 +1,7 @@
import pytest
from flask_login import login_user, logout_user
from app.api.helpers.auth import AuthManager
from app.models import db as database
from app.models.user import User
from tests.all.integration.auth_helper import create_user
from tests.all.integration.setup_database import Setup


@pytest.fixture(scope='module')
def app():
app = Setup.create_app()
with app.test_request_context():
yield app
Setup.drop_db()


@pytest.fixture(scope='module')
def db(app):
return database


def test_load_user(db):
Expand All @@ -26,7 +10,7 @@ def test_load_user(db):
assert user == db.session.query(User).get(user.id)


def test_verified_user():
def test_verified_user(db):
"""Method to test if user is verified"""

user = create_user(email='[email protected]', password='password')
Expand All @@ -35,7 +19,7 @@ def test_verified_user():
assert AuthManager.is_verified_user() == False


def test_is_accessible():
def test_is_accessible(db):
"""Method to test if user is accessible(authenticated)"""

user = create_user(email='[email protected]', password='password')
Expand All @@ -44,7 +28,7 @@ def test_is_accessible():
assert AuthManager.is_accessible() == False


def test_check_auth_admin():
def test_check_auth_admin(db):
"""Method to test proper authentication & admin rights for a user"""

user = create_user(email='[email protected]', password='password')
Expand Down
13 changes: 9 additions & 4 deletions tests/all/integration/setup_database.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,18 @@
_basedir = os.path.abspath(os.path.dirname(__file__))


def create_app():
app.config.from_object('config.TestingConfig')

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Black would make changes.

app.logger.addHandler(logging.StreamHandler(sys.stdout))
app.logger.setLevel(logging.ERROR)
return app


class Setup(object):
@staticmethod
def create_app():
app.config.from_object('config.TestingConfig')
app.logger.addHandler(logging.StreamHandler(sys.stdout))
app.logger.setLevel(logging.ERROR)
with app.test_request_context():
test_app = create_app()
with test_app.test_request_context():
db.create_all()
set_settings(app_name='Open Event', app_environment=Environment.TESTING)

Expand Down
1 change: 0 additions & 1 deletion tests/all/unit/utils/test_schema_defaulting.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ class Meta:


class TestUtils(TestCase):

@pytest.mark.skip(reason="no way of currently testing this")
def test_patch_defaults_adds_defaults(self):
schema = TestSchema()
Expand Down
6 changes: 3 additions & 3 deletions tests/factories/access_code.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
import factory

import tests.factories.common as common
from tests.factories.base import BaseFactory
from tests.factories.event import EventFactoryBasic
from tests.factories.ticket import TicketFactory
from tests.factories.user import UserFactory
from app.models.access_code import AccessCode, db
from app.models.access_code import AccessCode


class AccessCodeFactory(factory.alchemy.SQLAlchemyModelFactory):
class AccessCodeFactory(BaseFactory):
class Meta:
model = AccessCode
sqlalchemy_session = db.session

tickets = factory.RelatedFactory(TicketFactory)
user = factory.RelatedFactory(UserFactory)
Expand Down
8 changes: 3 additions & 5 deletions tests/factories/activities.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
import factory

import tests.factories.common as common
from app.models.activity import Activity, db
from app.models.activity import Activity
from tests.factories.base import BaseFactory


class ActivityFactory(factory.alchemy.SQLAlchemyModelFactory):
class ActivityFactory(BaseFactory):
class Meta:
model = Activity
sqlalchemy_session = db.session

actor = common.string_
action = common.string_
6 changes: 3 additions & 3 deletions tests/factories/attendee.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
import factory

import tests.factories.common as common
from tests.factories.base import BaseFactory
from tests.factories.event import EventFactoryBasic
from tests.factories.order import OrderFactory
from tests.factories.ticket import TicketFactory
from app.models.ticket_holder import TicketHolder, db
from app.models.ticket_holder import TicketHolder


class AttendeeFactoryBase(factory.alchemy.SQLAlchemyModelFactory):
class AttendeeFactoryBase(BaseFactory):
class Meta:
model = TicketHolder
sqlalchemy_session = db.session

firstname = common.string_
lastname = common.string_
Expand Down
9 changes: 9 additions & 0 deletions tests/factories/base.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import factory

from app.models import db


class BaseFactory(factory.alchemy.SQLAlchemyModelFactory):
class Meta:
abstract = True
sqlalchemy_session = db.session
6 changes: 3 additions & 3 deletions tests/factories/custom_form.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import factory

import tests.factories.common as common
from tests.factories.base import BaseFactory
from tests.factories.event import EventFactoryBasic
from app.models.custom_form import CustomForms, db
from app.models.custom_form import CustomForms


class CustomFormFactory(factory.alchemy.SQLAlchemyModelFactory):
class CustomFormFactory(BaseFactory):
class Meta:
model = CustomForms
sqlalchemy_session = db.session

event = factory.RelatedFactory(EventFactoryBasic)
form = common.string_
Expand Down
8 changes: 3 additions & 5 deletions tests/factories/custom_placeholder.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
import factory

import tests.factories.common as common
from app.models.custom_placeholder import CustomPlaceholder, db
from app.models.custom_placeholder import CustomPlaceholder
from tests.factories.base import BaseFactory


class CustomPlaceholderFactory(factory.alchemy.SQLAlchemyModelFactory):
class CustomPlaceholderFactory(BaseFactory):
class Meta:
model = CustomPlaceholder
sqlalchemy_session = db.session

name = common.string_
origin = common.string_
Expand Down
8 changes: 3 additions & 5 deletions tests/factories/custom_system_role.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
import factory

import tests.factories.common as common
from app.models.custom_system_role import CustomSysRole, db
from app.models.custom_system_role import CustomSysRole
from tests.factories.base import BaseFactory


class CustomSysRoleFactory(factory.alchemy.SQLAlchemyModelFactory):
class CustomSysRoleFactory(BaseFactory):
class Meta:
model = CustomSysRole
sqlalchemy_session = db.session

name = common.string_
9 changes: 4 additions & 5 deletions tests/factories/discount_code.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
import factory

import tests.factories.common as common
from tests.factories.base import BaseFactory
from tests.factories.ticket import TicketFactory
from tests.factories.user import UserFactory
from app.models.discount_code import DiscountCode, db
from app.models.discount_code import DiscountCode


class DiscountCodeFactory(factory.alchemy.SQLAlchemyModelFactory):
class DiscountCodeFactory(BaseFactory):
# class name to be DiscountCodeEventFactory?
class Meta:
model = DiscountCode
sqlalchemy_session = db.session

marketer = factory.RelatedFactory(UserFactory)
code = common.string_
Expand All @@ -28,10 +28,9 @@ class Meta:
event_id = None


class DiscountCodeTicketFactory(factory.alchemy.SQLAlchemyModelFactory):
class DiscountCodeTicketFactory(BaseFactory):
class Meta:
model = DiscountCode
sqlalchemy_session = db.session

marketer = factory.RelatedFactory(UserFactory)
tickets = factory.RelatedFactory(TicketFactory)
Expand Down
6 changes: 3 additions & 3 deletions tests/factories/email_notification.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import factory

from tests.factories.base import BaseFactory
from tests.factories.event import EventFactoryBasic
from tests.factories.user import UserFactory
from app.models.email_notification import EmailNotification, db
from app.models.email_notification import EmailNotification


class EmailNotificationFactory(factory.alchemy.SQLAlchemyModelFactory):
class EmailNotificationFactory(BaseFactory):
class Meta:
model = EmailNotification
sqlalchemy_session = db.session

user = factory.RelatedFactory(UserFactory)
event = factory.RelatedFactory(EventFactoryBasic)
Expand Down
8 changes: 3 additions & 5 deletions tests/factories/event.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
import factory

import tests.factories.common as common
from app.models.event import Event, db
from app.models.event import Event
from tests.factories.base import BaseFactory


class EventFactoryBasic(factory.alchemy.SQLAlchemyModelFactory):
class EventFactoryBasic(BaseFactory):
class Meta:
model = Event
sqlalchemy_session = db.session

name = common.string_
external_event_url = common.url_
Expand Down
6 changes: 3 additions & 3 deletions tests/factories/event_copyright.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import factory

import tests.factories.common as common
from app.models.event_copyright import EventCopyright
from tests.factories.base import BaseFactory
from tests.factories.event import EventFactoryBasic
from app.models.event_copyright import EventCopyright, db


class EventCopyrightFactory(factory.alchemy.SQLAlchemyModelFactory):
class EventCopyrightFactory(BaseFactory):
class Meta:
model = EventCopyright
sqlalchemy_session = db.session

event = factory.RelatedFactory(EventFactoryBasic)
holder = common.string_
Expand Down
6 changes: 3 additions & 3 deletions tests/factories/event_invoice.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
import factory

import tests.factories.common as common
from app.models.event_invoice import EventInvoice
from tests.factories.base import BaseFactory
from tests.factories.discount_code import DiscountCodeFactory
from tests.factories.event import EventFactoryBasic
from tests.factories.user import UserFactory
from app.models.event_invoice import EventInvoice, db


class EventInvoiceFactory(factory.alchemy.SQLAlchemyModelFactory):
class EventInvoiceFactory(BaseFactory):
class Meta:
model = EventInvoice
sqlalchemy_session = db.session

event = factory.RelatedFactory(EventFactoryBasic)
user = factory.RelatedFactory(UserFactory)
Expand Down
8 changes: 3 additions & 5 deletions tests/factories/event_location.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
import factory

import tests.factories.common as common
from app.models.event_location import EventLocation, db
from app.models.event_location import EventLocation
from tests.factories.base import BaseFactory


class EventLocationFactory(factory.alchemy.SQLAlchemyModelFactory):
class EventLocationFactory(BaseFactory):
class Meta:
model = EventLocation
sqlalchemy_session = db.session

name = common.string_
slug = common.slug_
6 changes: 3 additions & 3 deletions tests/factories/event_role_permission.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import factory

from app.models.permission import Permission
from tests.factories.base import BaseFactory
from tests.factories.role import RoleFactory
from tests.factories.service import ServiceFactory
from app.models.permission import Permission, db


class EventRolePermissionsFactory(factory.alchemy.SQLAlchemyModelFactory):
class EventRolePermissionsFactory(BaseFactory):
class Meta:
model = Permission
sqlalchemy_session = db.session

role = factory.RelatedFactory(RoleFactory)
service = factory.RelatedFactory(ServiceFactory)
Expand Down
Loading