mirror of
				https://github.com/ets-labs/python-dependency-injector.git
				synced 2025-11-04 01:47:36 +03:00 
			
		
		
		
	Migrate traversal tests
This commit is contained in:
		
							parent
							
								
									7094fdc356
								
							
						
					
					
						commit
						75c9bdbd7a
					
				| 
						 | 
				
			
			@ -1,869 +0,0 @@
 | 
			
		|||
import unittest
 | 
			
		||||
 | 
			
		||||
from dependency_injector import containers, providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TraverseTests(unittest.TestCase):
 | 
			
		||||
 | 
			
		||||
    def test_traverse_cycled_graph(self):
 | 
			
		||||
        provider1 = providers.Provider()
 | 
			
		||||
 | 
			
		||||
        provider2 = providers.Provider()
 | 
			
		||||
        provider2.override(provider1)
 | 
			
		||||
 | 
			
		||||
        provider3 = providers.Provider()
 | 
			
		||||
        provider3.override(provider2)
 | 
			
		||||
 | 
			
		||||
        provider1.override(provider3)  # Cycle: provider3 -> provider2 -> provider1 -> provider3
 | 
			
		||||
 | 
			
		||||
        all_providers = list(providers.traverse(provider1))
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 3
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
        assert provider3 in all_providers
 | 
			
		||||
 | 
			
		||||
    def test_traverse_types_filtering(self):
 | 
			
		||||
        provider1 = providers.Resource(dict)
 | 
			
		||||
        provider2 = providers.Resource(dict)
 | 
			
		||||
        provider3 = providers.Provider()
 | 
			
		||||
 | 
			
		||||
        provider = providers.Provider()
 | 
			
		||||
 | 
			
		||||
        provider.override(provider1)
 | 
			
		||||
        provider.override(provider2)
 | 
			
		||||
        provider.override(provider3)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(providers.traverse(provider, types=[providers.Resource]))
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 2
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ProviderTests(unittest.TestCase):
 | 
			
		||||
 | 
			
		||||
    def test_traversal_overriding(self):
 | 
			
		||||
        provider1 = providers.Provider()
 | 
			
		||||
        provider2 = providers.Provider()
 | 
			
		||||
        provider3 = providers.Provider()
 | 
			
		||||
 | 
			
		||||
        provider = providers.Provider()
 | 
			
		||||
 | 
			
		||||
        provider.override(provider1)
 | 
			
		||||
        provider.override(provider2)
 | 
			
		||||
        provider.override(provider3)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 3
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
        assert provider3 in all_providers
 | 
			
		||||
 | 
			
		||||
    def test_traversal_overriding_nested(self):
 | 
			
		||||
        provider1 = providers.Provider()
 | 
			
		||||
 | 
			
		||||
        provider2 = providers.Provider()
 | 
			
		||||
        provider2.override(provider1)
 | 
			
		||||
 | 
			
		||||
        provider3 = providers.Provider()
 | 
			
		||||
        provider3.override(provider2)
 | 
			
		||||
 | 
			
		||||
        provider = providers.Provider()
 | 
			
		||||
        provider.override(provider3)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 3
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
        assert provider3 in all_providers
 | 
			
		||||
 | 
			
		||||
    def test_traverse_types_filtering(self):
 | 
			
		||||
        provider1 = providers.Resource(dict)
 | 
			
		||||
        provider2 = providers.Resource(dict)
 | 
			
		||||
        provider3 = providers.Provider()
 | 
			
		||||
 | 
			
		||||
        provider = providers.Provider()
 | 
			
		||||
 | 
			
		||||
        provider.override(provider1)
 | 
			
		||||
        provider.override(provider2)
 | 
			
		||||
        provider.override(provider3)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse(types=[providers.Resource]))
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 2
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ObjectTests(unittest.TestCase):
 | 
			
		||||
 | 
			
		||||
    def test_traversal(self):
 | 
			
		||||
        provider = providers.Object("string")
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
        assert len(all_providers) == 0
 | 
			
		||||
 | 
			
		||||
    def test_traversal_provider(self):
 | 
			
		||||
        another_provider = providers.Provider()
 | 
			
		||||
        provider = providers.Object(another_provider)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 1
 | 
			
		||||
        assert another_provider in all_providers
 | 
			
		||||
 | 
			
		||||
    def test_traversal_provider_and_overriding(self):
 | 
			
		||||
        another_provider_1 = providers.Provider()
 | 
			
		||||
        another_provider_2 = providers.Provider()
 | 
			
		||||
        another_provider_3 = providers.Provider()
 | 
			
		||||
 | 
			
		||||
        provider = providers.Object(another_provider_1)
 | 
			
		||||
 | 
			
		||||
        provider.override(another_provider_2)
 | 
			
		||||
        provider.override(another_provider_3)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 3
 | 
			
		||||
        assert another_provider_1 in all_providers
 | 
			
		||||
        assert another_provider_2 in all_providers
 | 
			
		||||
        assert another_provider_3 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class DelegateTests(unittest.TestCase):
 | 
			
		||||
 | 
			
		||||
    def test_traversal_provider(self):
 | 
			
		||||
        another_provider = providers.Provider()
 | 
			
		||||
        provider = providers.Delegate(another_provider)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 1
 | 
			
		||||
        assert another_provider in all_providers
 | 
			
		||||
 | 
			
		||||
    def test_traversal_provider_and_overriding(self):
 | 
			
		||||
        provider1 = providers.Provider()
 | 
			
		||||
        provider2 = providers.Provider()
 | 
			
		||||
 | 
			
		||||
        provider3 = providers.Provider()
 | 
			
		||||
        provider3.override(provider2)
 | 
			
		||||
 | 
			
		||||
        provider = providers.Delegate(provider1)
 | 
			
		||||
 | 
			
		||||
        provider.override(provider3)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 3
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
        assert provider3 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class DependencyTests(unittest.TestCase):
 | 
			
		||||
 | 
			
		||||
    def test_traversal(self):
 | 
			
		||||
        provider = providers.Dependency()
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
        assert len(all_providers) == 0
 | 
			
		||||
 | 
			
		||||
    def test_traversal_default(self):
 | 
			
		||||
        another_provider = providers.Provider()
 | 
			
		||||
        provider = providers.Dependency(default=another_provider)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 1
 | 
			
		||||
        assert another_provider in all_providers
 | 
			
		||||
 | 
			
		||||
    def test_traversal_overriding(self):
 | 
			
		||||
        provider1 = providers.Provider()
 | 
			
		||||
 | 
			
		||||
        provider2 = providers.Provider()
 | 
			
		||||
        provider2.override(provider1)
 | 
			
		||||
 | 
			
		||||
        provider = providers.Dependency()
 | 
			
		||||
        provider.override(provider2)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 2
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class DependenciesContainerTests(unittest.TestCase):
 | 
			
		||||
 | 
			
		||||
    def test_traversal(self):
 | 
			
		||||
        provider = providers.DependenciesContainer()
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
        assert len(all_providers) == 0
 | 
			
		||||
 | 
			
		||||
    def test_traversal_default(self):
 | 
			
		||||
        another_provider = providers.Provider()
 | 
			
		||||
        provider = providers.DependenciesContainer(default=another_provider)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 1
 | 
			
		||||
        assert another_provider in all_providers
 | 
			
		||||
 | 
			
		||||
    def test_traversal_fluent_interface(self):
 | 
			
		||||
        provider = providers.DependenciesContainer()
 | 
			
		||||
        provider1 = provider.provider1
 | 
			
		||||
        provider2 = provider.provider2
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 2
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
    def test_traversal_overriding(self):
 | 
			
		||||
        provider1 = providers.Provider()
 | 
			
		||||
        provider2 = providers.Provider()
 | 
			
		||||
        provider3 = providers.DependenciesContainer(
 | 
			
		||||
            provider1=provider1,
 | 
			
		||||
            provider2=provider2,
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        provider = providers.DependenciesContainer()
 | 
			
		||||
        provider.override(provider3)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 5
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
        assert provider3 in all_providers
 | 
			
		||||
        assert provider.provider1 in all_providers
 | 
			
		||||
        assert provider.provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CallableTests(unittest.TestCase):
 | 
			
		||||
 | 
			
		||||
    def test_traverse(self):
 | 
			
		||||
        provider = providers.Callable(dict)
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
        assert len(all_providers) == 0
 | 
			
		||||
 | 
			
		||||
    def test_traverse_args(self):
 | 
			
		||||
        provider1 = providers.Object("bar")
 | 
			
		||||
        provider2 = providers.Object("baz")
 | 
			
		||||
        provider = providers.Callable(list, "foo", provider1, provider2)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 2
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
    def test_traverse_kwargs(self):
 | 
			
		||||
        provider1 = providers.Object("bar")
 | 
			
		||||
        provider2 = providers.Object("baz")
 | 
			
		||||
        provider = providers.Callable(dict, foo="foo", bar=provider1, baz=provider2)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 2
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
    def test_traverse_overridden(self):
 | 
			
		||||
        provider1 = providers.Object("bar")
 | 
			
		||||
        provider2 = providers.Object("baz")
 | 
			
		||||
 | 
			
		||||
        provider = providers.Callable(dict, "foo")
 | 
			
		||||
        provider.override(provider1)
 | 
			
		||||
        provider.override(provider2)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 2
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
    def test_traverse_provides(self):
 | 
			
		||||
        provider1 = providers.Callable(list)
 | 
			
		||||
        provider2 = providers.Object("bar")
 | 
			
		||||
        provider3 = providers.Object("baz")
 | 
			
		||||
 | 
			
		||||
        provider = providers.Callable(provider1, provider2)
 | 
			
		||||
        provider.override(provider3)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 3
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
        assert provider3 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ConfigurationTests(unittest.TestCase):
 | 
			
		||||
 | 
			
		||||
    def test_traverse(self):
 | 
			
		||||
        config = providers.Configuration(default={"option1": {"option2": "option2"}})
 | 
			
		||||
        option1 = config.option1
 | 
			
		||||
        option2 = config.option1.option2
 | 
			
		||||
        option3 = config.option1[config.option1.option2]
 | 
			
		||||
 | 
			
		||||
        all_providers = list(config.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 3
 | 
			
		||||
        assert option1 in all_providers
 | 
			
		||||
        assert option2 in all_providers
 | 
			
		||||
        assert option3 in all_providers
 | 
			
		||||
 | 
			
		||||
    def test_traverse_typed(self):
 | 
			
		||||
        config = providers.Configuration()
 | 
			
		||||
        option = config.option
 | 
			
		||||
        typed_option = config.option.as_int()
 | 
			
		||||
 | 
			
		||||
        all_providers = list(typed_option.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 1
 | 
			
		||||
        assert option in all_providers
 | 
			
		||||
 | 
			
		||||
    def test_traverse_overridden(self):
 | 
			
		||||
        options = {"option1": {"option2": "option2"}}
 | 
			
		||||
        config = providers.Configuration()
 | 
			
		||||
        config.from_dict(options)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(config.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 1
 | 
			
		||||
        overridden, = all_providers
 | 
			
		||||
        assert overridden() == options
 | 
			
		||||
        assert overridden is config.last_overriding
 | 
			
		||||
 | 
			
		||||
    def test_traverse_overridden_option_1(self):
 | 
			
		||||
        options = {"option2": "option2"}
 | 
			
		||||
        config = providers.Configuration()
 | 
			
		||||
        config.option1.from_dict(options)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(config.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 2
 | 
			
		||||
        assert config.option1 in all_providers
 | 
			
		||||
        assert config.last_overriding in all_providers
 | 
			
		||||
 | 
			
		||||
    def test_traverse_overridden_option_2(self):
 | 
			
		||||
        options = {"option2": "option2"}
 | 
			
		||||
        config = providers.Configuration()
 | 
			
		||||
        config.option1.from_dict(options)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(config.option1.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 0
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class FactoryTests(unittest.TestCase):
 | 
			
		||||
 | 
			
		||||
    def test_traverse(self):
 | 
			
		||||
        provider = providers.Factory(dict)
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
        assert len(all_providers) == 0
 | 
			
		||||
 | 
			
		||||
    def test_traverse_args(self):
 | 
			
		||||
        provider1 = providers.Object("bar")
 | 
			
		||||
        provider2 = providers.Object("baz")
 | 
			
		||||
        provider = providers.Factory(list, "foo", provider1, provider2)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 2
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
    def test_traverse_kwargs(self):
 | 
			
		||||
        provider1 = providers.Object("bar")
 | 
			
		||||
        provider2 = providers.Object("baz")
 | 
			
		||||
        provider = providers.Factory(dict, foo="foo", bar=provider1, baz=provider2)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 2
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
    def test_traverse_attributes(self):
 | 
			
		||||
        provider1 = providers.Object("bar")
 | 
			
		||||
        provider2 = providers.Object("baz")
 | 
			
		||||
        provider = providers.Factory(dict)
 | 
			
		||||
        provider.add_attributes(foo="foo", bar=provider1, baz=provider2)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 2
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
    def test_traverse_overridden(self):
 | 
			
		||||
        provider1 = providers.Object("bar")
 | 
			
		||||
        provider2 = providers.Object("baz")
 | 
			
		||||
 | 
			
		||||
        provider = providers.Factory(dict, "foo")
 | 
			
		||||
        provider.override(provider1)
 | 
			
		||||
        provider.override(provider2)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 2
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
    def test_traverse_provides(self):
 | 
			
		||||
        provider1 = providers.Callable(list)
 | 
			
		||||
        provider2 = providers.Object("bar")
 | 
			
		||||
        provider3 = providers.Object("baz")
 | 
			
		||||
 | 
			
		||||
        provider = providers.Factory(provider1, provider2)
 | 
			
		||||
        provider.override(provider3)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 3
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
        assert provider3 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class FactoryAggregateTests(unittest.TestCase):
 | 
			
		||||
 | 
			
		||||
    def test_traverse(self):
 | 
			
		||||
        factory1 = providers.Factory(dict)
 | 
			
		||||
        factory2 = providers.Factory(list)
 | 
			
		||||
        provider = providers.FactoryAggregate(factory1=factory1, factory2=factory2)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 2
 | 
			
		||||
        assert factory1 in all_providers
 | 
			
		||||
        assert factory2 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class BaseSingletonTests(unittest.TestCase):
 | 
			
		||||
 | 
			
		||||
    def test_traverse(self):
 | 
			
		||||
        provider = providers.Singleton(dict)
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
        assert len(all_providers) == 0
 | 
			
		||||
 | 
			
		||||
    def test_traverse_args(self):
 | 
			
		||||
        provider1 = providers.Object("bar")
 | 
			
		||||
        provider2 = providers.Object("baz")
 | 
			
		||||
        provider = providers.Singleton(list, "foo", provider1, provider2)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 2
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
    def test_traverse_kwargs(self):
 | 
			
		||||
        provider1 = providers.Object("bar")
 | 
			
		||||
        provider2 = providers.Object("baz")
 | 
			
		||||
        provider = providers.Singleton(dict, foo="foo", bar=provider1, baz=provider2)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 2
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
    def test_traverse_attributes(self):
 | 
			
		||||
        provider1 = providers.Object("bar")
 | 
			
		||||
        provider2 = providers.Object("baz")
 | 
			
		||||
        provider = providers.Singleton(dict)
 | 
			
		||||
        provider.add_attributes(foo="foo", bar=provider1, baz=provider2)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 2
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
    def test_traverse_overridden(self):
 | 
			
		||||
        provider1 = providers.Object("bar")
 | 
			
		||||
        provider2 = providers.Object("baz")
 | 
			
		||||
 | 
			
		||||
        provider = providers.Singleton(dict, "foo")
 | 
			
		||||
        provider.override(provider1)
 | 
			
		||||
        provider.override(provider2)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 2
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
    def test_traverse_provides(self):
 | 
			
		||||
        provider1 = providers.Callable(list)
 | 
			
		||||
        provider2 = providers.Object("bar")
 | 
			
		||||
        provider3 = providers.Object("baz")
 | 
			
		||||
 | 
			
		||||
        provider = providers.Singleton(provider1, provider2)
 | 
			
		||||
        provider.override(provider3)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 3
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
        assert provider3 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ListTests(unittest.TestCase):
 | 
			
		||||
 | 
			
		||||
    def test_traverse_args(self):
 | 
			
		||||
        provider1 = providers.Object("bar")
 | 
			
		||||
        provider2 = providers.Object("baz")
 | 
			
		||||
        provider = providers.List("foo", provider1, provider2)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 2
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
    def test_traverse_overridden(self):
 | 
			
		||||
        provider1 = providers.Object("bar")
 | 
			
		||||
        provider2 = providers.Object("baz")
 | 
			
		||||
        provider3 = providers.List(provider1, provider2)
 | 
			
		||||
 | 
			
		||||
        provider = providers.List("foo")
 | 
			
		||||
        provider.override(provider3)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 3
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
        assert provider3 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class DictTests(unittest.TestCase):
 | 
			
		||||
 | 
			
		||||
    def test_traverse_kwargs(self):
 | 
			
		||||
        provider1 = providers.Object("bar")
 | 
			
		||||
        provider2 = providers.Object("baz")
 | 
			
		||||
        provider = providers.Dict(foo="foo", bar=provider1, baz=provider2)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 2
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
    def test_traverse_overridden(self):
 | 
			
		||||
        provider1 = providers.Object("bar")
 | 
			
		||||
        provider2 = providers.Object("baz")
 | 
			
		||||
        provider3 = providers.Dict(bar=provider1, baz=provider2)
 | 
			
		||||
 | 
			
		||||
        provider = providers.Dict(foo="foo")
 | 
			
		||||
        provider.override(provider3)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 3
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
        assert provider3 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ResourceTests(unittest.TestCase):
 | 
			
		||||
 | 
			
		||||
    def test_traverse(self):
 | 
			
		||||
        provider = providers.Resource(dict)
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
        assert len(all_providers) == 0
 | 
			
		||||
 | 
			
		||||
    def test_traverse_args(self):
 | 
			
		||||
        provider1 = providers.Object("bar")
 | 
			
		||||
        provider2 = providers.Object("baz")
 | 
			
		||||
        provider = providers.Resource(list, "foo", provider1, provider2)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 2
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
    def test_traverse_kwargs(self):
 | 
			
		||||
        provider1 = providers.Object("bar")
 | 
			
		||||
        provider2 = providers.Object("baz")
 | 
			
		||||
        provider = providers.Resource(dict, foo="foo", bar=provider1, baz=provider2)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 2
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
    def test_traverse_overridden(self):
 | 
			
		||||
        provider1 = providers.Resource(list)
 | 
			
		||||
        provider2 = providers.Resource(tuple)
 | 
			
		||||
 | 
			
		||||
        provider = providers.Resource(dict, "foo")
 | 
			
		||||
        provider.override(provider1)
 | 
			
		||||
        provider.override(provider2)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 2
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
    def test_traverse_provides(self):
 | 
			
		||||
        provider1 = providers.Callable(list)
 | 
			
		||||
 | 
			
		||||
        provider = providers.Resource(provider1)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 1
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ContainerTests(unittest.TestCase):
 | 
			
		||||
 | 
			
		||||
    def test_traverse(self):
 | 
			
		||||
        class Container(containers.DeclarativeContainer):
 | 
			
		||||
            provider1 = providers.Callable(list)
 | 
			
		||||
            provider2 = providers.Callable(dict)
 | 
			
		||||
 | 
			
		||||
        provider = providers.Container(Container)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 2
 | 
			
		||||
        assert {list,  dict} == {provider.provides for provider in all_providers}
 | 
			
		||||
 | 
			
		||||
    def test_traverse_overridden(self):
 | 
			
		||||
        class Container1(containers.DeclarativeContainer):
 | 
			
		||||
            provider1 = providers.Callable(list)
 | 
			
		||||
            provider2 = providers.Callable(dict)
 | 
			
		||||
 | 
			
		||||
        class Container2(containers.DeclarativeContainer):
 | 
			
		||||
            provider1 = providers.Callable(tuple)
 | 
			
		||||
            provider2 = providers.Callable(str)
 | 
			
		||||
 | 
			
		||||
        container2 = Container2()
 | 
			
		||||
 | 
			
		||||
        provider = providers.Container(Container1)
 | 
			
		||||
        provider.override(container2)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 5
 | 
			
		||||
        assert {list, dict, tuple, str} == {
 | 
			
		||||
            provider.provides
 | 
			
		||||
            for provider in all_providers
 | 
			
		||||
            if isinstance(provider, providers.Callable)
 | 
			
		||||
        }
 | 
			
		||||
        assert provider.last_overriding in all_providers
 | 
			
		||||
        assert provider.last_overriding() is container2
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class SelectorTests(unittest.TestCase):
 | 
			
		||||
 | 
			
		||||
    def test_traverse(self):
 | 
			
		||||
        switch = lambda: "provider1"
 | 
			
		||||
        provider1 = providers.Callable(list)
 | 
			
		||||
        provider2 = providers.Callable(dict)
 | 
			
		||||
 | 
			
		||||
        provider = providers.Selector(
 | 
			
		||||
            switch,
 | 
			
		||||
            provider1=provider1,
 | 
			
		||||
            provider2=provider2,
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 2
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
    def test_traverse_switch(self):
 | 
			
		||||
        switch = providers.Callable(lambda: "provider1")
 | 
			
		||||
        provider1 = providers.Callable(list)
 | 
			
		||||
        provider2 = providers.Callable(dict)
 | 
			
		||||
 | 
			
		||||
        provider = providers.Selector(
 | 
			
		||||
            switch,
 | 
			
		||||
            provider1=provider1,
 | 
			
		||||
            provider2=provider2,
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 3
 | 
			
		||||
        assert switch in all_providers
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
    def test_traverse_overridden(self):
 | 
			
		||||
        provider1 = providers.Callable(list)
 | 
			
		||||
        provider2 = providers.Callable(dict)
 | 
			
		||||
        selector1 = providers.Selector(lambda: "provider1", provider1=provider1)
 | 
			
		||||
 | 
			
		||||
        provider = providers.Selector(
 | 
			
		||||
            lambda: "provider2",
 | 
			
		||||
            provider2=provider2,
 | 
			
		||||
        )
 | 
			
		||||
        provider.override(selector1)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 3
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
        assert selector1 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ProvidedInstanceTests(unittest.TestCase):
 | 
			
		||||
 | 
			
		||||
    def test_traverse(self):
 | 
			
		||||
        provider1 = providers.Provider()
 | 
			
		||||
        provider = provider1.provided
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 1
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
 | 
			
		||||
    def test_traverse_overridden(self):
 | 
			
		||||
        provider1 = providers.Provider()
 | 
			
		||||
        provider2 = providers.Provider()
 | 
			
		||||
 | 
			
		||||
        provider = provider1.provided
 | 
			
		||||
        provider.override(provider2)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 2
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class AttributeGetterTests(unittest.TestCase):
 | 
			
		||||
 | 
			
		||||
    def test_traverse(self):
 | 
			
		||||
        provider1 = providers.Provider()
 | 
			
		||||
        provided = provider1.provided
 | 
			
		||||
        provider = provided.attr
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 2
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provided in all_providers
 | 
			
		||||
 | 
			
		||||
    def test_traverse_overridden(self):
 | 
			
		||||
        provider1 = providers.Provider()
 | 
			
		||||
        provided = provider1.provided
 | 
			
		||||
        provider2 = providers.Provider()
 | 
			
		||||
 | 
			
		||||
        provider = provided.attr
 | 
			
		||||
        provider.override(provider2)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 3
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
        assert provided in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ItemGetterTests(unittest.TestCase):
 | 
			
		||||
 | 
			
		||||
    def test_traverse(self):
 | 
			
		||||
        provider1 = providers.Provider()
 | 
			
		||||
        provided = provider1.provided
 | 
			
		||||
        provider = provided["item"]
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 2
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provided in all_providers
 | 
			
		||||
 | 
			
		||||
    def test_traverse_overridden(self):
 | 
			
		||||
        provider1 = providers.Provider()
 | 
			
		||||
        provided = provider1.provided
 | 
			
		||||
        provider2 = providers.Provider()
 | 
			
		||||
 | 
			
		||||
        provider = provided["item"]
 | 
			
		||||
        provider.override(provider2)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 3
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
        assert provided in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class MethodCallerTests(unittest.TestCase):
 | 
			
		||||
 | 
			
		||||
    def test_traverse(self):
 | 
			
		||||
        provider1 = providers.Provider()
 | 
			
		||||
        provided = provider1.provided
 | 
			
		||||
        method = provided.method
 | 
			
		||||
        provider = method.call()
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 3
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provided in all_providers
 | 
			
		||||
        assert method in all_providers
 | 
			
		||||
 | 
			
		||||
    def test_traverse_args(self):
 | 
			
		||||
        provider1 = providers.Provider()
 | 
			
		||||
        provided = provider1.provided
 | 
			
		||||
        method = provided.method
 | 
			
		||||
        provider2 = providers.Provider()
 | 
			
		||||
        provider = method.call("foo", provider2)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 4
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
        assert provided in all_providers
 | 
			
		||||
        assert method in all_providers
 | 
			
		||||
 | 
			
		||||
    def test_traverse_kwargs(self):
 | 
			
		||||
        provider1 = providers.Provider()
 | 
			
		||||
        provided = provider1.provided
 | 
			
		||||
        method = provided.method
 | 
			
		||||
        provider2 = providers.Provider()
 | 
			
		||||
        provider = method.call(foo="foo", bar=provider2)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 4
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
        assert provided in all_providers
 | 
			
		||||
        assert method in all_providers
 | 
			
		||||
 | 
			
		||||
    def test_traverse_overridden(self):
 | 
			
		||||
        provider1 = providers.Provider()
 | 
			
		||||
        provided = provider1.provided
 | 
			
		||||
        method = provided.method
 | 
			
		||||
        provider2 = providers.Provider()
 | 
			
		||||
 | 
			
		||||
        provider = method.call()
 | 
			
		||||
        provider.override(provider2)
 | 
			
		||||
 | 
			
		||||
        all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
        assert len(all_providers) == 4
 | 
			
		||||
        assert provider1 in all_providers
 | 
			
		||||
        assert provider2 in all_providers
 | 
			
		||||
        assert provided in all_providers
 | 
			
		||||
        assert method in all_providers
 | 
			
		||||
							
								
								
									
										1
									
								
								tests/unit/providers/traversal/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								tests/unit/providers/traversal/__init__.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
"""Traversal tests."""
 | 
			
		||||
							
								
								
									
										31
									
								
								tests/unit/providers/traversal/test_attribute_getter_py3.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								tests/unit/providers/traversal/test_attribute_getter_py3.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,31 @@
 | 
			
		|||
"""AttributeGetter provider traversal tests."""
 | 
			
		||||
 | 
			
		||||
from dependency_injector import providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse():
 | 
			
		||||
    provider1 = providers.Provider()
 | 
			
		||||
    provided = provider1.provided
 | 
			
		||||
    provider = provided.attr
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 2
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provided in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_overridden():
 | 
			
		||||
    provider1 = providers.Provider()
 | 
			
		||||
    provided = provider1.provided
 | 
			
		||||
    provider2 = providers.Provider()
 | 
			
		||||
 | 
			
		||||
    provider = provided.attr
 | 
			
		||||
    provider.override(provider2)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 3
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
    assert provided in all_providers
 | 
			
		||||
							
								
								
									
										64
									
								
								tests/unit/providers/traversal/test_callable_py3.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								tests/unit/providers/traversal/test_callable_py3.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,64 @@
 | 
			
		|||
"""Callable provider traversal tests."""
 | 
			
		||||
 | 
			
		||||
from dependency_injector import providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse():
 | 
			
		||||
    provider = providers.Callable(dict)
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
    assert len(all_providers) == 0
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_args():
 | 
			
		||||
    provider1 = providers.Object("bar")
 | 
			
		||||
    provider2 = providers.Object("baz")
 | 
			
		||||
    provider = providers.Callable(list, "foo", provider1, provider2)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 2
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_kwargs():
 | 
			
		||||
    provider1 = providers.Object("bar")
 | 
			
		||||
    provider2 = providers.Object("baz")
 | 
			
		||||
    provider = providers.Callable(dict, foo="foo", bar=provider1, baz=provider2)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 2
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_overridden():
 | 
			
		||||
    provider1 = providers.Object("bar")
 | 
			
		||||
    provider2 = providers.Object("baz")
 | 
			
		||||
 | 
			
		||||
    provider = providers.Callable(dict, "foo")
 | 
			
		||||
    provider.override(provider1)
 | 
			
		||||
    provider.override(provider2)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 2
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_provides():
 | 
			
		||||
    provider1 = providers.Callable(list)
 | 
			
		||||
    provider2 = providers.Object("bar")
 | 
			
		||||
    provider3 = providers.Object("baz")
 | 
			
		||||
 | 
			
		||||
    provider = providers.Callable(provider1, provider2)
 | 
			
		||||
    provider.override(provider3)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 3
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
    assert provider3 in all_providers
 | 
			
		||||
							
								
								
									
										63
									
								
								tests/unit/providers/traversal/test_configuration_py3.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								tests/unit/providers/traversal/test_configuration_py3.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,63 @@
 | 
			
		|||
"""Configuration provider tests."""
 | 
			
		||||
 | 
			
		||||
from dependency_injector import providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse():
 | 
			
		||||
    config = providers.Configuration(default={"option1": {"option2": "option2"}})
 | 
			
		||||
    option1 = config.option1
 | 
			
		||||
    option2 = config.option1.option2
 | 
			
		||||
    option3 = config.option1[config.option1.option2]
 | 
			
		||||
 | 
			
		||||
    all_providers = list(config.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 3
 | 
			
		||||
    assert option1 in all_providers
 | 
			
		||||
    assert option2 in all_providers
 | 
			
		||||
    assert option3 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_typed():
 | 
			
		||||
    config = providers.Configuration()
 | 
			
		||||
    option = config.option
 | 
			
		||||
    typed_option = config.option.as_int()
 | 
			
		||||
 | 
			
		||||
    all_providers = list(typed_option.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 1
 | 
			
		||||
    assert option in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_overridden():
 | 
			
		||||
    options = {"option1": {"option2": "option2"}}
 | 
			
		||||
    config = providers.Configuration()
 | 
			
		||||
    config.from_dict(options)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(config.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 1
 | 
			
		||||
    overridden, = all_providers
 | 
			
		||||
    assert overridden() == options
 | 
			
		||||
    assert overridden is config.last_overriding
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_overridden_option_1():
 | 
			
		||||
    options = {"option2": "option2"}
 | 
			
		||||
    config = providers.Configuration()
 | 
			
		||||
    config.option1.from_dict(options)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(config.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 2
 | 
			
		||||
    assert config.option1 in all_providers
 | 
			
		||||
    assert config.last_overriding in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_overridden_option_2():
 | 
			
		||||
    options = {"option2": "option2"}
 | 
			
		||||
    config = providers.Configuration()
 | 
			
		||||
    config.option1.from_dict(options)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(config.option1.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 0
 | 
			
		||||
							
								
								
									
										42
									
								
								tests/unit/providers/traversal/test_container_py3.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								tests/unit/providers/traversal/test_container_py3.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,42 @@
 | 
			
		|||
"""Container provider traversal tests."""
 | 
			
		||||
 | 
			
		||||
from dependency_injector import containers, providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse():
 | 
			
		||||
    class Container(containers.DeclarativeContainer):
 | 
			
		||||
        provider1 = providers.Callable(list)
 | 
			
		||||
        provider2 = providers.Callable(dict)
 | 
			
		||||
 | 
			
		||||
    provider = providers.Container(Container)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 2
 | 
			
		||||
    assert {list, dict} == {provider.provides for provider in all_providers}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_overridden():
 | 
			
		||||
    class Container1(containers.DeclarativeContainer):
 | 
			
		||||
        provider1 = providers.Callable(list)
 | 
			
		||||
        provider2 = providers.Callable(dict)
 | 
			
		||||
 | 
			
		||||
    class Container2(containers.DeclarativeContainer):
 | 
			
		||||
        provider1 = providers.Callable(tuple)
 | 
			
		||||
        provider2 = providers.Callable(str)
 | 
			
		||||
 | 
			
		||||
    container2 = Container2()
 | 
			
		||||
 | 
			
		||||
    provider = providers.Container(Container1)
 | 
			
		||||
    provider.override(container2)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 5
 | 
			
		||||
    assert {list, dict, tuple, str} == {
 | 
			
		||||
        provider.provides
 | 
			
		||||
        for provider in all_providers
 | 
			
		||||
        if isinstance(provider, providers.Callable)
 | 
			
		||||
    }
 | 
			
		||||
    assert provider.last_overriding in all_providers
 | 
			
		||||
    assert provider.last_overriding() is container2
 | 
			
		||||
							
								
								
									
										32
									
								
								tests/unit/providers/traversal/test_delegate_py3.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								tests/unit/providers/traversal/test_delegate_py3.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,32 @@
 | 
			
		|||
"""Delegate provider traversal tests."""
 | 
			
		||||
 | 
			
		||||
from dependency_injector import providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traversal_provider():
 | 
			
		||||
    another_provider = providers.Provider()
 | 
			
		||||
    provider = providers.Delegate(another_provider)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 1
 | 
			
		||||
    assert another_provider in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traversal_provider_and_overriding():
 | 
			
		||||
    provider1 = providers.Provider()
 | 
			
		||||
    provider2 = providers.Provider()
 | 
			
		||||
 | 
			
		||||
    provider3 = providers.Provider()
 | 
			
		||||
    provider3.override(provider2)
 | 
			
		||||
 | 
			
		||||
    provider = providers.Delegate(provider1)
 | 
			
		||||
 | 
			
		||||
    provider.override(provider3)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 3
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
    assert provider3 in all_providers
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,52 @@
 | 
			
		|||
"""DependenciesContainer provider traversal tests."""
 | 
			
		||||
 | 
			
		||||
from dependency_injector import providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traversal():
 | 
			
		||||
    provider = providers.DependenciesContainer()
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
    assert len(all_providers) == 0
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traversal_default():
 | 
			
		||||
    another_provider = providers.Provider()
 | 
			
		||||
    provider = providers.DependenciesContainer(default=another_provider)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 1
 | 
			
		||||
    assert another_provider in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traversal_fluent_interface():
 | 
			
		||||
    provider = providers.DependenciesContainer()
 | 
			
		||||
    provider1 = provider.provider1
 | 
			
		||||
    provider2 = provider.provider2
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 2
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traversal_overriding():
 | 
			
		||||
    provider1 = providers.Provider()
 | 
			
		||||
    provider2 = providers.Provider()
 | 
			
		||||
    provider3 = providers.DependenciesContainer(
 | 
			
		||||
        provider1=provider1,
 | 
			
		||||
        provider2=provider2,
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    provider = providers.DependenciesContainer()
 | 
			
		||||
    provider.override(provider3)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 5
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
    assert provider3 in all_providers
 | 
			
		||||
    assert provider.provider1 in all_providers
 | 
			
		||||
    assert provider.provider2 in all_providers
 | 
			
		||||
							
								
								
									
										35
									
								
								tests/unit/providers/traversal/test_dependency_py3.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								tests/unit/providers/traversal/test_dependency_py3.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,35 @@
 | 
			
		|||
"""Dependency provider traversal tests."""
 | 
			
		||||
 | 
			
		||||
from dependency_injector import providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traversal():
 | 
			
		||||
    provider = providers.Dependency()
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
    assert len(all_providers) == 0
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traversal_default():
 | 
			
		||||
    another_provider = providers.Provider()
 | 
			
		||||
    provider = providers.Dependency(default=another_provider)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 1
 | 
			
		||||
    assert another_provider in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traversal_overriding():
 | 
			
		||||
    provider1 = providers.Provider()
 | 
			
		||||
 | 
			
		||||
    provider2 = providers.Provider()
 | 
			
		||||
    provider2.override(provider1)
 | 
			
		||||
 | 
			
		||||
    provider = providers.Dependency()
 | 
			
		||||
    provider.override(provider2)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 2
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
							
								
								
									
										31
									
								
								tests/unit/providers/traversal/test_dict_py3.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								tests/unit/providers/traversal/test_dict_py3.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,31 @@
 | 
			
		|||
"""Dict provider traversal tests."""
 | 
			
		||||
 | 
			
		||||
from dependency_injector import providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_kwargs():
 | 
			
		||||
    provider1 = providers.Object("bar")
 | 
			
		||||
    provider2 = providers.Object("baz")
 | 
			
		||||
    provider = providers.Dict(foo="foo", bar=provider1, baz=provider2)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 2
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_overridden():
 | 
			
		||||
    provider1 = providers.Object("bar")
 | 
			
		||||
    provider2 = providers.Object("baz")
 | 
			
		||||
    provider3 = providers.Dict(bar=provider1, baz=provider2)
 | 
			
		||||
 | 
			
		||||
    provider = providers.Dict(foo="foo")
 | 
			
		||||
    provider.override(provider3)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 3
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
    assert provider3 in all_providers
 | 
			
		||||
							
								
								
									
										15
									
								
								tests/unit/providers/traversal/test_factory_aggregate_py3.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								tests/unit/providers/traversal/test_factory_aggregate_py3.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,15 @@
 | 
			
		|||
"""FactoryAggregate provider traversal tests."""
 | 
			
		||||
 | 
			
		||||
from dependency_injector import providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse():
 | 
			
		||||
    factory1 = providers.Factory(dict)
 | 
			
		||||
    factory2 = providers.Factory(list)
 | 
			
		||||
    provider = providers.FactoryAggregate(factory1=factory1, factory2=factory2)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 2
 | 
			
		||||
    assert factory1 in all_providers
 | 
			
		||||
    assert factory2 in all_providers
 | 
			
		||||
							
								
								
									
										77
									
								
								tests/unit/providers/traversal/test_factory_py3.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								tests/unit/providers/traversal/test_factory_py3.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,77 @@
 | 
			
		|||
"""Factory provider traversal tests."""
 | 
			
		||||
 | 
			
		||||
from dependency_injector import providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse():
 | 
			
		||||
    provider = providers.Factory(dict)
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
    assert len(all_providers) == 0
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_args():
 | 
			
		||||
    provider1 = providers.Object("bar")
 | 
			
		||||
    provider2 = providers.Object("baz")
 | 
			
		||||
    provider = providers.Factory(list, "foo", provider1, provider2)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 2
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_kwargs():
 | 
			
		||||
    provider1 = providers.Object("bar")
 | 
			
		||||
    provider2 = providers.Object("baz")
 | 
			
		||||
    provider = providers.Factory(dict, foo="foo", bar=provider1, baz=provider2)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 2
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_attributes():
 | 
			
		||||
    provider1 = providers.Object("bar")
 | 
			
		||||
    provider2 = providers.Object("baz")
 | 
			
		||||
    provider = providers.Factory(dict)
 | 
			
		||||
    provider.add_attributes(foo="foo", bar=provider1, baz=provider2)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 2
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_overridden():
 | 
			
		||||
    provider1 = providers.Object("bar")
 | 
			
		||||
    provider2 = providers.Object("baz")
 | 
			
		||||
 | 
			
		||||
    provider = providers.Factory(dict, "foo")
 | 
			
		||||
    provider.override(provider1)
 | 
			
		||||
    provider.override(provider2)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 2
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_provides():
 | 
			
		||||
    provider1 = providers.Callable(list)
 | 
			
		||||
    provider2 = providers.Object("bar")
 | 
			
		||||
    provider3 = providers.Object("baz")
 | 
			
		||||
 | 
			
		||||
    provider = providers.Factory(provider1, provider2)
 | 
			
		||||
    provider.override(provider3)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 3
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
    assert provider3 in all_providers
 | 
			
		||||
							
								
								
									
										31
									
								
								tests/unit/providers/traversal/test_item_getter_py3.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								tests/unit/providers/traversal/test_item_getter_py3.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,31 @@
 | 
			
		|||
"""ItemGetter provider traversal tests."""
 | 
			
		||||
 | 
			
		||||
from dependency_injector import providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse():
 | 
			
		||||
    provider1 = providers.Provider()
 | 
			
		||||
    provided = provider1.provided
 | 
			
		||||
    provider = provided["item"]
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 2
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provided in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_overridden():
 | 
			
		||||
    provider1 = providers.Provider()
 | 
			
		||||
    provided = provider1.provided
 | 
			
		||||
    provider2 = providers.Provider()
 | 
			
		||||
 | 
			
		||||
    provider = provided["item"]
 | 
			
		||||
    provider.override(provider2)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 3
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
    assert provided in all_providers
 | 
			
		||||
							
								
								
									
										31
									
								
								tests/unit/providers/traversal/test_list_py3.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								tests/unit/providers/traversal/test_list_py3.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,31 @@
 | 
			
		|||
"""List provider traversal tests."""
 | 
			
		||||
 | 
			
		||||
from dependency_injector import providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_args():
 | 
			
		||||
    provider1 = providers.Object("bar")
 | 
			
		||||
    provider2 = providers.Object("baz")
 | 
			
		||||
    provider = providers.List("foo", provider1, provider2)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 2
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_overridden():
 | 
			
		||||
    provider1 = providers.Object("bar")
 | 
			
		||||
    provider2 = providers.Object("baz")
 | 
			
		||||
    provider3 = providers.List(provider1, provider2)
 | 
			
		||||
 | 
			
		||||
    provider = providers.List("foo")
 | 
			
		||||
    provider.override(provider3)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 3
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
    assert provider3 in all_providers
 | 
			
		||||
							
								
								
									
										67
									
								
								tests/unit/providers/traversal/test_method_caller_py3.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								tests/unit/providers/traversal/test_method_caller_py3.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,67 @@
 | 
			
		|||
"""MethodCaller provider traversal tests."""
 | 
			
		||||
 | 
			
		||||
from dependency_injector import providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse():
 | 
			
		||||
    provider1 = providers.Provider()
 | 
			
		||||
    provided = provider1.provided
 | 
			
		||||
    method = provided.method
 | 
			
		||||
    provider = method.call()
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 3
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provided in all_providers
 | 
			
		||||
    assert method in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_args():
 | 
			
		||||
    provider1 = providers.Provider()
 | 
			
		||||
    provided = provider1.provided
 | 
			
		||||
    method = provided.method
 | 
			
		||||
    provider2 = providers.Provider()
 | 
			
		||||
    provider = method.call("foo", provider2)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 4
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
    assert provided in all_providers
 | 
			
		||||
    assert method in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_kwargs():
 | 
			
		||||
    provider1 = providers.Provider()
 | 
			
		||||
    provided = provider1.provided
 | 
			
		||||
    method = provided.method
 | 
			
		||||
    provider2 = providers.Provider()
 | 
			
		||||
    provider = method.call(foo="foo", bar=provider2)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 4
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
    assert provided in all_providers
 | 
			
		||||
    assert method in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_overridden():
 | 
			
		||||
    provider1 = providers.Provider()
 | 
			
		||||
    provided = provider1.provided
 | 
			
		||||
    method = provided.method
 | 
			
		||||
    provider2 = providers.Provider()
 | 
			
		||||
 | 
			
		||||
    provider = method.call()
 | 
			
		||||
    provider.override(provider2)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 4
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
    assert provided in all_providers
 | 
			
		||||
    assert method in all_providers
 | 
			
		||||
							
								
								
									
										37
									
								
								tests/unit/providers/traversal/test_object_py3.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								tests/unit/providers/traversal/test_object_py3.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,37 @@
 | 
			
		|||
"""Object provider traversal tests."""
 | 
			
		||||
 | 
			
		||||
from dependency_injector import providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traversal():
 | 
			
		||||
    provider = providers.Object("string")
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
    assert len(all_providers) == 0
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traversal_provider():
 | 
			
		||||
    another_provider = providers.Provider()
 | 
			
		||||
    provider = providers.Object(another_provider)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 1
 | 
			
		||||
    assert another_provider in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traversal_provider_and_overriding():
 | 
			
		||||
    another_provider_1 = providers.Provider()
 | 
			
		||||
    another_provider_2 = providers.Provider()
 | 
			
		||||
    another_provider_3 = providers.Provider()
 | 
			
		||||
 | 
			
		||||
    provider = providers.Object(another_provider_1)
 | 
			
		||||
 | 
			
		||||
    provider.override(another_provider_2)
 | 
			
		||||
    provider.override(another_provider_3)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 3
 | 
			
		||||
    assert another_provider_1 in all_providers
 | 
			
		||||
    assert another_provider_2 in all_providers
 | 
			
		||||
    assert another_provider_3 in all_providers
 | 
			
		||||
							
								
								
									
										27
									
								
								tests/unit/providers/traversal/test_provided_instance_py3.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								tests/unit/providers/traversal/test_provided_instance_py3.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,27 @@
 | 
			
		|||
"""ProvidedInstance provider traversal tests."""
 | 
			
		||||
 | 
			
		||||
from dependency_injector import providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse():
 | 
			
		||||
    provider1 = providers.Provider()
 | 
			
		||||
    provider = provider1.provided
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 1
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_overridden():
 | 
			
		||||
    provider1 = providers.Provider()
 | 
			
		||||
    provider2 = providers.Provider()
 | 
			
		||||
 | 
			
		||||
    provider = provider1.provided
 | 
			
		||||
    provider.override(provider2)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 2
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
							
								
								
									
										60
									
								
								tests/unit/providers/traversal/test_provider_py3.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								tests/unit/providers/traversal/test_provider_py3.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,60 @@
 | 
			
		|||
"""Provider traversal tests."""
 | 
			
		||||
 | 
			
		||||
from dependency_injector import providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traversal_overriding():
 | 
			
		||||
    provider1 = providers.Provider()
 | 
			
		||||
    provider2 = providers.Provider()
 | 
			
		||||
    provider3 = providers.Provider()
 | 
			
		||||
 | 
			
		||||
    provider = providers.Provider()
 | 
			
		||||
 | 
			
		||||
    provider.override(provider1)
 | 
			
		||||
    provider.override(provider2)
 | 
			
		||||
    provider.override(provider3)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 3
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
    assert provider3 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traversal_overriding_nested():
 | 
			
		||||
    provider1 = providers.Provider()
 | 
			
		||||
 | 
			
		||||
    provider2 = providers.Provider()
 | 
			
		||||
    provider2.override(provider1)
 | 
			
		||||
 | 
			
		||||
    provider3 = providers.Provider()
 | 
			
		||||
    provider3.override(provider2)
 | 
			
		||||
 | 
			
		||||
    provider = providers.Provider()
 | 
			
		||||
    provider.override(provider3)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 3
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
    assert provider3 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_types_filtering():
 | 
			
		||||
    provider1 = providers.Resource(dict)
 | 
			
		||||
    provider2 = providers.Resource(dict)
 | 
			
		||||
    provider3 = providers.Provider()
 | 
			
		||||
 | 
			
		||||
    provider = providers.Provider()
 | 
			
		||||
 | 
			
		||||
    provider.override(provider1)
 | 
			
		||||
    provider.override(provider2)
 | 
			
		||||
    provider.override(provider3)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse(types=[providers.Resource]))
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 2
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
							
								
								
									
										60
									
								
								tests/unit/providers/traversal/test_resource_py3.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								tests/unit/providers/traversal/test_resource_py3.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,60 @@
 | 
			
		|||
"""Resource provider traversal tests."""
 | 
			
		||||
 | 
			
		||||
from dependency_injector import providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse():
 | 
			
		||||
    provider = providers.Resource(dict)
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
    assert len(all_providers) == 0
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_args():
 | 
			
		||||
    provider1 = providers.Object("bar")
 | 
			
		||||
    provider2 = providers.Object("baz")
 | 
			
		||||
    provider = providers.Resource(list, "foo", provider1, provider2)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 2
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_kwargs():
 | 
			
		||||
    provider1 = providers.Object("bar")
 | 
			
		||||
    provider2 = providers.Object("baz")
 | 
			
		||||
    provider = providers.Resource(dict, foo="foo", bar=provider1, baz=provider2)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 2
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_overridden():
 | 
			
		||||
    provider1 = providers.Resource(list)
 | 
			
		||||
    provider2 = providers.Resource(tuple)
 | 
			
		||||
 | 
			
		||||
    provider = providers.Resource(dict, "foo")
 | 
			
		||||
    provider.override(provider1)
 | 
			
		||||
    provider.override(provider2)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 2
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_provides():
 | 
			
		||||
    provider1 = providers.Callable(list)
 | 
			
		||||
 | 
			
		||||
    provider = providers.Resource(provider1)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 1
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										59
									
								
								tests/unit/providers/traversal/test_selector_py3.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								tests/unit/providers/traversal/test_selector_py3.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,59 @@
 | 
			
		|||
"""Selector provider traversal tests."""
 | 
			
		||||
 | 
			
		||||
from dependency_injector import providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse():
 | 
			
		||||
    switch = lambda: "provider1"
 | 
			
		||||
    provider1 = providers.Callable(list)
 | 
			
		||||
    provider2 = providers.Callable(dict)
 | 
			
		||||
 | 
			
		||||
    provider = providers.Selector(
 | 
			
		||||
        switch,
 | 
			
		||||
        provider1=provider1,
 | 
			
		||||
        provider2=provider2,
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 2
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_switch():
 | 
			
		||||
    switch = providers.Callable(lambda: "provider1")
 | 
			
		||||
    provider1 = providers.Callable(list)
 | 
			
		||||
    provider2 = providers.Callable(dict)
 | 
			
		||||
 | 
			
		||||
    provider = providers.Selector(
 | 
			
		||||
        switch,
 | 
			
		||||
        provider1=provider1,
 | 
			
		||||
        provider2=provider2,
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 3
 | 
			
		||||
    assert switch in all_providers
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_overridden():
 | 
			
		||||
    provider1 = providers.Callable(list)
 | 
			
		||||
    provider2 = providers.Callable(dict)
 | 
			
		||||
    selector1 = providers.Selector(lambda: "provider1", provider1=provider1)
 | 
			
		||||
 | 
			
		||||
    provider = providers.Selector(
 | 
			
		||||
        lambda: "provider2",
 | 
			
		||||
        provider2=provider2,
 | 
			
		||||
    )
 | 
			
		||||
    provider.override(selector1)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 3
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
    assert selector1 in all_providers
 | 
			
		||||
							
								
								
									
										77
									
								
								tests/unit/providers/traversal/test_singleton_py3.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								tests/unit/providers/traversal/test_singleton_py3.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,77 @@
 | 
			
		|||
"""Singleton provider traversal tests."""
 | 
			
		||||
 | 
			
		||||
from dependency_injector import providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse():
 | 
			
		||||
    provider = providers.Singleton(dict)
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
    assert len(all_providers) == 0
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_args():
 | 
			
		||||
    provider1 = providers.Object("bar")
 | 
			
		||||
    provider2 = providers.Object("baz")
 | 
			
		||||
    provider = providers.Singleton(list, "foo", provider1, provider2)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 2
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_kwargs():
 | 
			
		||||
    provider1 = providers.Object("bar")
 | 
			
		||||
    provider2 = providers.Object("baz")
 | 
			
		||||
    provider = providers.Singleton(dict, foo="foo", bar=provider1, baz=provider2)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 2
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_attributes():
 | 
			
		||||
    provider1 = providers.Object("bar")
 | 
			
		||||
    provider2 = providers.Object("baz")
 | 
			
		||||
    provider = providers.Singleton(dict)
 | 
			
		||||
    provider.add_attributes(foo="foo", bar=provider1, baz=provider2)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 2
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_overridden():
 | 
			
		||||
    provider1 = providers.Object("bar")
 | 
			
		||||
    provider2 = providers.Object("baz")
 | 
			
		||||
 | 
			
		||||
    provider = providers.Singleton(dict, "foo")
 | 
			
		||||
    provider.override(provider1)
 | 
			
		||||
    provider.override(provider2)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 2
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_provides():
 | 
			
		||||
    provider1 = providers.Callable(list)
 | 
			
		||||
    provider2 = providers.Object("bar")
 | 
			
		||||
    provider3 = providers.Object("baz")
 | 
			
		||||
 | 
			
		||||
    provider = providers.Singleton(provider1, provider2)
 | 
			
		||||
    provider.override(provider3)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(provider.traverse())
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 3
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
    assert provider3 in all_providers
 | 
			
		||||
							
								
								
									
										40
									
								
								tests/unit/providers/traversal/test_traverse_py3.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								tests/unit/providers/traversal/test_traverse_py3.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,40 @@
 | 
			
		|||
"""Provider's traversal tests."""
 | 
			
		||||
 | 
			
		||||
from dependency_injector import providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_cycled_graph():
 | 
			
		||||
    provider1 = providers.Provider()
 | 
			
		||||
 | 
			
		||||
    provider2 = providers.Provider()
 | 
			
		||||
    provider2.override(provider1)
 | 
			
		||||
 | 
			
		||||
    provider3 = providers.Provider()
 | 
			
		||||
    provider3.override(provider2)
 | 
			
		||||
 | 
			
		||||
    provider1.override(provider3)  # Cycle: provider3 -> provider2 -> provider1 -> provider3
 | 
			
		||||
 | 
			
		||||
    all_providers = list(providers.traverse(provider1))
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 3
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
    assert provider3 in all_providers
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_traverse_types_filtering():
 | 
			
		||||
    provider1 = providers.Resource(dict)
 | 
			
		||||
    provider2 = providers.Resource(dict)
 | 
			
		||||
    provider3 = providers.Provider()
 | 
			
		||||
 | 
			
		||||
    provider = providers.Provider()
 | 
			
		||||
 | 
			
		||||
    provider.override(provider1)
 | 
			
		||||
    provider.override(provider2)
 | 
			
		||||
    provider.override(provider3)
 | 
			
		||||
 | 
			
		||||
    all_providers = list(providers.traverse(provider, types=[providers.Resource]))
 | 
			
		||||
 | 
			
		||||
    assert len(all_providers) == 2
 | 
			
		||||
    assert provider1 in all_providers
 | 
			
		||||
    assert provider2 in all_providers
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user