mirror of
				https://github.com/graphql-python/graphene.git
				synced 2025-10-31 07:57:26 +03:00 
			
		
		
		
	Improved testing coverage. Removed unused logic
This commit is contained in:
		
							parent
							
								
									55e2027dbb
								
							
						
					
					
						commit
						2d55d89047
					
				|  | @ -55,15 +55,8 @@ class Options(object): | ||||||
|         else: |         else: | ||||||
|             self.proxy = False |             self.proxy = False | ||||||
| 
 | 
 | ||||||
|         if self.interfaces != [] and self.interface: |  | ||||||
|             raise Exception("A interface cannot inherit from interfaces") |  | ||||||
| 
 |  | ||||||
|         del self.meta |         del self.meta | ||||||
| 
 | 
 | ||||||
|     @cached_property |  | ||||||
|     def object(self): |  | ||||||
|         return namedtuple(self.type_name, self.fields_map.keys()) |  | ||||||
| 
 |  | ||||||
|     def add_field(self, field): |     def add_field(self, field): | ||||||
|         self.local_fields.append(field) |         self.local_fields.append(field) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -132,8 +132,6 @@ class BaseObjectType(object): | ||||||
|     def __new__(cls, *args, **kwargs): |     def __new__(cls, *args, **kwargs): | ||||||
|         if cls._meta.is_interface: |         if cls._meta.is_interface: | ||||||
|             raise Exception("An interface cannot be initialized") |             raise Exception("An interface cannot be initialized") | ||||||
|         if not args and not kwargs: |  | ||||||
|             return None |  | ||||||
|         return super(BaseObjectType, cls).__new__(cls) |         return super(BaseObjectType, cls).__new__(cls) | ||||||
| 
 | 
 | ||||||
|     def __init__(self, *args, **kwargs): |     def __init__(self, *args, **kwargs): | ||||||
|  |  | ||||||
|  | @ -24,10 +24,10 @@ class ProxySnakeDict(collections.MutableMapping): | ||||||
|     def __len__(self): |     def __len__(self): | ||||||
|         return len(self.data) |         return len(self.data) | ||||||
| 
 | 
 | ||||||
|     def __delitem__(self): |     def __delitem__(self, item): | ||||||
|         raise TypeError('ProxySnakeDict does not support item deletion') |         raise TypeError('ProxySnakeDict does not support item deletion') | ||||||
| 
 | 
 | ||||||
|     def __setitem__(self): |     def __setitem__(self, item, value): | ||||||
|         raise TypeError('ProxySnakeDict does not support item assignment') |         raise TypeError('ProxySnakeDict does not support item assignment') | ||||||
| 
 | 
 | ||||||
|     def __getitem__(self, key): |     def __getitem__(self, key): | ||||||
|  | @ -59,5 +59,12 @@ class ProxySnakeDict(collections.MutableMapping): | ||||||
|         for k in self.iterkeys(): |         for k in self.iterkeys(): | ||||||
|             yield k, self[k] |             yield k, self[k] | ||||||
| 
 | 
 | ||||||
|  |     def to_data_dict(self): | ||||||
|  |         return self.data.__class__(self.iteritems()) | ||||||
|  | 
 | ||||||
|  |     def __eq__(self, other): | ||||||
|  |         return self.to_data_dict() == other.to_data_dict() | ||||||
|  | 
 | ||||||
|     def __repr__(self): |     def __repr__(self): | ||||||
|         return dict(self.iteritems()).__repr__() |         data_repr = self.to_data_dict().__repr__() | ||||||
|  |         return '<ProxySnakeDict {}>'.format(data_repr) | ||||||
|  |  | ||||||
|  | @ -34,6 +34,18 @@ class Human(Character): | ||||||
|     class Meta: |     class Meta: | ||||||
|         type_name = 'core_Human' |         type_name = 'core_Human' | ||||||
| 
 | 
 | ||||||
|  |     @property | ||||||
|  |     def readonly_prop(self): | ||||||
|  |         return 'readonly' | ||||||
|  | 
 | ||||||
|  |     @property | ||||||
|  |     def write_prop(self): | ||||||
|  |         return self._write_prop | ||||||
|  | 
 | ||||||
|  |     @write_prop.setter | ||||||
|  |     def write_prop(self, value): | ||||||
|  |         self._write_prop = value | ||||||
|  | 
 | ||||||
| schema = Schema() | schema = Schema() | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -44,8 +56,12 @@ def test_interface(): | ||||||
|     assert Character._meta.type_name == 'core_Character' |     assert Character._meta.type_name == 'core_Character' | ||||||
|     assert object_type.description == 'Character description' |     assert object_type.description == 'Character description' | ||||||
|     assert list(object_type.get_fields().keys()) == ['name'] |     assert list(object_type.get_fields().keys()) == ['name'] | ||||||
|     # assert object_type.get_fields() == { | 
 | ||||||
