Esempio n. 1
0
def simple_config(request):
    set_up_testing()
    reg = get_current_registry()
    config = Configurator(registry=reg, package=package)
    config.setup_registry()
    request.addfinalizer(tear_down_testing)
    return config
Esempio n. 2
0
def simple_config(request):
    set_up_testing()
    reg = get_current_registry()
    config = Configurator(registry=reg, package=package)
    config.setup_registry()
    request.addfinalizer(tear_down_testing)
    return config
Esempio n. 3
0
def app_factory(global_settings, **local_settings):  # pylint: disable=W0613
    config = Configurator()
    config.setup_registry(settings=local_settings, root_factory=RootFactory())
    #    reg = get_current_registry()
    #    repo_mgr = reg.getUtility(IRepositoryManager)
    #    repo_mgr.initialize_all()
    return config.make_wsgi_app()
Esempio n. 4
0
def app_factory(global_settings, **local_settings):  # pylint: disable=W0613
    reg = get_current_registry()
    config = Configurator(reg)
    config.setup_registry(settings=local_settings, root_factory=RootFactory())
    zcml_file = local_settings.get("configure_zcml", "configure.zcml")
    config.load_zcml(zcml_file)
    return config.make_wsgi_app()
Esempio n. 5
0
def app_factory(global_settings, **local_settings): # pylint: disable=W0613
    config = Configurator()
    config.setup_registry(settings=local_settings,
                          root_factory=RootFactory())
#    reg = get_current_registry()
#    repo_mgr = reg.getUtility(IRepositoryManager)
#    repo_mgr.initialize_all()
    return config.make_wsgi_app()
Esempio n. 6
0
 def __create(cls, ini):
     reg = Registry('testing')
     conf = Configurator(registry=reg, package=ini.package_name)
     conf.setup_registry(settings=ini.settings)
     if not ini.config_file_name is None and not ini.package_name is None:
         conf.begin()
         try:
             conf.load_zcml(ini.config_file_name)
         finally:
             conf.end()
     return conf
Esempio n. 7
0
 def __create(cls, ini):
     reg = Registry('testing')
     conf = Configurator(registry=reg, package=ini.package_name)
     conf.setup_registry(settings=ini.settings)
     if not ini.config_file_name is None and not ini.package_name is None:
         conf.begin()
         try:
             conf.load_zcml(ini.config_file_name)
         finally:
             conf.end()
     return conf
Esempio n. 8
0
File: run.py Progetto: papagr/TheLMA
def create_config(settings, package='thelma', registry=None):
    """
    Returns a configurator for TheLMA.
    """
    config = Configurator(package=package, registry=registry)
    if registry is None:
        config.setup_registry(settings=settings, root_factory=RootFactory())
        config.load_zcml('configure.zcml')
    # tractor registration
    tractor_config_file = settings['tractor_config_file']
    tractor_api = make_api_from_config(tractor_config_file)
    config.registry.registerUtility(tractor_api, ITractor)  # pylint: disable=E1103
    return config
Esempio n. 9
0
class BaseTestCaseWithConfiguration(TestCaseWithIni):
    """
    Base class for test cases that access an initialized (but not configured)
    registry.

    :ivar config: The registry configurator. This is set in the set_up method.
    """
    #: The name of a package containing a configuration file to load.
    #: Defaults to `None` indicating that no configuration applies.
    package_name = None
    # : The name of a ZCML configuration file to use.
    config_file_name = 'configure.zcml'
    # : The section name in the ini file to look for settings. Override as
    # : needed in derived classes.
    ini_section_name = None

    def set_up(self):
        super(BaseTestCaseWithConfiguration, self).set_up()
        # Create and configure a new testing registry.
        reg = Registry('testing')
        self.config = Configurator(registry=reg,
                                   package=self.package_name)
        if not self.ini_section_name is None:
            settings = self.ini.get_settings(self.ini_section_name)
        else:
            try:
                settings = self.ini.get_settings('DEFAULT')
            except configparser.NoSectionError:
                settings = None
        self.config.setup_registry(settings=settings)
        if not self.package_name is None:
            if not settings is None:
                cfg_zcml = settings.get('configure_zcml',
                                        self.config_file_name)
            else:
                cfg_zcml = self.config_file_name
            self.config.begin()
            try:
                self.config.load_zcml(cfg_zcml)
            finally:
                self.config.end()

    def tear_down(self):
        super(BaseTestCaseWithConfiguration, self).tear_down()
        tear_down_registry(self.config.registry)
        try:
            del self.config
        except AttributeError:
            pass
