2
2
3
3
import pytz
4
4
from graphql import GraphQLError
5
+ import pytest
5
6
6
7
from ..datetime import Date , DateTime , Time
7
8
from ..objecttype import ObjectType
@@ -88,6 +89,15 @@ def test_datetime_query_variable():
88
89
now = datetime .datetime .now ().replace (tzinfo = pytz .utc )
89
90
isoformat = now .isoformat ()
90
91
92
+ # test datetime variable provided as Python datetime
93
+ result = schema .execute (
94
+ """query Test($date: DateTime){ datetime(in: $date) }""" ,
95
+ variables = {"date" : now },
96
+ )
97
+ assert not result .errors
98
+ assert result .data == {"datetime" : isoformat }
99
+
100
+ # test datetime variable in string representation
91
101
result = schema .execute (
92
102
"""query Test($date: DateTime){ datetime(in: $date) }""" ,
93
103
variables = {"date" : isoformat },
@@ -100,6 +110,14 @@ def test_date_query_variable():
100
110
now = datetime .datetime .now ().replace (tzinfo = pytz .utc ).date ()
101
111
isoformat = now .isoformat ()
102
112
113
+ # test date variable provided as Python date
114
+ result = schema .execute (
115
+ """query Test($date: Date){ date(in: $date) }""" , variables = {"date" : now }
116
+ )
117
+ assert not result .errors
118
+ assert result .data == {"date" : isoformat }
119
+
120
+ # test date variable in string representation
103
121
result = schema .execute (
104
122
"""query Test($date: Date){ date(in: $date) }""" , variables = {"date" : isoformat }
105
123
)
@@ -112,8 +130,57 @@ def test_time_query_variable():
112
130
time = datetime .time (now .hour , now .minute , now .second , now .microsecond , now .tzinfo )
113
131
isoformat = time .isoformat ()
114
132
133
+ # test time variable provided as Python time
134
+ result = schema .execute (
135
+ """query Test($time: Time){ time(at: $time) }""" , variables = {"time" : time }
136
+ )
137
+ assert not result .errors
138
+ assert result .data == {"time" : isoformat }
139
+
140
+ # test time variable in string representation
115
141
result = schema .execute (
116
142
"""query Test($time: Time){ time(at: $time) }""" , variables = {"time" : isoformat }
117
143
)
118
144
assert not result .errors
119
145
assert result .data == {"time" : isoformat }
146
+
147
+
148
+ @pytest .mark .xfail (
149
+ reason = "creating the error message fails when un-parsable object is not JSON serializable."
150
+ )
151
+ def test_bad_variables ():
152
+ def _test_bad_variables (type , input ):
153
+ result = schema .execute (
154
+ """query Test($input: {}){{ {}(in: $input) }}""" .format (type , type .lower ()),
155
+ variables = {"input" : input },
156
+ )
157
+ assert len (result .errors ) == 1
158
+ # when `input` is not JSON serializable formatting the error message in
159
+ # `graphql.utils.is_valid_value` line 79 fails with a TypeError
160
+ assert isinstance (result .errors [0 ], GraphQLError )
161
+ print (result .errors [0 ])
162
+ assert result .data is None
163
+
164
+ not_a_date = dict ()
165
+ not_a_date_str = "Some string that's not a date"
166
+ today = datetime .date .today ()
167
+ now = datetime .datetime .now ().replace (tzinfo = pytz .utc )
168
+ time = datetime .time (now .hour , now .minute , now .second , now .microsecond , now .tzinfo )
169
+
170
+ bad_pairs = [
171
+ ("DateTime" , not_a_date ),
172
+ ("DateTime" , not_a_date_str ),
173
+ ("DateTime" , today ),
174
+ ("DateTime" , time ),
175
+ ("Date" , not_a_date ),
176
+ ("Date" , not_a_date_str ),
177
+ ("Date" , now ),
178
+ ("Date" , time ),
179
+ ("Time" , not_a_date ),
180
+ ("Time" , not_a_date_str ),
181
+ ("Time" , now ),
182
+ ("Time" , today ),
183
+ ]
184
+
185
+ for type , input in bad_pairs :
186
+ _test_bad_variables (type , input )
0 commit comments