Skip to content

Commit

Permalink
Bind dependencies resolving test
Browse files Browse the repository at this point in the history
  • Loading branch information
p1c2u committed Sep 16, 2018
1 parent 1b94c22 commit 60a9006
Show file tree
Hide file tree
Showing 4 changed files with 102 additions and 59 deletions.
4 changes: 2 additions & 2 deletions kore/testing/factories.py
Original file line number Diff line number Diff line change
Expand Up @@ -111,11 +111,11 @@ def create_container(

return container_factory.create(config=config)

def create_plugin(self, name="TestPlugin", component_class=None):
def create_plugin(self, namespace="TestPlugin", component_class=None):
if component_class is None:
component_class = self.create_component_class()

return Plugin(name, component_class)
return Plugin(namespace, component_class)

def create_plugins_provider(self, plugins_iterator=None):
if plugins_iterator is None:
Expand Down
8 changes: 4 additions & 4 deletions tests/integration/test_components.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,12 @@ def component_class(
@pytest.fixture
def plugin_1(self, component_class, factory):
return factory.create_plugin(
name='test', component_class=component_class)
namespace='test', component_class=component_class)

@pytest.fixture
def plugin_2(self, component_class, factory):
return factory.create_plugin(
name='test_2', component_class=component_class)
namespace='test_2', component_class=component_class)

@pytest.fixture(scope='session')
def config_dict(self):
Expand Down Expand Up @@ -91,7 +91,7 @@ def component_class(self, pre_hook, factory):
@pytest.fixture
def plugin(self, component_class, factory):
return factory.create_plugin(
name='test', component_class=component_class)
namespace='test', component_class=component_class)

@pytest.fixture
def container_factory(self, plugin, factory):
Expand Down Expand Up @@ -122,7 +122,7 @@ def component_class(self, post_hook, factory):
@pytest.fixture
def plugin(self, component_class, factory):
return factory.create_plugin(
name='test', component_class=component_class)
namespace='test', component_class=component_class)

@pytest.fixture
def container_factory(self, plugin, factory):
Expand Down
6 changes: 3 additions & 3 deletions tests/integration/test_containers.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ def test_namespace(self, service, factory):
)
plugin_namespace = 'test'
plugin = factory.create_plugin(
name=plugin_namespace, component_class=component_class)
namespace=plugin_namespace, component_class=component_class)
container = factory.create_container(
plugins_iterator=[plugin, ])

Expand Down Expand Up @@ -61,13 +61,13 @@ def test_namespace(self, container):
assert container('test_3.service_3') == mock.sentinel.service


class TestCContainerSignals(object):
class TestCContainerPrepared(object):

@pytest.fixture
def container_factory(self, factory):
return factory.create_container_factory()

def test_container_prepared(self, container_factory):
def test_received(self, container_factory):
receiver = Receiver()

signals.container_prepared.connect(receiver)
Expand Down
143 changes: 93 additions & 50 deletions tests/integration/test_registrars.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,85 +4,128 @@
class TestComponentRegistrarBind(object):

@pytest.fixture
def factory_1(self):
return lambda container: container('test.factory_2')

@pytest.fixture
def factory_2(self):
def service(self):
return lambda container: container

@pytest.fixture
def service_1(self):
return lambda container: container('test.service_2')

@pytest.fixture
def service_2(self):
return lambda container: container
def component_registrar(self, factory):
return factory.create_component_registrar()

@pytest.fixture
def post_hook(self):
return lambda self, container: container('test.service_1')
def container(self, factory):
return factory.create_container()