Esempio n. 10
0
def create_config(settings, package='thelma', registry=None):
    """
    Returns a configurator for TheLMA.
    """
    config = Configurator(package=package,
                          registry=registry)
    if registry is None:
        config.setup_registry(settings=settings,
                              root_factory=RootFactory())
        config.load_zcml('configure.zcml')
    # tractor registration
    tractor_config_file = settings['tractor_config_file']
    tractor_api = make_api_from_config(tractor_config_file)
    config.registry.registerUtility(tractor_api, ITractor) # pylint: disable=E1103
    return config
Esempio n. 11
0
class BaseTestCaseWithConfiguration(TestCaseWithIni):
    """
    Base class for test cases that access an initialized (but not configured)
    registry.

    :ivar config: The registry configurator. This is set in the set_up method.
    """
    # : The name of a ZCML configuration file to use.
    config_file_name = 'configure.zcml'

    def set_up(self):
        super(BaseTestCaseWithConfiguration, self).set_up()
        # Create and configure a new testing registry.
        reg = Registry('testing')
        self.config = Configurator(registry=reg,
                                   package=self.package_name)
        if not self.ini_section_name is None:
            settings = self.ini.get_settings(self.ini_section_name)
        else:
            try:
                settings = self.ini.get_settings('DEFAULT')
            except configparser.NoSectionError:
                settings = None
        self.config.setup_registry(settings=settings)

    def tear_down(self):
        super(BaseTestCaseWithConfiguration, self).tear_down()
        tear_down_registry(self.config.registry)
        try:
            del self.config
        except AttributeError:
            pass

    def _get_config_file_name(self):
        if self.ini.has_setting(self.ini_section_name, 'configure_zcml'):
            cfg_zcml = self.ini.get_setting(self.ini_section_name,
                                            'configure_zcml')
        else:
            cfg_zcml = self.config_file_name
        return cfg_zcml
Esempio n. 12
0
def app_factory(global_settings, **local_settings):  # pylint: disable=W0613
    """
    Default factory for creating a WSGI application using the everest
    configurator and root factory.

    :param dict global_settings: Global settings extracted from an ini file.
        Not used in this default app factory.
    :param dict local_settings: App settings extracted from an ini file.
    """
    config = Configurator()
    config.setup_registry(settings=local_settings, root_factory=RootFactory())
    if 'configure_zcml' in local_settings:
        config.load_zcml(local_settings['configure_zcml'])
    app = config.make_wsgi_app()
    # In the absence of an application name in the settings, we have to
    # extract the main app's name from the ini file, which unfortunately
    # means parsing it again.
    app_name = app_name_from_ini_file(global_settings['__file__'])
    ep_group = "%s.plugins" % app_name
    plugin_mgr = config.get_registered_utility(IPluginManager)
    plugin_mgr.load_all(ep_group)
    return app
