예제 #1
0
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()
예제 #2
0
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']
예제 #3
0
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 !'
예제 #4
0
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)
예제 #5
0
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)