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.

90 lines
2.3 KiB

import pytest
import transaction
from pyramid import testing
from pyramid.csrf import get_csrf_token
APP_SETTINGS = {
'sqlalchemy.url': 'sqlite:///:memory:',
'session.secret': 'something',
'session.auto_csrf': True,
'passlib.schemes': 'argon2 bcrypt',
'passlib.default': 'argon2',
'passlib.deprecated': 'auto',
'mail.default_sender': 'ordr@example.com'
}
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')
config.include('pyramid_mailer.testing')
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
def get_post_request(data, **kwargs):
''' returns a dummy request with csrf_token for validating deform forms '''
request = testing.DummyRequest()
post_data = {'csrf_token': get_csrf_token(request)}
post_data.update(data)
return testing.DummyRequest(POST=post_data, **kwargs)