mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2024-11-22 09:36:48 +03:00
Add tests for providers.ExternalDependency & refactoring
This commit is contained in:
parent
5ef157d252
commit
d36e01bf3e
|
@ -184,31 +184,26 @@ class ExternalDependency(Provider):
|
||||||
|
|
||||||
def __init__(self, instance_of):
|
def __init__(self, instance_of):
|
||||||
"""Initializer."""
|
"""Initializer."""
|
||||||
if not isinstance(instance_of, Iterable):
|
|
||||||
instance_of = (instance_of,)
|
|
||||||
self.instance_of = instance_of
|
self.instance_of = instance_of
|
||||||
self.dependency = None
|
self.dependency = None
|
||||||
super(ExternalDependency, self).__init__()
|
super(ExternalDependency, self).__init__()
|
||||||
|
|
||||||
def satisfy(self, provider):
|
def satisfy(self, provider):
|
||||||
"""Satisfy an external dependency."""
|
"""Satisfy an external dependency."""
|
||||||
self.dependency = provider
|
self.dependency = ensure_is_provider(provider)
|
||||||
|
|
||||||
def __call__(self, *args, **kwargs):
|
def __call__(self, *args, **kwargs):
|
||||||
"""Return provided instance."""
|
"""Return provided instance."""
|
||||||
if not self.dependency:
|
if not self.dependency:
|
||||||
raise Error('Dependency is not satisfied')
|
raise Error('Dependency is not satisfied')
|
||||||
|
|
||||||
result = self.dependency.__call__(*args, **kwargs)
|
instance = self.dependency.__call__(*args, **kwargs)
|
||||||
|
|
||||||
is_instance = any((isinstance(result, possible_type)
|
if not isinstance(instance, self.instance_of):
|
||||||
for possible_type in self.instance_of))
|
raise Error('{} is not an '.format(instance) +
|
||||||
|
|
||||||
if not is_instance:
|
|
||||||
raise Error('{} is not an '.format(result) +
|
|
||||||
'instance of {}'.format(self.instance_of))
|
'instance of {}'.format(self.instance_of))
|
||||||
|
|
||||||
return result
|
return instance
|
||||||
|
|
||||||
|
|
||||||
class _StaticProvider(Provider):
|
class _StaticProvider(Provider):
|
||||||
|
|
|
@ -376,6 +376,23 @@ class ExternalDependencyTests(unittest.TestCase):
|
||||||
|
|
||||||
"""ExternalDependency test cases."""
|
"""ExternalDependency test cases."""
|
||||||
|
|
||||||
|
def test_call_satisfied(self):
|
||||||
|
"""Test call of satisfied external dependency."""
|
||||||
|
provider = ExternalDependency(instance_of=object)
|
||||||
|
provider.satisfy(NewInstance(object))
|
||||||
|
self.assertIsInstance(provider(), object)
|
||||||
|
|
||||||
|
def test_call_satisfied_but_not_instance_of(self):
|
||||||
|
"""Test call of satisfied external dependency, but not instance of."""
|
||||||
|
provider = ExternalDependency(instance_of=list)
|
||||||
|
provider.satisfy(NewInstance(dict))
|
||||||
|
self.assertRaises(Error, provider)
|
||||||
|
|
||||||
|
def test_call_not_satisfied(self):
|
||||||
|
"""Test call of not satisfied external dependency."""
|
||||||
|
provider = ExternalDependency(instance_of=object)
|
||||||
|
self.assertRaises(Error, provider)
|
||||||
|
|
||||||
|
|
||||||
class StaticProvidersTests(unittest.TestCase):
|
class StaticProvidersTests(unittest.TestCase):
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user