9
9
from ..fields import SQLAlchemyConnectionField
10
10
from ..types import SQLAlchemyObjectType
11
11
from ..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
13
13
14
14
db = create_engine ("sqlite:///test_sqlalchemy.sqlite3" )
15
15
@@ -34,7 +34,7 @@ def session():
34
34
35
35
36
36
def setup_fixtures (session ):
37
- pet = Pet (name = "Lassie" , pet_kind = "dog" )
37
+ pet = Pet (name = "Lassie" , pet_kind = "dog" , hair_kind = Hairkind . LONG )
38
38
session .add (pet )
39
39
reporter = Reporter (first_name = "ABA" , last_name = "X" )
40
40
session .add (reporter )
@@ -105,16 +105,88 @@ def resolve_pet(self, *args, **kwargs):
105
105
pet {
106
106
name,
107
107
petKind
108
+ hairKind
108
109
}
109
110
}
110
111
"""
111
- expected = {"pet" : {"name" : "Lassie" , "petKind" : "dog" }}
112
+ expected = {"pet" : {"name" : "Lassie" , "petKind" : "dog" , "hairKind" : "LONG" }}
112
113
schema = graphene .Schema (query = Query )
113
114
result = schema .execute (query )
114
115
assert not result .errors
115
116
assert result .data == expected , result .data
116
117
117
118
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
+
118
190
def test_should_node (session ):
119
191
setup_fixtures (session )
120
192
@@ -326,9 +398,9 @@ class Mutation(graphene.ObjectType):
326
398
327
399
def sort_setup (session ):
328
400
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 ),
332
404
]
333
405
session .add_all (pets )
334
406
session .commit ()
0 commit comments