import unittest from dependency_injector import containers, providers class TraverseProviderTests(unittest.TestCase): def test_nested_providers(self): class Container(containers.DeclarativeContainer): obj_factory = providers.DelegatedFactory( dict, foo=providers.Resource( dict, foo="bar" ), bar=providers.Resource( dict, foo="bar" ) ) container = Container() all_providers = list(container.traverse()) self.assertIn(container.obj_factory, all_providers) self.assertIn(container.obj_factory.kwargs["foo"], all_providers) self.assertIn(container.obj_factory.kwargs["bar"], all_providers) self.assertEqual(len(all_providers), 3) def test_nested_providers_with_filtering(self): class Container(containers.DeclarativeContainer): obj_factory = providers.DelegatedFactory( dict, foo=providers.Resource( dict, foo="bar" ), bar=providers.Resource( dict, foo="bar" ) ) container = Container() all_providers = list(container.traverse(types=[providers.Resource])) self.assertIn(container.obj_factory.kwargs["foo"], all_providers) self.assertIn(container.obj_factory.kwargs["bar"], all_providers) self.assertEqual(len(all_providers), 2) class TraverseProviderDeclarativeTests(unittest.TestCase): def test_nested_providers(self): class Container(containers.DeclarativeContainer): obj_factory = providers.DelegatedFactory( dict, foo=providers.Resource( dict, foo="bar" ), bar=providers.Resource( dict, foo="bar" ) ) all_providers = list(Container.traverse()) self.assertIn(Container.obj_factory, all_providers) self.assertIn(Container.obj_factory.kwargs["foo"], all_providers) self.assertIn(Container.obj_factory.kwargs["bar"], all_providers) self.assertEqual(len(all_providers), 3) def test_nested_providers_with_filtering(self): class Container(containers.DeclarativeContainer): obj_factory = providers.DelegatedFactory( dict, foo=providers.Resource( dict, foo="bar" ), bar=providers.Resource( dict, foo="bar" ) ) all_providers = list(Container.traverse(types=[providers.Resource])) self.assertIn(Container.obj_factory.kwargs["foo"], all_providers) self.assertIn(Container.obj_factory.kwargs["bar"], all_providers) self.assertEqual(len(all_providers), 2)