def test_initialize_applications(): def apps(): return {'mine':MyApp, 'app': SimpleApp, 'app2': SimpleApp, 'obj':tuple} def failing_apps(): return OrderedDict((('foo', SimpleApp), ('spam', lambda: 1/0))) db = DB(DemoStorage()) initialize_applications(db, apps) conn = db.open() root = conn.root() assert root['mine']() == "running !" assert root['app']() == "simply running !" assert root['app2']() == "simply running !" assert isinstance(root['obj'], tuple) transaction.abort() conn.close() # verify it's all or nothing try: initialize_applications(db, failing_apps) except ZeroDivisionError: pass conn = db.open() root = conn.root() assert 'foo' not in root conn.close()
def second_init(): with EntryPointMocker(['myapp=cromlech.zodb.tests.test_initialize:MyApp']): db = DB(DemoStorage()) utils.initialize_applications(db) conn = db.open() app = conn.root()['myapp'] # again utils.initialize_applications(db) conn = db.open() assert app is conn.root()['myapp']
def test_initialize(): with EntryPointMocker(['myapp=cromlech.zodb.tests.test_initialize:MyApp', 'yourapp=cromlech.zodb.tests.test_initialize:YourApp']): db = DB(DemoStorage()) utils.initialize_applications(db) conn = db.open() assert 'myapp' in conn.root() assert isinstance(conn.root()['myapp'], MyApp) assert conn.root()['myapp']() == 'running !' assert 'yourapp' in conn.root() assert isinstance(conn.root()['yourapp'], YourApp) assert conn.root()['yourapp']() == 'Also running !'
def test_same_name_fails(): with EntryPointMocker(['myapp=cromlech.zodb.tests.test_initialize:MyApp', 'myapp=cromlech.zodb.tests.test_initialize:MyApp']): db = DB(DemoStorage()) with pytest.raises(KeyError): utils.initialize_applications(db)
def test_no_implementation_fails(): with EntryPointMocker( ['myapp=cromlech.zodb.tests.test_initialize:NotExistingApp']): db = DB(DemoStorage()) with pytest.raises(ImportError): utils.initialize_applications(db)