99from ..fields import SQLAlchemyConnectionField
1010from ..types import SQLAlchemyObjectType
1111from ..utils import sort_argument_for_model , sort_enum_for_model
12- from .models import Article , Base , Editor , Pet , Reporter
12+ from .models import Article , Base , Editor , Pet , Reporter , Hairkind
1313
1414db = create_engine ("sqlite:///test_sqlalchemy.sqlite3" )
1515
@@ -34,7 +34,7 @@ def session():
3434
3535
3636def setup_fixtures (session ):
37- pet = Pet (name = "Lassie" , pet_kind = "dog" )
37+ pet = Pet (name = "Lassie" , pet_kind = "dog" , hair_kind = Hairkind . LONG )
3838 session .add (pet )
3939 reporter = Reporter (first_name = "ABA" , last_name = "X" )
4040 session .add (reporter )
@@ -105,16 +105,88 @@ def resolve_pet(self, *args, **kwargs):
105105 pet {
106106 name,
107107 petKind
108+ hairKind
108109 }
109110 }
110111 """
111- expected = {"pet" : {"name" : "Lassie" , "petKind" : "dog" }}
112+ expected = {"pet" : {"name" : "Lassie" , "petKind" : "dog" , "hairKind" : "LONG" }}
112113 schema = graphene .Schema (query = Query )
113114 result = schema .execute (query )
114115 assert not result .errors
115116 assert result .data == expected , result .data
116117
117118
119+ def test_enum_parameter (session ):
120+ setup_fixtures (session )
121+
122+ class PetType (SQLAlchemyObjectType ):
123+ class Meta :
124+ model = Pet
125+
126+ class Query (graphene .ObjectType ):
127+ pet = graphene .Field (PetType , kind = graphene .Argument (PetType ._meta .fields ['pet_kind' ].type .of_type ))
128+
129+ def resolve_pet (self , info , kind = None , * args , ** kwargs ):
130+ query = session .query (Pet )
131+ if kind :
132+ query = query .filter (Pet .pet_kind == kind )
133+ return query .first ()
134+
135+ query = """
136+ query PetQuery($kind: pet_kind) {
137+ pet(kind: $kind) {
138+ name,
139+ petKind
140+ hairKind
141+ }
142+ }
143+ """
144+ expected = {"pet" : {"name" : "Lassie" , "petKind" : "dog" , "hairKind" : "LONG" }}
145+ schema = graphene .Schema (query = Query )
146+ result = schema .execute (query , variables = {"kind" : "cat" })
147+ assert not result .errors
148+ assert result .data == {"pet" : None }
149+ result = schema .execute (query , variables = {"kind" : "dog" })
150+ assert not result .errors
151+ assert result .data == expected , result .data
152+
153+
154+ def test_py_enum_parameter (session ):
155+ setup_fixtures (session )
156+
157+ class PetType (SQLAlchemyObjectType ):
158+ class Meta :
159+ model = Pet
160+
161+ class Query (graphene .ObjectType ):
162+ pet = graphene .Field (PetType , kind = graphene .Argument (PetType ._meta .fields ['hair_kind' ].type .of_type ))
163+
164+ def resolve_pet (self , info , kind = None , * args , ** kwargs ):
165+ query = session .query (Pet )
166+ if kind :
167+ # XXX Why kind passed in as a str instead of a Hairkind instance?
168+ query = query .filter (Pet .hair_kind == Hairkind (kind ))
169+ return query .first ()
170+
171+ query = """
172+ query PetQuery($kind: Hairkind) {
173+ pet(kind: $kind) {
174+ name,
175+ petKind
176+ hairKind
177+ }
178+ }
179+ """
180+ expected = {"pet" : {"name" : "Lassie" , "petKind" : "dog" , "hairKind" : "LONG" }}
181+ schema = graphene .Schema (query = Query )
182+ result = schema .execute (query , variables = {"kind" : "SHORT" })
183+ assert not result .errors
184+ assert result .data == {"pet" : None }
185+ result = schema .execute (query , variables = {"kind" : "LONG" })
186+ assert not result .errors
187+ assert result .data == expected , result .data
188+
189+
118190def test_should_node (session ):
119191 setup_fixtures (session )
120192
@@ -326,9 +398,9 @@ class Mutation(graphene.ObjectType):
326398
327399def sort_setup (session ):
328400 pets = [
329- Pet (id = 2 , name = "Lassie" , pet_kind = "dog" ),
330- Pet (id = 22 , name = "Alf" , pet_kind = "cat" ),
331- Pet (id = 3 , name = "Barf" , pet_kind = "dog" ),
401+ Pet (id = 2 , name = "Lassie" , pet_kind = "dog" , hair_kind = Hairkind . LONG ),
402+ Pet (id = 22 , name = "Alf" , pet_kind = "cat" , hair_kind = Hairkind . LONG ),
403+ Pet (id = 3 , name = "Barf" , pet_kind = "dog" , hair_kind = Hairkind . LONG ),
332404 ]
333405 session .add_all (pets )
334406 session .commit ()
0 commit comments