Esempio n. 13
0
def app_factory(global_settings, **local_settings): # pylint: disable=W0613
    """
    Default factory for creating a WSGI application using the everest
    configurator and root factory.

    :param dict global_settings: Global settings extracted from an ini file.
        Not used in this default app factory.
    :param dict local_settings: App settings extracted from an ini file.
    """
    config = Configurator()
    config.setup_registry(settings=local_settings,
                          root_factory=RootFactory())
    if 'configure_zcml' in local_settings:
        config.load_zcml(local_settings['configure_zcml'])
    app = config.make_wsgi_app()
    # In the absence of an application name in the settings, we have to
    # extract the main app's name from the ini file, which unfortunately
    # means parsing it again.
    app_name = app_name_from_ini_file(global_settings['__file__'])
    ep_group = "%s.plugins" % app_name
    plugin_mgr = config.get_registered_utility(IPluginManager)
    plugin_mgr.load_all(ep_group)
    return app
Esempio n. 14
0
class BaseTestCaseWithConfiguration(TestCaseWithIni):
    """
    Base class for test cases that access an initialized (but not configured)
    registry.

    :ivar config: The registry configurator. This is set in the set_up method.
    """
    # : The name of a ZCML configuration file to use.
    config_file_name = 'configure.zcml'

    def set_up(self):
        super(BaseTestCaseWithConfiguration, self).set_up()
        # Create and configure a new testing registry.
        reg = Registry('testing')
        self.config = Configurator(registry=reg, package=self.package_name)
        if not self.ini_section_name is None:
            settings = self.ini.get_settings(self.ini_section_name)
            self.config.setup_registry(settings=settings)
        else:
            self.config.setup_registry()

    def tear_down(self):
        super(BaseTestCaseWithConfiguration, self).tear_down()
        tear_down_registry(self.config.registry)
        try:
            del self.config
        except AttributeError:
            pass

    def _get_config_file_name(self):
        if self.ini.has_setting(self.ini_section_name, 'configure_zcml'):
            cfg_zcml = self.ini.get_setting(self.ini_section_name,
                                            'configure_zcml')
        else:
            cfg_zcml = self.config_file_name
        return cfg_zcml
