From 60a90067a055f736df8234ddbe04ff2186a7866c Mon Sep 17 00:00:00 2001 From: p1c2u Date: Sun, 16 Sep 2018 19:49:18 +0100 Subject: [PATCH] Bind dependencies resolving test --- kore/testing/factories.py | 4 +- tests/integration/test_components.py | 8 +- tests/integration/test_containers.py | 6 +- tests/integration/test_registrars.py | 143 +++++++++++++++++---------- 4 files changed, 102 insertions(+), 59 deletions(-) diff --git a/kore/testing/factories.py b/kore/testing/factories.py index 6355e35..1cde62b 100644 --- a/kore/testing/factories.py +++ b/kore/testing/factories.py @@ -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: diff --git a/tests/integration/test_components.py b/tests/integration/test_components.py index b323cc6..cd60715 100644 --- a/tests/integration/test_components.py +++ b/tests/integration/test_components.py @@ -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): @@ -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): @@ -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): diff --git a/tests/integration/test_containers.py b/tests/integration/test_containers.py index 8b094af..30f8851 100644 --- a/tests/integration/test_containers.py +++ b/tests/integration/test_containers.py @@ -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, ]) @@ -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) diff --git a/tests/integration/test_registrars.py b/tests/integration/test_registrars.py index 16f9479..78270d0 100644 --- a/tests/integration/test_registrars.py +++ b/tests/integration/test_registrars.py @@ -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)