@pytest.fixture
def component_class(
self,
factory_1, factory_2, service_1, service_2, post_hook,
factory,
):
return factory.create_component_class(
def test_single(self, component_registrar, container, service, factory):
component_class = factory.create_component_class(
name="TestComponent",
factories={'factory_1': factory_1, 'factory_2': factory_2},
services={'service_1': service_1, 'service_2': service_2},
post_hook=post_hook,
services={'service': service},
post_hook=lambda self, container: container('test.service'),
)
plugin = factory.create_plugin(
namespace='test', component_class=component_class)
component = factory.create_component(plugin=plugin)
component_registrar.register(container, component)

@pytest.fixture
def plugin_1(self, component_class, factory):
return factory.create_plugin(
name='test', component_class=component_class)

@pytest.fixture
def plugin_2(self, component_class, factory):
return factory.create_plugin(
name='test_2', component_class=component_class)
result = component_registrar.bind(container)

@pytest.fixture
def component_registrar(self, factory):
return factory.create_component_registrar()
assert result is None

@pytest.fixture
def component_1(self, plugin_1, factory):
return factory.create_component(plugin=plugin_1)
def test_related(
self, component_registrar, container, service, factory):
component_class = factory.create_component_class(
name="TestComponent",
services={'service': service},
post_hook=lambda self, container: container('test_2.service'),
)
plugin_1 = factory.create_plugin(
namespace='test_1', component_class=component_class)
plugin_2 = factory.create_plugin(
namespace='test_2', component_class=component_class)
component_1 = factory.create_component(plugin=plugin_1)
component_2 = factory.create_component(plugin=plugin_2)
component_registrar.register(container, component_1)
component_registrar.register(container, component_2)

@pytest.fixture
def component_2(self, plugin_2, factory):
return factory.create_component(plugin=plugin_2)
result = component_registrar.bind(container)

@pytest.fixture
def container(self, factory):
return factory.create_container()
assert result is None

def test_registered_single(
self, component_registrar, container, component_1):
def test_reversed(
self, component_registrar, container, service, factory):
component_class = factory.create_component_class(
name="TestComponent",
services={'service': service},
post_hook=lambda self, container: container('test_2.service'),
)
plugin_1 = factory.create_plugin(
namespace='test_1', component_class=component_class)
plugin_2 = factory.create_plugin(
namespace='test_2', component_class=component_class)
component_1 = factory.create_component(plugin=plugin_1)
component_2 = factory.create_component(plugin=plugin_2)
component_registrar.register(container, component_2)
component_registrar.register(container, component_1)

result = component_registrar.bind(container)

assert result is None

def test_registered_related(
self, component_registrar, container, component_1, component_2):
def test_bind_related(
self, component_registrar, container, service, factory):
def post_hook_1(self, container):
self.value = True

def post_hook_2(self, container):
container('service', namespace='test_1')
component_class_1 = factory.create_component_class(
name="TestComponent",
post_hook=post_hook_1,
)
component_class_2 = factory.create_component_class(
name="TestComponent",
post_hook=post_hook_2,
)
plugin_1 = factory.create_plugin(
namespace='test_1', component_class=component_class_1)
plugin_2 = factory.create_plugin(
namespace='test_2', component_class=component_class_2)
component_1 = factory.create_component(plugin=plugin_1)
component_2 = factory.create_component(plugin=plugin_2)
component_registrar.register(container, component_1)
component_registrar.register(container, component_2)
container.add_service(
lambda container: component_1.value, 'service', plugin_1.namespace)

result = component_registrar.bind(container)

assert result is None

def test_registered_reversed(
self, component_registrar, container, component_1, component_2):
@pytest.mark.xfail(reason="No dependencies resolving")
def test_bind_reversed(
self, component_registrar, container, service, factory):
def post_hook_1(self, container):
self.value = True

def post_hook_2(self, container):
container('service', namespace='test_1')
component_class_1 = factory.create_component_class(
name="TestComponent",
post_hook=post_hook_1,
)
component_class_2 = factory.create_component_class(
name="TestComponent",
post_hook=post_hook_2,
)
plugin_1 = factory.create_plugin(
namespace='test_1', component_class=component_class_1)
plugin_2 = factory.create_plugin(
namespace='test_2', component_class=component_class_2)
component_1 = factory.create_component(plugin=plugin_1)
component_2 = factory.create_component(plugin=plugin_2)
component_registrar.register(container, component_2)
component_registrar.register(container, component_1)
container.add_service(
lambda container: component_1.value, 'service', plugin_1.namespace)

result = component_registrar.bind(container)

Expand Down

0 comments on commit 60a9006

Please sign in to comment.