Esempio n. 15
0
class ConfiguratorTestCase(Pep8CompliantTestCase):

    def set_up(self):
        testing_set_up()
        reg = self._registry = get_current_registry()
        self._config = Configurator(registry=reg, package=package)
        self._config.setup_registry()

    def tear_down(self):
        testing_tear_down()

    def test_registry_setup(self):
        reg = self._registry
        self.assert_is_not_none(reg.queryUtility(IRepositoryManager))
        self.assert_is_not_none(reg.queryUtility(IFilterSpecificationFactory))
        self.assert_is_not_none(reg.queryUtility(IOrderSpecificationFactory))
        self.assert_is_not_none(reg.queryUtility(IService))
        self.assert_is_not_none(reg.queryUtility(IFilterSpecificationVisitor,
                                                 name=EXPRESSION_KINDS.CQL))
        self.assert_is_not_none(reg.queryUtility(IFilterSpecificationVisitor,
                                                 name=EXPRESSION_KINDS.SQL))
        self.assert_is_not_none(reg.queryUtility(IFilterSpecificationVisitor,
                                                 name=EXPRESSION_KINDS.EVAL))
        self.assert_is_not_none(reg.queryUtility(IOrderSpecificationVisitor,
                                                 name=EXPRESSION_KINDS.CQL))
        self.assert_is_not_none(reg.queryUtility(IOrderSpecificationVisitor,
                                                 name=EXPRESSION_KINDS.SQL))
        self.assert_is_not_none(reg.queryUtility(IOrderSpecificationVisitor,
                                                 name=EXPRESSION_KINDS.EVAL))
        reg = self._registry
        req = DummyRequest()
        self.assert_is_not_none(reg.queryAdapter(req, IResourceUrlConverter))

    def test_add_resource(self):
        self.assert_raises(ValueError, self._config.add_resource,
                           NotAnInterface, FooMember, FooEntity, expose=False)
        self.assert_raises(ValueError, self._config.add_resource,
                           IFoo, NotAMember, FooEntity, expose=False)
        self.assert_raises(ValueError, self._config.add_resource,
                           IFoo, FooMember, NotAnEntity, expose=False)
        self.assert_raises(ValueError, self._config.add_resource,
                           IFoo, FooMember, FooEntity, expose=False,
                           collection=NotACollection)
        self.assert_raises(ValueError, self._config.add_resource,
                           IFoo, UnrelatedMember, FooEntity, expose=False)
        self.assert_raises(ValueError, self._config.add_resource,
                           IFoo, FooMember, FooEntity, expose=False,
                           repository='UNKNOWN')
        self.assert_raises(ValueError, self._config.add_resource,
                           IFoo, FooMember, FooEntity, expose=True)

    def test_add_resource_with_collection_title(self):
        title = 'myfoos'
        self._config.add_resource(IFoo, FooMember, FooEntity, expose=False,
                                  collection_title=title)
        self.assert_equal(get_collection_class(IFoo).title, title)

    def test_add_resource_with_root_name(self):
        root_name = 'myfoos'
        self._config.add_resource(IFoo, FooMember, FooEntity, expose=True,
                                  collection_root_name=root_name)
        self.assert_equal(get_collection_class(IFoo).root_name, root_name)

    def test_add_resource_with_rdb_repo(self):
        self._config.add_resource(IFoo, FooMember, FooEntity, expose=False,
                                  repository=REPOSITORY_TYPES.RDB)
        reg = self._registry
        repo_mgr = reg.queryUtility(IRepositoryManager)
        self.assert_is_not_none(repo_mgr.get(REPOSITORY_TYPES.RDB))

    def test_have_memory_repo(self):
        reg = self._registry
        repo_mgr = reg.queryUtility(IRepositoryManager)
        self.assert_is_not_none(repo_mgr.get(REPOSITORY_TYPES.MEMORY))

    def test_add_resource_with_filesystem_repo(self):
        self._config.add_resource(IFoo, FooMember, FooEntity, expose=False,
                                  repository=REPOSITORY_TYPES.FILE_SYSTEM)
        reg = self._registry
        repo_mgr = reg.queryUtility(IRepositoryManager)
        self.assert_is_not_none(repo_mgr.get(REPOSITORY_TYPES.FILE_SYSTEM))

    def test_add_representer(self):
        self.assert_raises(ValueError, self._config.add_representer)
        self.assert_raises(ValueError, self._config.add_representer,
                           content_type=CsvMime,
                           representer_class=CsvResourceRepresenter)

    def test_add_representer_with_representer_class(self):
        self._config.add_representer(representer_class=MyRepresenterClass)
        rpr_reg = self._registry.queryUtility(IRepresenterRegistry)
        self.assert_true(rpr_reg.is_registered_representer_class(
                                                        MyRepresenterClass))

    def test_add_resource_representer(self):
        self.assert_raises(ValueError, self._config.add_resource_representer,
                           NotAMember, CsvMime)

    def test_custom_repository(self):
        class MyMemoryAggregate(Aggregate):
            pass
        reg = self._registry
        config = Configurator(registry=reg)
        config.add_memory_repository('test',
                                     aggregate_class=MyMemoryAggregate)
        repo_mgr = config.get_registered_utility(IRepositoryManager)
        repo = repo_mgr.get('test')
        config.add_resource(IFoo, FooMember, FooEntity,
                            collection_root_name="foos",
                            repository='test')
        self.assert_raises(RuntimeError, repo.get_collection, IFoo)
        self.assert_raises(RuntimeError, repo.get_aggregate, IFoo)
        repo.initialize()
        coll = repo.get_collection(IFoo)
        agg = coll.get_aggregate()
        self.assert_true(isinstance(agg, MyMemoryAggregate))
        entity = FooEntity(id=1)
        agg.add(entity)
        self.assert_true(agg.count() == 1)
        self.assert_equal(list(agg.iterator())[0].id, entity.id)
        self.assert_equal(agg.get_by_id(1).id, entity.id)
        self.assert_equal(agg.get_by_slug('1').slug, entity.slug)
        agg.remove(entity)
        self.assert_true(agg.count() == 0)
