CPI Ordering System (the old version)
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.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

93 lines
2.3 KiB

7 years ago
''' functional tests for ordr2 '''
import pytest
import re
7 years ago
import transaction
import webtest
from bs4 import BeautifulSoup
from .. import APP_SETTINGS, get_example_user
7 years ago
7 years ago
WEBTEST_SETTINGS = APP_SETTINGS.copy()
WEBTEST_SETTINGS['pyramid.includes'] = [
'pyramid_mailer.testing'
]
7 years ago
class CustomTestApp(webtest.TestApp):
''' might add custom functionality to webtest.TestApp '''
pass
def login(self, username, password):
''' login '''
self.logout()
result = self.get('/login')
login_form = result.forms[0]
login_form['username'] = username
login_form['password'] = password
login_form.submit()
response = self.get('/faq')
return username in response
def logout(self):
''' logout '''
self.get('/logout')
def reset(self):
''' reset the webapp '''
self.logout()
super().reset()
7 years ago
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)
def get_token_url(email, prefix='/'):
''' extracts an account token url from an email '''
soup = BeautifulSoup(email.html, 'html.parser')
for link in soup.find_all('a'):
if re.search(prefix + '[a-f0-9]{32}', link['href']):
return link['href']
7 years ago
@pytest.fixture(scope='module')
def testappsetup():
''' setup of fixture for using webtest
this fixture just sets up the testapp. please use the testapp() fixture
below for real tests.
'''
7 years ago
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)
7 years ago
yield testapp
Base.metadata.drop_all(engine)
@pytest.fixture(scope='function')
def testapp(testappsetup):
''' fixture using webtests, resets the logged every time '''
testappsetup.reset()
yield testappsetup