''' Test package for ordr2. ''' import pytest import transaction from pyramid import testing APP_SETTINGS = { 'sqlalchemy.url': 'sqlite:///:memory:', 'auth.secret': 'not-very-secure', 'session.secret': 'not-very-secure', 'session.auto_csrf': True } EXAMPLE_USERS = { 'unvalidated': (1, 'Graham', 'Chapman'), 'new': (2, 'John', 'Cleese'), 'user': (3, 'Terry', 'Gilliam'), 'purchaser': (4, 'Eric', 'Idle'), 'admin': (5, 'Terry', 'Jones'), 'inactive': (6, 'Michael', 'Palin'), } # helpers def create_user(db, role_name): ''' set up one well known example users ''' from ordr2.models import Role, User id_, first_name, last_name = EXAMPLE_USERS[role_name] user = User( id=id_, username=first_name + last_name, first_name = first_name, last_name = last_name, email = last_name.lower() + '@example.com', role=Role(role_name) ) user.set_password(first_name) db.add(user) return user def create_users(db): ''' set up all well known example users ''' from ordr2.models import Role for role in Role: create_user(db, role.value) # fixtures @pytest.fixture(scope='session') def app_config(): ''' fixture for tests requiring a pyramid.testing setup ''' with testing.testConfig(settings=APP_SETTINGS) as config: config.include('pyramid_jinja2') #config.include('pyramid_mailer.testing') from ordr2.models.users import passlib_context passlib_context.update(schemes=['argon2']) yield config @pytest.fixture(scope='function') def dbsession(app_config): ''' fixture for testing with database connection ''' from ordr2.models.meta import Base from ordr2.models import ( get_engine, get_session_factory, get_tm_session ) settings = app_config.get_settings() engine = get_engine(settings) session_factory = get_session_factory(engine) session = get_tm_session(session_factory, transaction.manager) Base.metadata.create_all(engine) yield session transaction.abort() Base.metadata.drop_all(engine)