Esempio n. 16
0
def app_factory(global_settings, **local_settings):  # pylint: disable=W0613
    config = Configurator()
    config.setup_registry(settings=local_settings, root_factory=RootFactory())
    return config.make_wsgi_app()
Esempio n. 17
0
class DirectivesTestCase(Pep8CompliantTestCase):

    def set_up(self):
        testing_set_up()
        reg = self._registry = get_current_registry()
        self._config = Configurator(registry=reg, package=package)
        self._config.setup_registry()
        repo_mgr = self._config.get_registered_utility(IRepositoryManager)
        repo_mgr.initialize_all()

    def tear_down(self):
        testing_tear_down()

    def test_configure_with_simple_zcml(self):
        # Load the configuration.
        self._config.load_zcml('everest.tests.simple_app:configure_simple.zcml')
        reg = self._registry
        # Check adapters.
        ent = FooEntity()
        member = object.__new__(FooMember)
        coll_cls = reg.queryUtility(IFoo, name='collection-class')
        self.assert_is_not_none(coll_cls)
        self.assert_is_not_none(coll_cls.root_name)
        self.assert_is_not_none(coll_cls.title)
        coll = object.__new__(coll_cls)
        self.__check(reg, member, ent, coll)
        # Check service.
        srvc = reg.queryUtility(IService)
        self.assert_is_not_none(srvc)
        srvc.start()
        self.assert_true(isinstance(srvc.get('foos'), Collection))
        self.assert_is_none(srvc.get(coll_cls))
        self.assert_is_none(srvc.get(IBar))

    def test_configure_with_full_zcml(self):
        reg = self._registry
        # Check adapters.
        ent = FooEntity()
        member = object.__new__(FooMember)
        coll = object.__new__(FooCollection)
        # Make sure no adapters are in the registry.
        self.assert_is_none(reg.queryAdapter(coll, IMemberResource,
                                          name='member-class'))
        self.assert_is_none(reg.queryAdapter(member, ICollectionResource,
                                          name='collection-class'))
        self.assert_is_none(reg.queryAdapter(member, IEntity,
                                          name='entity-class'))
        self.assert_is_none(reg.queryAdapter(ent, IMemberResource))
        self.assert_is_none(reg.queryAdapter(coll, IRepresenter,
                                          name=CsvMime.mime_type_string))
        # Load the configuration.
        config = Configurator(registry=reg, package=package)
        config.load_zcml('everest.tests.simple_app:configure.zcml')
        self.__check(reg, member, ent, coll)
        rpr = as_representer(coll, CsvMime)
        self.assert_true(isinstance(rpr, Representer))

    def test_configure_with_custom_repo_zcml(self):
        repo_mgr = self._registry.queryUtility(IRepositoryManager)
        self.assert_is_none(repo_mgr.get('CUSTOM_MEMORY'))
        self.assert_is_none(repo_mgr.get('CUSTOM_FILESYSTEM'))
        self.assert_is_none(repo_mgr.get('CUSTOM_RDB'))
        self._config.load_zcml('everest.tests.simple_app:configure_repos.zcml')
        self.assert_is_not_none(repo_mgr.get('CUSTOM_MEMORY'))
        self.assert_is_not_none(repo_mgr.get('CUSTOM_FILESYSTEM'))
        self.assert_is_not_none(repo_mgr.get('CUSTOM_RDB'))

    def __check(self, reg, member, ent, coll):
        for idx, obj in enumerate((member, coll, ent)):
            self.assert_equal(reg.queryAdapter(obj, IMemberResource,
                                              name='member-class'),
                              type(member))
            self.assert_equal(reg.queryAdapter(obj, ICollectionResource,
                                              name='collection-class'),
                              type(coll))
            self.assert_equal(reg.queryAdapter(obj, IEntity,
                                              name='entity-class'),
                              type(ent))
            if idx < 2: # lookup with class only for member/collection.
                self.assert_equal(reg.queryAdapter(type(obj), IMemberResource,
                                                  name='member-class'),
                                  type(member))
                self.assert_equal(reg.queryAdapter(type(obj),
                                                   ICollectionResource,
                                                  name='collection-class'),
                                  type(coll))
                self.assert_equal(reg.queryAdapter(type(obj), IEntity,
                                                   name='entity-class'),
                                  type(ent))
        # Check instance adapters.
        self.assert_is_not_none(reg.queryAdapter(ent, IMemberResource))
