You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.6 KiB
64 lines
1.6 KiB
''' functional tests for ordr2 ''' |
|
|
|
import os.path |
|
import pytest |
|
import transaction |
|
import webtest |
|
|
|
from .. import APP_SETTINGS, create_users, get_user |
|
|
|
|
|
WEBTEST_SETTINGS = APP_SETTINGS.copy() |
|
# WEBTEST_SETTINGS.update({ }) |
|
|
|
|
|
class CustomTestApp(webtest.TestApp): |
|
''' adds login and logout methods to webtest.TestApp ''' |
|
|
|
def reset(self): |
|
''' logs out any user and resets the state of the application ''' |
|
self.logout() |
|
super().reset() |
|
|
|
|
|
def logout(self): |
|
''' perfomes a logout of a user ''' |
|
self.get('/account/logout') |
|
|
|
|
|
def login(self, role_name): |
|
''' perfomes a logs in of a user ''' |
|
# do a logout first, testapp fixture scope is on module level |
|
self.logout() |
|
user = get_user(role_name) |
|
|
|
response = self.get('/') |
|
login_form = response.forms['login-form'] |
|
login_form.set('username', user.username) |
|
login_form.set('password', user.first_name) |
|
login_form.submit() |
|
|
|
|
|
|
|
@pytest.fixture(scope='module') |
|
def testapp(): |
|
''' fixture for using webtest ''' |
|
from ordr2.models.meta import Base |
|
from ordr2.models import get_tm_session, Role |
|
from ordr2 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)
|
|
|