18
18
19
19
20
20
def describe_value_from_ast ():
21
- def _test_case (type_ , value_text , expected ):
22
- value_node = parse_value (value_text )
23
- value = value_from_ast (value_node , type_ )
24
- if isinstance (expected , float ) and isnan (expected ):
25
- assert isnan (value )
26
- else :
27
- assert value == expected
28
-
29
- def _test_case_with_vars (variables , type_ , value_text , expected ):
30
- value_node = parse_value (value_text )
31
- assert value_from_ast (value_node , type_ , variables ) == expected
21
+ def _value_from (value_text , type_ , variables = None ):
22
+ ast = parse_value (value_text )
23
+ return value_from_ast (ast , type_ , variables )
32
24
33
25
def rejects_empty_input ():
34
26
# noinspection PyTypeChecker
35
27
assert value_from_ast (None , GraphQLBoolean ) is Undefined
36
28
37
29
def converts_according_to_input_coercion_rules ():
38
- _test_case ( GraphQLBoolean , "true" , True )
39
- _test_case ( GraphQLBoolean , "false" , False )
40
- _test_case ( GraphQLInt , "123" , 123 )
41
- _test_case ( GraphQLFloat , "123" , 123 )
42
- _test_case ( GraphQLFloat , "123.456" , 123.456 )
43
- _test_case ( GraphQLString , '"abc123"' , "abc123" )
44
- _test_case ( GraphQLID , "123456" , "123456" )
45
- _test_case ( GraphQLID , '"123456"' , "123456" )
30
+ assert _value_from ( "true" , GraphQLBoolean ) is True
31
+ assert _value_from ( "false" , GraphQLBoolean ) is False
32
+ assert _value_from ( "123" , GraphQLInt ) == 123
33
+ assert _value_from ( "123" , GraphQLFloat ) == 123
34
+ assert _value_from ( "123.456" , GraphQLFloat ) == 123.456
35
+ assert _value_from ( '"abc123"' , GraphQLString ) == "abc123"
36
+ assert _value_from ( "123456" , GraphQLID ) == "123456"
37
+ assert _value_from ( '"123456"' , GraphQLID ) == "123456"
46
38
47
39
def does_not_convert_when_input_coercion_rules_reject_a_value ():
48
- _test_case (GraphQLBoolean , "123" , Undefined )
49
- _test_case (GraphQLInt , "123.456" , Undefined )
50
- _test_case (GraphQLInt , "true" , Undefined )
51
- _test_case (GraphQLInt , '"123"' , Undefined )
52
- _test_case (GraphQLFloat , '"123"' , Undefined )
53
- _test_case (GraphQLString , "123" , Undefined )
54
- _test_case (GraphQLString , "true" , Undefined )
55
- _test_case (GraphQLID , "123.456" , Undefined )
56
-
57
- test_enum = GraphQLEnumType (
58
- "TestColor" ,
59
- {
60
- "RED" : 1 ,
61
- "GREEN" : 2 ,
62
- "BLUE" : 3 ,
63
- "NULL" : None ,
64
- "NAN" : nan ,
65
- "NO_CUSTOM_VALUE" : Undefined ,
66
- },
67
- )
40
+ assert _value_from ("123" , GraphQLBoolean ) is Undefined
41
+ assert _value_from ("123.456" , GraphQLInt ) is Undefined
42
+ assert _value_from ("true" , GraphQLInt ) is Undefined
43
+ assert _value_from ('"123"' , GraphQLInt ) is Undefined
44
+ assert _value_from ('"123"' , GraphQLFloat ) is Undefined
45
+ assert _value_from ("123" , GraphQLString ) is Undefined
46
+ assert _value_from ("true" , GraphQLString ) is Undefined
47
+ assert _value_from ("123.456" , GraphQLID ) is Undefined
68
48
69
49
def converts_enum_values_according_to_input_coercion_rules ():
70
- _test_case (test_enum , "RED" , 1 )
71
- _test_case (test_enum , "BLUE" , 3 )
72
- _test_case (test_enum , "YELLOW" , Undefined )
73
- _test_case (test_enum , "3" , Undefined )
74
- _test_case (test_enum , '"BLUE"' , Undefined )
75
- _test_case (test_enum , "null" , None )
76
- _test_case (test_enum , "NULL" , None )
77
- _test_case (test_enum , "NAN" , nan )
78
- _test_case (test_enum , "NO_CUSTOM_VALUE" , Undefined )
50
+ test_enum = GraphQLEnumType (
51
+ "TestColor" ,
52
+ {
53
+ "RED" : 1 ,
54
+ "GREEN" : 2 ,
55
+ "BLUE" : 3 ,
56
+ "NULL" : None ,
57
+ "NAN" : nan ,
58
+ "NO_CUSTOM_VALUE" : Undefined ,
59
+ },
60
+ )
61
+
62
+ assert _value_from ("RED" , test_enum ) == 1
63
+ assert _value_from ("BLUE" , test_enum ) == 3
64
+ assert _value_from ("YELLOW" , test_enum ) is Undefined
65
+ assert _value_from ("3" , test_enum ) is Undefined
66
+ assert _value_from ('"BLUE"' , test_enum ) is Undefined
67
+ assert _value_from ("null" , test_enum ) is None
68
+ assert _value_from ("NULL" , test_enum ) is None
69
+ assert isnan (_value_from ("NAN" , test_enum ))
70
+ assert _value_from ("NO_CUSTOM_VALUE" , test_enum ) is Undefined
79
71
80
72
# Boolean!
81
73
non_null_bool = GraphQLNonNull (GraphQLBoolean )
@@ -89,41 +81,44 @@ def converts_enum_values_according_to_input_coercion_rules():
89
81
non_null_list_of_non_mull_bool = GraphQLNonNull (list_of_non_null_bool )
90
82
91
83
def coerces_to_null_unless_non_null ():
92
- _test_case ( GraphQLBoolean , "null" , None )
93
- _test_case ( non_null_bool , "null" , Undefined )
84
+ assert _value_from ( "null" , GraphQLBoolean ) is None
85
+ assert _value_from ( "null" , non_null_bool ) is Undefined
94
86
95
87
def coerces_lists_of_values ():
96
- _test_case ( list_of_bool , "true" , [True ])
97
- _test_case ( list_of_bool , "123" , Undefined )
98
- _test_case ( list_of_bool , "null" , None )
99
- _test_case ( list_of_bool , "[true, false]" , [True , False ])
100
- _test_case ( list_of_bool , "[true, 123]" , Undefined )
101
- _test_case ( list_of_bool , "[true, null]" , [True , None ])
102
- _test_case ( list_of_bool , "{ true: true }" , Undefined )
88
+ assert _value_from ( "true" , list_of_bool ) == [True ]
89
+ assert _value_from ( "123" , list_of_bool ) is Undefined
90
+ assert _value_from ( "null" , list_of_bool ) is None
91
+ assert _value_from ( "[true, false]" , list_of_bool ) == [True , False ]
92
+ assert _value_from ( "[true, 123]" , list_of_bool ) is Undefined
93
+ assert _value_from ( "[true, null]" , list_of_bool ) == [True , None ]
94
+ assert _value_from ( "{ true: true }" , list_of_bool ) is Undefined
103
95
104
96
def coerces_non_null_lists_of_values ():
105
- _test_case ( non_null_list_of_bool , "true" , [True ])
106
- _test_case ( non_null_list_of_bool , "123" , Undefined )
107
- _test_case ( non_null_list_of_bool , "null" , Undefined )
108
- _test_case ( non_null_list_of_bool , "[true, false]" , [True , False ])
109
- _test_case ( non_null_list_of_bool , "[true, 123]" , Undefined )
110
- _test_case ( non_null_list_of_bool , "[true, null]" , [True , None ])
97
+ assert _value_from ( "true" , non_null_list_of_bool ) == [True ]
98
+ assert _value_from ( "123" , non_null_list_of_bool ) is Undefined
99
+ assert _value_from ( "null" , non_null_list_of_bool ) is Undefined
100
+ assert _value_from ( "[true, false]" , non_null_list_of_bool ) == [True , False ]
101
+ assert _value_from ( "[true, 123]" , non_null_list_of_bool ) is Undefined
102
+ assert _value_from ( "[true, null]" , non_null_list_of_bool ) == [True , None ]
111
103
112
104
def coerces_lists_of_non_null_values ():
113
- _test_case ( list_of_non_null_bool , "true" , [True ])
114
- _test_case ( list_of_non_null_bool , "123" , Undefined )
115
- _test_case ( list_of_non_null_bool , "null" , None )
116
- _test_case ( list_of_non_null_bool , "[true, false]" , [True , False ])
117
- _test_case ( list_of_non_null_bool , "[true, 123]" , Undefined )
118
- _test_case ( list_of_non_null_bool , "[true, null]" , Undefined )
105
+ assert _value_from ( "true" , list_of_non_null_bool ) == [True ]
106
+ assert _value_from ( "123" , list_of_non_null_bool ) is Undefined
107
+ assert _value_from ( "null" , list_of_non_null_bool ) is None
108
+ assert _value_from ( "[true, false]" , list_of_non_null_bool ) == [True , False ]
109
+ assert _value_from ( "[true, 123]" , list_of_non_null_bool ) is Undefined
110
+ assert _value_from ( "[true, null]" , list_of_non_null_bool ) is Undefined
119
111
120
112
def coerces_non_null_lists_of_non_null_values ():
121
- _test_case (non_null_list_of_non_mull_bool , "true" , [True ])
122
- _test_case (non_null_list_of_non_mull_bool , "123" , Undefined )
123
- _test_case (non_null_list_of_non_mull_bool , "null" , Undefined )
124
- _test_case (non_null_list_of_non_mull_bool , "[true, false]" , [True , False ])
125
- _test_case (non_null_list_of_non_mull_bool , "[true, 123]" , Undefined )
126
- _test_case (non_null_list_of_non_mull_bool , "[true, null]" , Undefined )
113
+ assert _value_from ("true" , non_null_list_of_non_mull_bool ) == [True ]
114
+ assert _value_from ("123" , non_null_list_of_non_mull_bool ) is Undefined
115
+ assert _value_from ("null" , non_null_list_of_non_mull_bool ) is Undefined
116
+ assert _value_from ("[true, false]" , non_null_list_of_non_mull_bool ) == [
117
+ True ,
118
+ False ,
119
+ ]
120
+ assert _value_from ("[true, 123]" , non_null_list_of_non_mull_bool ) is Undefined
121
+ assert _value_from ("[true, null]" , non_null_list_of_non_mull_bool ) is Undefined
127
122
128
123
test_input_obj = GraphQLInputObjectType (
129
124
"TestInput" ,
@@ -135,51 +130,48 @@ def coerces_non_null_lists_of_non_null_values():
135
130
)
136
131
137
132
def coerces_input_objects_according_to_input_coercion_rules ():
138
- _test_case (test_input_obj , "null" , None )
139
- _test_case (test_input_obj , "123" , Undefined )
140
- _test_case (test_input_obj , "[]" , Undefined )
141
- _test_case (
142
- test_input_obj ,
143
- "{ int: 123, requiredBool: false }" ,
144
- {"int" : 123 , "requiredBool" : False },
145
- )
146
- _test_case (
147
- test_input_obj ,
148
- "{ bool: true, requiredBool: false }" ,
149
- {"int" : 42 , "bool" : True , "requiredBool" : False },
133
+ assert _value_from ("null" , test_input_obj ) is None
134
+ assert _value_from ("[]" , test_input_obj ) is Undefined
135
+ assert _value_from ("123" , test_input_obj ) is Undefined
136
+ assert _value_from ("{ int: 123, requiredBool: false }" , test_input_obj ) == {
137
+ "int" : 123 ,
138
+ "requiredBool" : False ,
139
+ }
140
+ assert _value_from ("{ bool: true, requiredBool: false }" , test_input_obj ) == {
141
+ "int" : 42 ,
142
+ "bool" : True ,
143
+ "requiredBool" : False ,
144
+ }
145
+ assert (
146
+ _value_from ("{ int: true, requiredBool: true }" , test_input_obj )
147
+ is Undefined
150
148
)
151
- _test_case (test_input_obj , "{ int: true, requiredBool: true }" , Undefined )
152
- _test_case (test_input_obj , "{ requiredBool: null }" , Undefined )
153
- _test_case (test_input_obj , "{ bool: true }" , Undefined )
149
+ assert _value_from ("{ requiredBool: null }" , test_input_obj ) is Undefined
150
+ assert _value_from ("{ bool: true }" , test_input_obj ) is Undefined
154
151
155
152
def accepts_variable_values_assuming_already_coerced ():
156
- _test_case_with_vars ({}, GraphQLBoolean , "$var" , Undefined )
157
- _test_case_with_vars ({ " var": True } , GraphQLBoolean , "$ var", True )
158
- _test_case_with_vars ({ " var": None } , GraphQLBoolean , "$ var", None )
153
+ assert _value_from ( "$var" , GraphQLBoolean , {}) is Undefined
154
+ assert _value_from ( "$ var" , GraphQLBoolean , { " var": True }) is True
155
+ assert _value_from ( "$ var" , GraphQLBoolean , { " var": None }) is None
159
156
160
157
def asserts_variables_are_provided_as_items_in_lists ():
161
- _test_case_with_vars ({}, list_of_bool , "[ $foo ]" , [None ])
162
- _test_case_with_vars ({}, list_of_non_null_bool , "[ $foo ]" , Undefined )
163
- _test_case_with_vars ({ " foo" : True } , list_of_non_null_bool , "[ $ foo ]" , [True ])
158
+ assert _value_from ( "[ $foo ]" , list_of_bool , {}) == [None ]
159
+ assert _value_from ( "[ $foo ]" , list_of_non_null_bool , {}) is Undefined
160
+ assert _value_from ( "[ $ foo ]" , list_of_non_null_bool , { " foo" : True }) == [True ]
164
161
# Note: variables are expected to have already been coerced, so we
165
162
# do not expect the singleton wrapping behavior for variables.
166
- _test_case_with_vars ({ " foo": True } , list_of_non_null_bool , "$ foo", True )
167
- _test_case_with_vars ({ " foo": [ True ]} , list_of_non_null_bool , "$ foo", [True ])
163
+ assert _value_from ( "$ foo" , list_of_non_null_bool , { " foo": True }) is True
164
+ assert _value_from ( "$ foo" , list_of_non_null_bool , { " foo": [True ]}) == [ True ]
168
165
169
166
def omits_input_object_fields_for_unprovided_variables ():
170
- _test_case_with_vars (
171
- {},
172
- test_input_obj ,
173
- "{ int: $foo, bool: $foo, requiredBool: true }" ,
174
- {"int" : 42 , "requiredBool" : True },
175
- )
176
- _test_case_with_vars ({}, test_input_obj , "{ requiredBool: $foo }" , Undefined )
177
- _test_case_with_vars (
178
- {"foo" : True },
179
- test_input_obj ,
180
- "{ requiredBool: $foo }" ,
181
- {"int" : 42 , "requiredBool" : True },
182
- )
167
+ assert _value_from (
168
+ "{ int: $foo, bool: $foo, requiredBool: true }" , test_input_obj , {}
169
+ ) == {"int" : 42 , "requiredBool" : True }
170
+ assert _value_from ("{ requiredBool: $foo }" , test_input_obj , {}) is Undefined
171
+ assert _value_from ("{ requiredBool: $foo }" , test_input_obj , {"foo" : True }) == {
172
+ "int" : 42 ,
173
+ "requiredBool" : True ,
174
+ }
183
175
184
176
def transforms_names_using_out_name ():
185
177
# This is an extension of GraphQL.js.
@@ -192,9 +184,10 @@ def transforms_names_using_out_name():
192
184
),
193
185
},
194
186
)
195
- _test_case (
196
- complex_input_obj , "{ realPart: 1 }" , {"real_part" : 1 , "imag_part" : 0 }
197
- )
187
+ assert _value_from ("{ realPart: 1 }" , complex_input_obj ) == {
188
+ "real_part" : 1 ,
189
+ "imag_part" : 0 ,
190
+ }
198
191
199
192
def transforms_values_with_out_type ():
200
193
# This is an extension of GraphQL.js.
@@ -206,4 +199,4 @@ def transforms_values_with_out_type():
206
199
},
207
200
out_type = lambda value : complex (value ["real" ], value ["imag" ]),
208
201
)
209
- _test_case ( complex_input_obj , "{ real: 1, imag: 2 }" , 1 + 2j )
202
+ assert _value_from ( "{ real: 1, imag: 2 }" , complex_input_obj ) == 1 + 2j
0 commit comments