mirror of
				https://github.com/ets-labs/python-dependency-injector.git
				synced 2025-10-31 07:57:43 +03:00 
			
		
		
		
	Add tests for providers.Config & refactoring of it
This commit is contained in:
		
							parent
							
								
									1736a6e008
								
							
						
					
					
						commit
						47d33e524c
					
				|  | @ -303,23 +303,27 @@ class Config(Provider): | |||
| 
 | ||||
|     def __getattr__(self, item): | ||||
|         """Return instance of deferred config.""" | ||||
|         return _DeferredConfig(parents=(item,), | ||||
|                                root_config=self) | ||||
|         return _ChildConfig(parents=(item,), root_config=self) | ||||
| 
 | ||||
|     def __call__(self, paths=None): | ||||
|         """Return provided instance.""" | ||||
|         value = self.value | ||||
|         if paths: | ||||
|             for path in paths: | ||||
|                 value = value[path] | ||||
|             return value | ||||
|                 try: | ||||
|                     value = value[path] | ||||
|                 except KeyError: | ||||
|                     raise Error('Config key ' | ||||
|                                 '"{}" is undefined'.format('.'.join(paths))) | ||||
|         return value | ||||
| 
 | ||||
| 
 | ||||
| class _DeferredConfig(Provider): | ||||
| class _ChildConfig(Provider): | ||||
| 
 | ||||
|     """Deferred config provider. | ||||
|     """Child config provider. | ||||
| 
 | ||||
|     Deferred config providers provide an value from the root config object. | ||||
|     Child config provide an value from the root config object according to | ||||
|     the current path in the config tree. | ||||
|     """ | ||||
| 
 | ||||
|     __slots__ = ('parents', 'root_config') | ||||
|  | @ -328,12 +332,12 @@ class _DeferredConfig(Provider): | |||
|         """Initializer.""" | ||||
|         self.parents = parents | ||||
|         self.root_config = root_config | ||||
|         super(_DeferredConfig, self).__init__() | ||||
|         super(_ChildConfig, self).__init__() | ||||
| 
 | ||||
|     def __getattr__(self, item): | ||||
|         """Return instance of deferred config.""" | ||||
|         return _DeferredConfig(parents=self.parents + (item,), | ||||
|                                root_config=self.root_config) | ||||
|         return _ChildConfig(parents=self.parents + (item,), | ||||
|                             root_config=self.root_config) | ||||
| 
 | ||||
|     def __call__(self, *args, **kwargs): | ||||
|         """Return provided instance.""" | ||||
|  |  | |||
|  | @ -480,7 +480,7 @@ class CallableTests(unittest.TestCase): | |||
| 
 | ||||
|     def test_is_provider(self): | ||||
|         """Test `is_provider` check.""" | ||||
|         self.assertTrue(is_provider(Callable(map))) | ||||
|         self.assertTrue(is_provider(self.provider)) | ||||
| 
 | ||||
|     def test_call(self): | ||||
|         """Test provider call.""" | ||||
|  | @ -517,4 +517,59 @@ class ConfigTests(unittest.TestCase): | |||
| 
 | ||||
|     def setUp(self): | ||||
|         """Set test cases environment up.""" | ||||
|         self.initial_data = dict(key='value', | ||||
|                                  category=dict(setting='setting_value')) | ||||
|         self.provider = Config(self.initial_data) | ||||
| 
 | ||||
|     def test_is_provider(self): | ||||
|         """Test `is_provider` check.""" | ||||
|         self.assertTrue(is_provider(self.provider)) | ||||
| 
 | ||||
|     def test_init_without_initial_value(self): | ||||
|         """Test provider's creation with no initial value.""" | ||||
|         self.assertEqual(Config()(), dict()) | ||||
| 
 | ||||
|     def test_call(self): | ||||
|         """Test returning of config value.""" | ||||
|         self.assertEqual(self.provider(), self.initial_data) | ||||
| 
 | ||||
|     def test_update_from(self): | ||||
|         """Test update of config value.""" | ||||
|         self.assertEqual(self.provider(), self.initial_data) | ||||
| 
 | ||||
|         self.initial_data['key'] = 'other_value' | ||||
|         self.provider.update_from(self.initial_data) | ||||
|         self.assertEqual(self.provider(), self.initial_data) | ||||
| 
 | ||||
|     def test_call_child(self): | ||||
|         """Test returning of child config values.""" | ||||
|         category = self.provider.category | ||||
|         category_setting = self.provider.category.setting | ||||
| 
 | ||||
|         self.assertTrue(is_provider(category)) | ||||
|         self.assertTrue(is_provider(category_setting)) | ||||
| 
 | ||||
|         self.assertEqual(category(), self.initial_data['category']) | ||||
|         self.assertEqual(category_setting(), | ||||
|                          self.initial_data['category']['setting']) | ||||
| 
 | ||||
|     def test_call_deferred_child_and_update_from(self): | ||||
|         """Test returning of deferred child config values.""" | ||||
|         self.provider = Config() | ||||
|         category = self.provider.category | ||||
|         category_setting = self.provider.category.setting | ||||
| 
 | ||||
|         self.assertTrue(is_provider(category)) | ||||
|         self.assertTrue(is_provider(category_setting)) | ||||
| 
 | ||||
|         self.provider.update_from(self.initial_data) | ||||
| 
 | ||||
|         self.assertEqual(category(), self.initial_data['category']) | ||||
|         self.assertEqual(category_setting(), | ||||
|                          self.initial_data['category']['setting']) | ||||
| 
 | ||||
|     def test_call_deferred_child_with_empty_value(self): | ||||
|         """Test returning of deferred child config values.""" | ||||
|         self.provider = Config() | ||||
|         category_setting = self.provider.category.setting | ||||
|         self.assertRaises(Error, category_setting) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user