Esempio n. 18
0
def app_factory(global_settings, **local_settings): # pylint: disable=W0613
    config = Configurator()
    config.setup_registry(settings=local_settings,
                          root_factory=RootFactory())
    return config.make_wsgi_app()
Esempio n. 19
0
class DirectivesTestCase(Pep8CompliantTestCase):
    def set_up(self):
        testing_set_up()
        reg = self._registry = get_current_registry()
        self._config = Configurator(registry=reg, package=package)
        self._config.setup_registry()
        repo_mgr = self._config.get_registered_utility(IRepositoryManager)
        repo_mgr.initialize_all()

    def tear_down(self):
        testing_tear_down()

    def test_configure_with_simple_zcml(self):
        # Load the configuration.
        self._config.load_zcml(
            'everest.tests.simple_app:configure_simple.zcml')
        reg = self._registry
        # Check adapters.
        ent = FooEntity()
        member = object.__new__(FooMember)
        coll_cls = reg.queryUtility(IFoo, name='collection-class')
        self.assert_is_not_none(coll_cls)
        self.assert_is_not_none(coll_cls.root_name)
        self.assert_is_not_none(coll_cls.title)
        coll = object.__new__(coll_cls)
        self.__check(reg, member, ent, coll)
        # Check service.
        srvc = reg.queryUtility(IService)
        self.assert_is_not_none(srvc)
        srvc.start()
        self.assert_true(isinstance(srvc.get('foos'), Collection))
        self.assert_is_none(srvc.get(coll_cls))
        self.assert_is_none(srvc.get(IBar))

    def test_configure_with_full_zcml(self):
        reg = self._registry
        # Check adapters.
        ent = FooEntity()
        member = object.__new__(FooMember)
        coll = object.__new__(FooCollection)
        # Make sure no adapters are in the registry.
        self.assert_is_none(
            reg.queryAdapter(coll, IMemberResource, name='member-class'))
        self.assert_is_none(
            reg.queryAdapter(member,
                             ICollectionResource,
                             name='collection-class'))
        self.assert_is_none(
            reg.queryAdapter(member, IEntity, name='entity-class'))
        self.assert_is_none(reg.queryAdapter(ent, IMemberResource))
        self.assert_is_none(
            reg.queryAdapter(coll, IRepresenter,
                             name=CsvMime.mime_type_string))
        # Load the configuration.
        config = Configurator(registry=reg, package=package)
        config.load_zcml('everest.tests.simple_app:configure.zcml')
        self.__check(reg, member, ent, coll)
        rpr = as_representer(coll, CsvMime)
        self.assert_true(isinstance(rpr, Representer))

    def test_configure_with_custom_repo_zcml(self):
        repo_mgr = self._registry.queryUtility(IRepositoryManager)
        self.assert_is_none(repo_mgr.get('CUSTOM_MEMORY'))
        self.assert_is_none(repo_mgr.get('CUSTOM_FILESYSTEM'))
        self.assert_is_none(repo_mgr.get('CUSTOM_RDB'))
        self._config.load_zcml('everest.tests.simple_app:configure_repos.zcml')
        self.assert_is_not_none(repo_mgr.get('CUSTOM_MEMORY'))
        self.assert_is_not_none(repo_mgr.get('CUSTOM_FILESYSTEM'))
        self.assert_is_not_none(repo_mgr.get('CUSTOM_RDB'))

    def __check(self, reg, member, ent, coll):
        for idx, obj in enumerate((member, coll, ent)):
            self.assert_equal(
                reg.queryAdapter(obj, IMemberResource, name='member-class'),
                type(member))
            self.assert_equal(
                reg.queryAdapter(obj,
                                 ICollectionResource,
                                 name='collection-class'), type(coll))
            self.assert_equal(
                reg.queryAdapter(obj, IEntity, name='entity-class'), type(ent))
            if idx < 2:  # lookup with class only for member/collection.
                self.assert_equal(
                    reg.queryAdapter(type(obj),
                                     IMemberResource,
                                     name='member-class'), type(member))
                self.assert_equal(
                    reg.queryAdapter(type(obj),
                                     ICollectionResource,
                                     name='collection-class'), type(coll))
                self.assert_equal(
                    reg.queryAdapter(type(obj), IEntity, name='entity-class'),
                    type(ent))
        # Check instance adapters.
        self.assert_is_not_none(reg.queryAdapter(ent, IMemberResource))
