mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2025-05-24 15:29:06 +03:00
210 lines
6.4 KiB
Python
210 lines
6.4 KiB
Python
import unittest
|
|
|
|
from dependency_injector import 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())
|
|
|
|
self.assertEqual(len(all_providers), 3)
|
|
self.assertIn(provider1, all_providers)
|
|
self.assertIn(provider2, all_providers)
|
|
self.assertIn(provider3, 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())
|
|
|
|
self.assertEqual(len(all_providers), 3)
|
|
self.assertIn(provider1, all_providers)
|
|
self.assertIn(provider2, all_providers)
|
|
self.assertIn(provider3, all_providers)
|
|
|
|
def test_traversal_overriding_cycled(self):
|
|
provider1 = providers.Provider()
|
|
|
|
provider2 = providers.Provider()
|
|
provider2.override(provider1)
|
|
|
|
provider3 = providers.Provider()
|
|
provider3.override(provider2)
|
|
|
|
provider1.override(provider3) # Cycle: provider3 -> provider2 -> provider1 -> provider3
|
|
|
|
provider = providers.Provider()
|
|
provider.override(provider3)
|
|
|
|
all_providers = list(provider.traverse())
|
|
|
|
self.assertEqual(len(all_providers), 3)
|
|
self.assertIn(provider1, all_providers)
|
|
self.assertIn(provider2, all_providers)
|
|
self.assertIn(provider3, all_providers)
|
|
|
|
|
|
class ObjectTests(unittest.TestCase):
|
|
|
|
def test_traversal(self):
|
|
provider = providers.Object('string')
|
|
all_providers = list(provider.traverse())
|
|
self.assertEqual(len(all_providers), 0)
|
|
|
|
def test_traversal_provider(self):
|
|
another_provider = providers.Provider()
|
|
provider = providers.Object(another_provider)
|
|
|
|
all_providers = list(provider.traverse())
|
|
|
|
self.assertEqual(len(all_providers), 1)
|
|
self.assertIn(another_provider, 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())
|
|
|
|
self.assertEqual(len(all_providers), 3)
|
|
self.assertIn(another_provider_1, all_providers)
|
|
self.assertIn(another_provider_2, all_providers)
|
|
self.assertIn(another_provider_3, 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())
|
|
|
|
self.assertEqual(len(all_providers), 1)
|
|
self.assertIn(another_provider, 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())
|
|
|
|
self.assertEqual(len(all_providers), 3)
|
|
self.assertIn(provider1, all_providers)
|
|
self.assertIn(provider2, all_providers)
|
|
self.assertIn(provider3, all_providers)
|
|
|
|
|
|
class DependencyTests(unittest.TestCase):
|
|
|
|
def test_traversal(self):
|
|
provider = providers.Dependency()
|
|
all_providers = list(provider.traverse())
|
|
self.assertEqual(len(all_providers), 0)
|
|
|
|
def test_traversal_default(self):
|
|
another_provider = providers.Provider()
|
|
provider = providers.Dependency(default=another_provider)
|
|
|
|
all_providers = list(provider.traverse())
|
|
|
|
self.assertEqual(len(all_providers), 1)
|
|
self.assertIn(another_provider, 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())
|
|
|
|
self.assertEqual(len(all_providers), 2)
|
|
self.assertIn(provider1, all_providers)
|
|
self.assertIn(provider2, all_providers)
|
|
|
|
|
|
class DependenciesContainerTests(unittest.TestCase):
|
|
|
|
def test_traversal(self):
|
|
provider = providers.DependenciesContainer()
|
|
all_providers = list(provider.traverse())
|
|
self.assertEqual(len(all_providers), 0)
|
|
|
|
def test_traversal_default(self):
|
|
another_provider = providers.Provider()
|
|
provider = providers.DependenciesContainer(default=another_provider)
|
|
|
|
all_providers = list(provider.traverse())
|
|
|
|
self.assertEqual(len(all_providers), 1)
|
|
self.assertIn(another_provider, all_providers)
|
|
|
|
def test_traversal_fluent_interface(self):
|
|
provider = providers.DependenciesContainer()
|
|
provider1 = provider.provider1
|
|
provider2 = provider.provider2
|
|
|
|
all_providers = list(provider.traverse())
|
|
|
|
self.assertEqual(len(all_providers), 2)
|
|
self.assertIn(provider1, all_providers)
|
|
self.assertIn(provider2, 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())
|
|
|
|
self.assertEqual(len(all_providers), 5)
|
|
self.assertIn(provider1, all_providers)
|
|
self.assertIn(provider2, all_providers)
|
|
self.assertIn(provider3, all_providers)
|
|
self.assertIn(provider.provider1, all_providers)
|
|
self.assertIn(provider.provider2, all_providers)
|
|
|