Skip to content

Instantly share code, notes, and snippets.

@MatthewWilkes
Created August 23, 2013 10:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MatthewWilkes/6317627 to your computer and use it in GitHub Desktop.
Save MatthewWilkes/6317627 to your computer and use it in GitHub Desktop.
Functional testing with isolated ZODBs in Pyramid
import os
from plone.testing import Layer
from plone.testing import zodb
from pyramid.request import Request
from webtest import TestApp
from ZODB.DB import DB
from YOURAPP import factory
def pushDemoStorage(app):
db = app.registry._zodb_databases['']
stacked = zodb.stackDemoStorage(db, name='')
app.registry._zodb_databases[''] = stacked
def popDemoStorage(app):
db = app.registry._zodb_databases['']
base = DB(db.storage.base)
app.registry._zodb_databases[''] = base
class BaseFunctionalLayer(Layer):
def setUp(self):
pushDemoStorage(self['app'])
self.__layer_connection = self['app'].registry._zodb_databases[''].open()
self['layer_root'] = self.__layer_connection.root()['app_root']
def tearDown(self):
self.__layer_connection.close()
popDemoStorage(self['app'])
class BaseWebtestLayer(BaseFunctionalLayer):
def setUp(self, settings={}, locale="en"):
settings["pyramid.default_locale_name"] = locale
settings["zodbconn.uri"] = "memory://fake"
self['app'] = factory({}, **settings)
self['route_url'] = self.route_url
self['translate_string'] = self.translate_string
self.create_browser()
def create_browser(self):
self['browser'] = TestApp(self['app'])
def tearDown(self):
self['browser'] = self['app'] = self.group_id = None
def testSetUp(self):
pushDemoStorage(self['app'])
self.__test_connection = self['app'].registry._zodb_databases[''].open()
self['root'] = self.__test_connection.root()['app_root']
def testTearDown(self):
self.__test_connection.close()
del self['root']
popDemoStorage(self['app'])
def route_url(self, route_name, **mapping):
return self['app'].routes_mapper.generate(route_name, mapping)
FUNCTIONAL_LAYER = BaseWebtestLayer()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment