mirror of
				https://github.com/graphql-python/graphene-django.git
				synced 2025-11-01 00:17:38 +03:00 
			
		
		
		
	Update mutation.py (#811)
* Update mutation.py * Add tests Co-authored-by: Jonathan Kim <jkimbo@gmail.com>
This commit is contained in:
		
							parent
							
								
									a12fc9299a
								
							
						
					
					
						commit
						235096362f
					
				|  | @ -47,7 +47,7 @@ class BaseDjangoFormMutation(ClientIDMutation): | ||||||
|         else: |         else: | ||||||
|             errors = ErrorType.from_errors(form.errors) |             errors = ErrorType.from_errors(form.errors) | ||||||
| 
 | 
 | ||||||
|             return cls(errors=errors) |             return cls(errors=errors, **form.data) | ||||||
| 
 | 
 | ||||||
|     @classmethod |     @classmethod | ||||||
|     def get_form(cls, root, info, **input): |     def get_form(cls, root, info, **input): | ||||||
|  | @ -100,7 +100,7 @@ class DjangoFormMutation(BaseDjangoFormMutation): | ||||||
|     @classmethod |     @classmethod | ||||||
|     def perform_mutate(cls, form, info): |     def perform_mutate(cls, form, info): | ||||||
|         form.save() |         form.save() | ||||||
|         return cls(errors=[]) |         return cls(errors=[], **form.cleaned_data) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class DjangoModelDjangoFormMutationOptions(DjangoFormMutationOptions): | class DjangoModelDjangoFormMutationOptions(DjangoFormMutationOptions): | ||||||
|  |  | ||||||
|  | @ -1,5 +1,6 @@ | ||||||
| from django import forms | from django import forms | ||||||
| from django.test import TestCase | from django.test import TestCase | ||||||
|  | from django.core.exceptions import ValidationError | ||||||
| from py.test import raises | from py.test import raises | ||||||
| 
 | 
 | ||||||
| from graphene import ObjectType, Schema, String, Field | from graphene import ObjectType, Schema, String, Field | ||||||
|  | @ -13,6 +14,15 @@ from ..mutation import DjangoFormMutation, DjangoModelFormMutation | ||||||
| class MyForm(forms.Form): | class MyForm(forms.Form): | ||||||
|     text = forms.CharField() |     text = forms.CharField() | ||||||
| 
 | 
 | ||||||
|  |     def clean_text(self): | ||||||
|  |         text = self.cleaned_data["text"] | ||||||
|  |         if text == "INVALID_INPUT": | ||||||
|  |             raise ValidationError("Invalid input") | ||||||
|  |         return text | ||||||
|  | 
 | ||||||
|  |     def save(self): | ||||||
|  |         pass | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| class PetForm(forms.ModelForm): | class PetForm(forms.ModelForm): | ||||||
|     class Meta: |     class Meta: | ||||||
|  | @ -83,6 +93,64 @@ class MockQuery(ObjectType): | ||||||
|     a = String() |     a = String() | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | class FormMutationTests(TestCase): | ||||||
|  |     def test_form_invalid_form(self): | ||||||
|  |         class MyMutation(DjangoFormMutation): | ||||||
|  |             class Meta: | ||||||
|  |                 form_class = MyForm | ||||||
|  | 
 | ||||||
|  |         class Mutation(ObjectType): | ||||||
|  |             my_mutation = MyMutation.Field() | ||||||
|  | 
 | ||||||
|  |         schema = Schema(query=MockQuery, mutation=Mutation) | ||||||
|  | 
 | ||||||
|  |         result = schema.execute( | ||||||
|  |             """ mutation MyMutation { | ||||||
|  |                 myMutation(input: { text: "INVALID_INPUT" }) { | ||||||
|  |                     errors { | ||||||
|  |                         field | ||||||
|  |                         messages | ||||||
|  |                     } | ||||||
|  |                     text | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             """ | ||||||
|  |         ) | ||||||
|  | 
 | ||||||
|  |         self.assertIs(result.errors, None) | ||||||
|  |         self.assertEqual( | ||||||
|  |             result.data["myMutation"]["errors"], | ||||||
|  |             [{"field": "text", "messages": ["Invalid input"]}], | ||||||
|  |         ) | ||||||
|  | 
 | ||||||
|  |     def test_form_valid_input(self): | ||||||
|  |         class MyMutation(DjangoFormMutation): | ||||||
|  |             class Meta: | ||||||
|  |                 form_class = MyForm | ||||||
|  | 
 | ||||||
|  |         class Mutation(ObjectType): | ||||||
|  |             my_mutation = MyMutation.Field() | ||||||
|  | 
 | ||||||
|  |         schema = Schema(query=MockQuery, mutation=Mutation) | ||||||
|  | 
 | ||||||
|  |         result = schema.execute( | ||||||
|  |             """ mutation MyMutation { | ||||||
|  |                 myMutation(input: { text: "VALID_INPUT" }) { | ||||||
|  |                     errors { | ||||||
|  |                         field | ||||||
|  |                         messages | ||||||
|  |                     } | ||||||
|  |                     text | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             """ | ||||||
|  |         ) | ||||||
|  | 
 | ||||||
|  |         self.assertIs(result.errors, None) | ||||||
|  |         self.assertEqual(result.data["myMutation"]["errors"], []) | ||||||
|  |         self.assertEqual(result.data["myMutation"]["text"], "VALID_INPUT") | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| class ModelFormMutationTests(TestCase): | class ModelFormMutationTests(TestCase): | ||||||
|     def test_default_meta_fields(self): |     def test_default_meta_fields(self): | ||||||
|         class PetMutation(DjangoModelFormMutation): |         class PetMutation(DjangoModelFormMutation): | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user