Esempio n. 20
0
class ConfiguratorTestCase(Pep8CompliantTestCase):
    def set_up(self):
        testing_set_up()
        reg = self._registry = get_current_registry()
        self._config = Configurator(registry=reg, package=package)
        self._config.setup_registry()

    def tear_down(self):
        testing_tear_down()

    def test_registry_setup(self):
        reg = self._registry
        self.assert_is_not_none(reg.queryUtility(IRepositoryManager))
        self.assert_is_not_none(reg.queryUtility(IFilterSpecificationFactory))
        self.assert_is_not_none(reg.queryUtility(IOrderSpecificationFactory))
        self.assert_is_not_none(reg.queryUtility(IService))
        self.assert_is_not_none(
            reg.queryUtility(IFilterSpecificationVisitor,
                             name=EXPRESSION_KINDS.CQL))
        self.assert_is_not_none(
            reg.queryUtility(IFilterSpecificationVisitor,
                             name=EXPRESSION_KINDS.SQL))
        self.assert_is_not_none(
            reg.queryUtility(IFilterSpecificationVisitor,
                             name=EXPRESSION_KINDS.EVAL))
        self.assert_is_not_none(
            reg.queryUtility(IOrderSpecificationVisitor,
                             name=EXPRESSION_KINDS.CQL))
        self.assert_is_not_none(
            reg.queryUtility(IOrderSpecificationVisitor,
                             name=EXPRESSION_KINDS.SQL))
        self.assert_is_not_none(
            reg.queryUtility(IOrderSpecificationVisitor,
                             name=EXPRESSION_KINDS.EVAL))
        reg = self._registry
        req = DummyRequest()
        self.assert_is_not_none(reg.queryAdapter(req, IResourceUrlConverter))

    def test_add_resource(self):
        self.assert_raises(ValueError,
                           self._config.add_resource,
                           NotAnInterface,
                           FooMember,
                           FooEntity,
                           expose=False)
        self.assert_raises(ValueError,
                           self._config.add_resource,
                           IFoo,
                           NotAMember,
                           FooEntity,
                           expose=False)
        self.assert_raises(ValueError,
                           self._config.add_resource,
                           IFoo,
                           FooMember,
                           NotAnEntity,
                           expose=False)
        self.assert_raises(ValueError,
                           self._config.add_resource,
                           IFoo,
                           FooMember,
                           FooEntity,
                           expose=False,
                           collection=NotACollection)
        self.assert_raises(ValueError,
                           self._config.add_resource,
                           IFoo,
                           UnrelatedMember,
                           FooEntity,
                           expose=False)
        self.assert_raises(ValueError,
                           self._config.add_resource,
                           IFoo,
                           FooMember,
                           FooEntity,
                           expose=False,
                           repository='UNKNOWN')
        self.assert_raises(ValueError,
                           self._config.add_resource,
                           IFoo,
                           FooMember,
                           FooEntity,
                           expose=True)

    def test_add_resource_with_collection_title(self):
        title = 'myfoos'
        self._config.add_resource(IFoo,
                                  FooMember,
                                  FooEntity,
                                  expose=False,
                                  collection_title=title)
        self.assert_equal(get_collection_class(IFoo).title, title)

    def test_add_resource_with_root_name(self):
        root_name = 'myfoos'
        self._config.add_resource(IFoo,
                                  FooMember,
                                  FooEntity,
                                  expose=True,
                                  collection_root_name=root_name)
        self.assert_equal(get_collection_class(IFoo).root_name, root_name)

    def test_add_resource_with_rdb_repo(self):
        self._config.add_resource(IFoo,
                                  FooMember,
                                  FooEntity,
                                  expose=False,
                                  repository=REPOSITORY_TYPES.RDB)
        reg = self._registry
        repo_mgr = reg.queryUtility(IRepositoryManager)
        self.assert_is_not_none(repo_mgr.get(REPOSITORY_TYPES.RDB))

    def test_have_memory_repo(self):
        reg = self._registry
        repo_mgr = reg.queryUtility(IRepositoryManager)
        self.assert_is_not_none(repo_mgr.get(REPOSITORY_TYPES.MEMORY))

    def test_add_resource_with_filesystem_repo(self):
        self._config.add_resource(IFoo,
                                  FooMember,
                                  FooEntity,
                                  expose=False,
                                  repository=REPOSITORY_TYPES.FILE_SYSTEM)
        reg = self._registry
        repo_mgr = reg.queryUtility(IRepositoryManager)
        self.assert_is_not_none(repo_mgr.get(REPOSITORY_TYPES.FILE_SYSTEM))

    def test_add_representer(self):
        self.assert_raises(ValueError, self._config.add_representer)
        self.assert_raises(ValueError,
                           self._config.add_representer,
                           content_type=CsvMime,
                           representer_class=CsvResourceRepresenter)

    def test_add_representer_with_representer_class(self):
        self._config.add_representer(representer_class=MyRepresenterClass)
        rpr_reg = self._registry.queryUtility(IRepresenterRegistry)
        self.assert_true(
            rpr_reg.is_registered_representer_class(MyRepresenterClass))

    def test_add_resource_representer(self):
        self.assert_raises(ValueError, self._config.add_resource_representer,
                           NotAMember, CsvMime)

    def test_custom_repository(self):
        class MyMemoryAggregate(Aggregate):
            pass

        reg = self._registry
        config = Configurator(registry=reg)
        config.add_memory_repository('test', aggregate_class=MyMemoryAggregate)
        repo_mgr = config.get_registered_utility(IRepositoryManager)
        repo = repo_mgr.get('test')
        config.add_resource(IFoo,
                            FooMember,
                            FooEntity,
                            collection_root_name="foos",
                            repository='test')
        self.assert_raises(RuntimeError, repo.get_collection, IFoo)
        self.assert_raises(RuntimeError, repo.get_aggregate, IFoo)
        repo.initialize()
        coll = repo.get_collection(IFoo)
        agg = coll.get_aggregate()
        self.assert_true(isinstance(agg, MyMemoryAggregate))
        entity = FooEntity(id=1)
        agg.add(entity)
        self.assert_true(agg.count() == 1)
        self.assert_equal(list(agg.iterator())[0].id, entity.id)
        self.assert_equal(agg.get_by_id(1).id, entity.id)
        self.assert_equal(agg.get_by_slug('1').slug, entity.slug)
        agg.remove(entity)
        self.assert_true(agg.count() == 0)