From d36e01bf3eeacfd91a9c583b8a7eaae56b18eba5 Mon Sep 17 00:00:00 2001 From: Roman Mogilatov Date: Mon, 16 Mar 2015 01:10:43 +0200 Subject: [PATCH] Add tests for providers.ExternalDependency & refactoring --- objects/providers.py | 15 +++++---------- tests/test_providers.py | 17 +++++++++++++++++ 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/objects/providers.py b/objects/providers.py index 1109e0a2..3d0a7b05 100644 --- a/objects/providers.py +++ b/objects/providers.py @@ -184,31 +184,26 @@ class ExternalDependency(Provider): def __init__(self, instance_of): """Initializer.""" - if not isinstance(instance_of, Iterable): - instance_of = (instance_of,) self.instance_of = instance_of self.dependency = None super(ExternalDependency, self).__init__() def satisfy(self, provider): """Satisfy an external dependency.""" - self.dependency = provider + self.dependency = ensure_is_provider(provider) def __call__(self, *args, **kwargs): """Return provided instance.""" if not self.dependency: 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) - for possible_type in self.instance_of)) - - if not is_instance: - raise Error('{} is not an '.format(result) + + if not isinstance(instance, self.instance_of): + raise Error('{} is not an '.format(instance) + 'instance of {}'.format(self.instance_of)) - return result + return instance class _StaticProvider(Provider): diff --git a/tests/test_providers.py b/tests/test_providers.py index d5d703af..012ac0c9 100644 --- a/tests/test_providers.py +++ b/tests/test_providers.py @@ -376,6 +376,23 @@ class ExternalDependencyTests(unittest.TestCase): """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):