"""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