''' functional tests for ordr2 ''' import pytest import transaction import webtest from .. import APP_SETTINGS, get_example_user WEBTEST_SETTINGS = APP_SETTINGS.copy() # WEBTEST_SETTINGS['pyramid.includes'].append('pyramid_mailer.testing') class CustomTestApp(webtest.TestApp): ''' might add custom functionality to webtest.TestApp ''' pass def login(self, username, password): ''' stub for user login ''' self.logout() result = self.get('/login') login_form = result.forms[0] login_form['username'] = username login_form['password'] = password login_form.submit() def logout(self): ''' stub for user logout ''' self.get('/logout') def reset(self): ''' reset the webapp ''' self.logout() super().reset() def create_users(dbsession): ''' create example users ''' from ordr.models.account import Role for role in Role: user = get_example_user(role) dbsession.add(user) @pytest.fixture(scope='module') def testappsetup(): ''' fixture for using webtest ''' from ordr.models.meta import Base from ordr.models import get_tm_session from ordr import main app = main({}, **WEBTEST_SETTINGS) testapp = CustomTestApp(app) session_factory = app.registry['dbsession_factory'] engine = session_factory.kw['bind'] Base.metadata.create_all(engine) with transaction.manager: # set up test data here dbsession = get_tm_session(session_factory, transaction.manager) create_users(dbsession) yield testapp Base.metadata.drop_all(engine) @pytest.fixture(scope='function') def testapp(testappsetup): testappsetup.reset() yield testappsetup