mirror of
				https://github.com/graphql-python/graphene-django.git
				synced 2025-11-01 00:17:38 +03:00 
			
		
		
		
	
						commit
						fd3faf04e5
					
				|  | @ -116,7 +116,7 @@ class DjangoConnectionField(ConnectionField): | ||||||
|             if last: |             if last: | ||||||
|                 assert last <= max_limit, ( |                 assert last <= max_limit, ( | ||||||
|                     'Requesting {} records on the `{}` connection exceeds the `last` limit of {} records.' |                     'Requesting {} records on the `{}` connection exceeds the `last` limit of {} records.' | ||||||
|                 ).format(first, info.field_name, max_limit) |                 ).format(last, info.field_name, max_limit) | ||||||
|                 args['last'] = min(last, max_limit) |                 args['last'] = min(last, max_limit) | ||||||
| 
 | 
 | ||||||
|         iterable = resolver(root, info, **args) |         iterable = resolver(root, info, **args) | ||||||
|  |  | ||||||
|  | @ -52,6 +52,19 @@ def test_has_input_fields(): | ||||||
|     assert 'model' in MyMutation.Input._meta.fields |     assert 'model' in MyMutation.Input._meta.fields | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | def test_exclude_fields(): | ||||||
|  |     class MyMutation(SerializerMutation): | ||||||
|  |         class Meta: | ||||||
|  |             serializer_class = MyModelSerializer | ||||||
|  |             exclude_fields = ['created'] | ||||||
|  | 
 | ||||||
|  |     assert 'cool_name' in MyMutation._meta.fields | ||||||
|  |     assert 'created' not in MyMutation._meta.fields | ||||||
|  |     assert 'errors' in MyMutation._meta.fields | ||||||
|  |     assert 'cool_name' in MyMutation.Input._meta.fields | ||||||
|  |     assert 'created' not in MyMutation.Input._meta.fields | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| def test_nested_model(): | def test_nested_model(): | ||||||
| 
 | 
 | ||||||
|     class MyFakeModelGrapheneType(DjangoObjectType): |     class MyFakeModelGrapheneType(DjangoObjectType): | ||||||
|  |  | ||||||
|  | @ -22,6 +22,9 @@ class Film(models.Model): | ||||||
|     reporters = models.ManyToManyField('Reporter', |     reporters = models.ManyToManyField('Reporter', | ||||||
|                                        related_name='films') |                                        related_name='films') | ||||||
| 
 | 
 | ||||||
|  | class DoeReporterManager(models.Manager): | ||||||
|  |     def get_queryset(self): | ||||||
|  |         return super(DoeReporterManager, self).get_queryset().filter(last_name="Doe") | ||||||
| 
 | 
 | ||||||
| class Reporter(models.Model): | class Reporter(models.Model): | ||||||
|     first_name = models.CharField(max_length=30) |     first_name = models.CharField(max_length=30) | ||||||
|  | @ -29,6 +32,8 @@ class Reporter(models.Model): | ||||||
|     email = models.EmailField() |     email = models.EmailField() | ||||||
|     pets = models.ManyToManyField('self') |     pets = models.ManyToManyField('self') | ||||||
|     a_choice = models.CharField(max_length=30, choices=CHOICES) |     a_choice = models.CharField(max_length=30, choices=CHOICES) | ||||||
|  |     objects = models.Manager() | ||||||
|  |     doe_objects = DoeReporterManager() | ||||||
| 
 | 
 | ||||||
|     def __str__(self):              # __unicode__ on Python 2 |     def __str__(self):              # __unicode__ on Python 2 | ||||||
|         return "%s %s" % (self.first_name, self.last_name) |         return "%s %s" % (self.first_name, self.last_name) | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| from django.core.exceptions import ValidationError | from django.core.exceptions import ValidationError | ||||||
| from py.test import raises | from py.test import raises | ||||||
| 
 | 
 | ||||||
| from ..forms import GlobalIDFormField | from ..forms import GlobalIDFormField,GlobalIDMultipleChoiceField | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| # 'TXlUeXBlOmFiYw==' -> 'MyType', 'abc' | # 'TXlUeXBlOmFiYw==' -> 'MyType', 'abc' | ||||||
|  | @ -18,6 +18,17 @@ def test_global_id_invalid(): | ||||||
|         field.clean('badvalue') |         field.clean('badvalue') | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | def test_global_id_multiple_valid(): | ||||||
|  |     field = GlobalIDMultipleChoiceField() | ||||||
|  |     field.clean(['TXlUeXBlOmFiYw==', 'TXlUeXBlOmFiYw==']) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def test_global_id_multiple_invalid(): | ||||||
|  |     field = GlobalIDMultipleChoiceField() | ||||||
|  |     with raises(ValidationError): | ||||||
|  |         field.clean(['badvalue', 'another bad avue']) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| def test_global_id_none(): | def test_global_id_none(): | ||||||
|     field = GlobalIDFormField() |     field = GlobalIDFormField() | ||||||
|     with raises(ValidationError): |     with raises(ValidationError): | ||||||
|  |  | ||||||
|  | @ -606,6 +606,53 @@ def test_should_error_if_first_is_greater_than_max(): | ||||||
|     graphene_settings.RELAY_CONNECTION_ENFORCE_FIRST_OR_LAST = False |     graphene_settings.RELAY_CONNECTION_ENFORCE_FIRST_OR_LAST = False | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | def test_should_error_if_last_is_greater_than_max(): | ||||||
|  |     graphene_settings.RELAY_CONNECTION_MAX_LIMIT = 100 | ||||||
|  | 
 | ||||||
|  |     class ReporterType(DjangoObjectType): | ||||||
|  | 
 | ||||||