|     #     'name': Character._meta.fields_map['name'].internal_field(schema)} | 
 | ||||||
|  | def test_interface_cannot_initialize(): | ||||||
|  |     with raises(Exception) as excinfo: | ||||||
|  |         c = Character() | ||||||
|  |     assert 'An interface cannot be initialized' == str(excinfo.value) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def test_interface_resolve_type(): | def test_interface_resolve_type(): | ||||||
|  | @ -66,6 +82,27 @@ def test_object_type(): | ||||||
|     assert Human._meta.fields_map['name'].object_type == Human |     assert Human._meta.fields_map['name'].object_type == Human | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | def test_object_type_container(): | ||||||
|  |     h = Human(name='My name') | ||||||
|  |     assert h.name == 'My name' | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def test_object_type_set_properties(): | ||||||
|  |     h = Human(readonly_prop='custom', write_prop='custom') | ||||||
|  |     assert h.readonly_prop == 'readonly' | ||||||
|  |     assert h.write_prop == 'custom' | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def test_object_type_container_invalid_kwarg(): | ||||||
|  |     with raises(TypeError): | ||||||
|  |         Human(invalid='My name') | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def test_object_type_container_too_many_args(): | ||||||
|  |     with raises(IndexError): | ||||||
|  |         Human('Peter', 'No friends :(', None) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| def test_field_clashes(): | def test_field_clashes(): | ||||||
|     with raises(Exception) as excinfo: |     with raises(Exception) as excinfo: | ||||||
|         class Droid(Character): |         class Droid(Character): | ||||||
|  |  | ||||||
							
								
								
									
										13
									
								
								tests/utils/test_misc.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								tests/utils/test_misc.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,13 @@ | ||||||
|  | import collections | ||||||
|  | from graphql.core.type import GraphQLEnumType | ||||||
|  | from graphene.utils.misc import enum_to_graphql_enum | ||||||
|  | 
 | ||||||
|  | item = collections.namedtuple('type', 'name value') | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class MyCustomEnum(list): | ||||||
|  |     __name__ = 'MyName' | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def test_enum_to_graphql_enum(): | ||||||
|  |     assert isinstance(enum_to_graphql_enum(MyCustomEnum([item('k', 'v')])), GraphQLEnumType) | ||||||
|  | @ -1,3 +1,4 @@ | ||||||
|  | from py.test import raises | ||||||
| from graphene.utils import ProxySnakeDict | from graphene.utils import ProxySnakeDict | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -8,6 +9,7 @@ def test_proxy_snake_dict(): | ||||||
|     assert 'two' in p |     assert 'two' in p | ||||||
|     assert 'threeOrFor' in p |     assert 'threeOrFor' in p | ||||||
|     assert 'none' in p |     assert 'none' in p | ||||||
|  |     assert len(p) == len(my_data) | ||||||
|     assert p['none'] is None |     assert p['none'] is None | ||||||
|     assert p.get('none') is None |     assert p.get('none') is None | ||||||
|     assert p.get('none_existent') is None |     assert p.get('none_existent') is None | ||||||
|  | @ -15,6 +17,11 @@ def test_proxy_snake_dict(): | ||||||
|     assert p.get('three_or_for') == 3 |     assert p.get('three_or_for') == 3 | ||||||
|     assert 'inside' in p |     assert 'inside' in p | ||||||
|     assert 'other_camel_case' in p['inside'] |     assert 'other_camel_case' in p['inside'] | ||||||
|  |     assert sorted(p.items()) == sorted(list([('inside', ProxySnakeDict({'other_camel_case': 3})), | ||||||
|  |                                              ('none', None), | ||||||
|  |                                              ('three_or_for', 3), | ||||||
|  |                                              ('two', 2), | ||||||
|  |                                              ('one', 1)])) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def test_proxy_snake_dict_as_kwargs(): | def test_proxy_snake_dict_as_kwargs(): | ||||||
|  | @ -24,3 +31,22 @@ def test_proxy_snake_dict_as_kwargs(): | ||||||
|     def func(**kwargs): |     def func(**kwargs): | ||||||
|         return kwargs.get('my_data') |         return kwargs.get('my_data') | ||||||
|     assert func(**p) == 1 |     assert func(**p) == 1 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def test_proxy_snake_dict_repr(): | ||||||
|  |     my_data = {'myData': 1} | ||||||
|  |     p = ProxySnakeDict(my_data) | ||||||
|  | 
 | ||||||
|  |     assert repr(p) == "<ProxySnakeDict {'my_data': 1}>" | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def test_proxy_snake_dict_set(): | ||||||
|  |     p = ProxySnakeDict({}) | ||||||
|  |     with raises(TypeError): | ||||||
|  |         p['a'] = 2 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def test_proxy_snake_dict_delete(): | ||||||
|  |     p = ProxySnakeDict({}) | ||||||
|  |     with raises(TypeError): | ||||||
|  |         del p['a'] | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user