import pytest import transaction from pyramid import testing APP_SETTINGS = { 'sqlalchemy.url': 'sqlite:///:memory:', } EXAMPLE_USER_DATA = { 'UNVALIDATED': (1, 'Graham', 'Chapman'), 'NEW': (2, 'John', 'Cleese'), 'USER': (3, 'Terry', 'Gilliam'), 'PURCHASER': (4, 'Eric', 'Idle'), 'ADMIN': (5, 'Terry', 'Jones'), 'INACTIVE': (6, 'Michael', 'Palin'), } # 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_listing') yield config @pytest.fixture(scope='function') def dbsession(app_config): ''' fixture for testing with database connection ''' from ordr.models.meta import Base from ordr.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) # helpers def get_example_user(role): ''' get the user model for one well known user ''' from ordr.models import User id_, first_name, last_name = EXAMPLE_USER_DATA[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 ) user.set_password(first_name) return user