|  |         class Meta: | ||||||
|  |             model = Reporter | ||||||
|  |             interfaces = (Node, ) | ||||||
|  | 
 | ||||||
|  |     class Query(graphene.ObjectType): | ||||||
|  |         all_reporters = DjangoConnectionField(ReporterType) | ||||||
|  | 
 | ||||||
|  |     r = Reporter.objects.create( | ||||||
|  |         first_name='John', | ||||||
|  |         last_name='Doe', | ||||||
|  |         email='johndoe@example.com', | ||||||
|  |         a_choice=1 | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|  |     schema = graphene.Schema(query=Query) | ||||||
|  |     query = ''' | ||||||
|  |         query NodeFilteringQuery { | ||||||
|  |             allReporters(last: 101) { | ||||||
|  |                 edges { | ||||||
|  |                     node { | ||||||
|  |                         id | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     ''' | ||||||
|  | 
 | ||||||
|  |     expected = { | ||||||
|  |         'allReporters': None | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     result = schema.execute(query) | ||||||
|  |     assert len(result.errors) == 1 | ||||||
|  |     assert str(result.errors[0]) == ( | ||||||
|  |         'Requesting 101 records on the `allReporters` connection ' | ||||||
|  |         'exceeds the `last` limit of 100 records.' | ||||||
|  |     ) | ||||||
|  |     assert result.data == expected | ||||||
|  | 
 | ||||||
|  |     graphene_settings.RELAY_CONNECTION_ENFORCE_FIRST_OR_LAST = False | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| def test_should_query_promise_connectionfields(): | def test_should_query_promise_connectionfields(): | ||||||
|     from promise import Promise |     from promise import Promise | ||||||
| 
 | 
 | ||||||
|  | @ -648,6 +695,109 @@ def test_should_query_promise_connectionfields(): | ||||||
|     assert not result.errors |     assert not result.errors | ||||||
|     assert result.data == expected |     assert result.data == expected | ||||||
| 
 | 
 | ||||||
|  | def test_should_query_connectionfields_with_last(): | ||||||
|  | 
 | ||||||
|  |     r = Reporter.objects.create( | ||||||
|  |         first_name='John', | ||||||
|  |         last_name='Doe', | ||||||
|  |         email='johndoe@example.com', | ||||||
|  |         a_choice=1 | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|  |     class ReporterType(DjangoObjectType): | ||||||
|  | 
 | ||||||
|  |         class Meta: | ||||||
|  |             model = Reporter | ||||||
|  |             interfaces = (Node, ) | ||||||
|  | 
 | ||||||
|  |     class Query(graphene.ObjectType): | ||||||
|  |         all_reporters = DjangoConnectionField(ReporterType) | ||||||
|  | 
 | ||||||
|  |         def resolve_all_reporters(self, info, **args): | ||||||
|  |             return Reporter.objects.all() | ||||||
|  |      | ||||||
|  |     schema = graphene.Schema(query=Query) | ||||||
|  |     query = ''' | ||||||
|  |         query ReporterLastQuery { | ||||||
|  |             allReporters(last: 1) { | ||||||
|  |                 edges { | ||||||
|  |                     node { | ||||||
|  |                         id | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     ''' | ||||||
|  | 
 | ||||||
|  |     expected = { | ||||||
|  |         'allReporters': { | ||||||
|  |             'edges': [{ | ||||||
|  |                 'node': { | ||||||
|  |                     'id': 'UmVwb3J0ZXJUeXBlOjE=' | ||||||
|  |                 } | ||||||
|  |             }] | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     result = schema.execute(query) | ||||||
|  |     assert not result.errors | ||||||
|  |     assert result.data == expected | ||||||
|  | 
 | ||||||
|  | def test_should_query_connectionfields_with_manager(): | ||||||
|  | 
 | ||||||
|  |     r = Reporter.objects.create( | ||||||
|  |         first_name='John', | ||||||
|  |         last_name='Doe', | ||||||
|  |         email='johndoe@example.com', | ||||||
|  |         a_choice=1 | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|  |     r = Reporter.objects.create( | ||||||
|  |         first_name='John', | ||||||
|  |         last_name='NotDoe', | ||||||
|  |         email='johndoe@example.com', | ||||||
|  |         a_choice=1 | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|  |     class ReporterType(DjangoObjectType): | ||||||
|  | 
 | ||||||
|  |         class Meta: | ||||||
|  |             model = Reporter | ||||||
|  |             interfaces = (Node, ) | ||||||
|  | 
 | ||||||
|  |     class Query(graphene.ObjectType): | ||||||
|  |         all_reporters = DjangoConnectionField(ReporterType, on='doe_objects') | ||||||
|  | 
 | ||||||
|  |         def resolve_all_reporters(self, info, **args): | ||||||
|  |             return Reporter.objects.all() | ||||||
|  |      | ||||||
|  |     schema = graphene.Schema(query=Query) | ||||||
|  |     query = ''' | ||||||
|  |         query ReporterLastQuery { | ||||||
|  |             allReporters(first: 2) { | ||||||
|  |                 edges { | ||||||
|  |                     node { | ||||||
|  |                         id | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     ''' | ||||||
|  | 
 | ||||||
|  |     expected = { | ||||||
|  |         'allReporters': { | ||||||
|  |             'edges': [{ | ||||||
|  |                 'node': { | ||||||
|  |                     'id': 'UmVwb3J0ZXJUeXBlOjE=' | ||||||
|  |                 } | ||||||
|  |             }] | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     result = schema.execute(query) | ||||||
|  |     assert not result.errors | ||||||
|  |     assert result.data == expected | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| def test_should_query_dataloader_fields(): | def test_should_query_dataloader_fields(): | ||||||
|     from promise import Promise |     from promise import Promise | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user