@@ -215,153 +215,70 @@ impl From<GraphQLIronError> for IronError {
215
215
216
216
#[ cfg( test) ]
217
217
mod tests {
218
- use serde_json:: Value as Json ;
219
- use serde_json;
220
218
use iron:: prelude:: * ;
221
- use iron:: status;
222
- use iron:: headers;
223
219
use iron_test:: { request, response} ;
224
220
use iron:: { Handler , Headers } ;
225
221
226
222
use :: tests:: model:: Database ;
223
+ use :: http:: tests as http_tests;
227
224
use types:: scalars:: EmptyMutation ;
228
225
229
226
use super :: GraphQLHandler ;
230
227
231
- fn context_factory ( _: & mut Request ) -> Database {
232
- Database :: new ( )
233
- }
234
-
235
- fn make_handler ( ) -> Box < Handler > {
236
- Box :: new ( GraphQLHandler :: new (
237
- context_factory,
238
- Database :: new ( ) ,
239
- EmptyMutation :: < Database > :: new ( ) ,
240
- ) )
241
- }
228
+ struct TestIronIntegration ;
242
229
243
- fn unwrap_json_response ( resp : Response ) -> Json {
244
- let result = response:: extract_body_to_string ( resp) ;
230
+ impl http_tests:: HTTPIntegration for TestIronIntegration
231
+ {
232
+ fn get ( & self , url : & str ) -> http_tests:: TestResponse {
233
+ make_test_response ( request:: get (
234
+ & ( "http://localhost:3000" . to_owned ( ) + url) ,
235
+ Headers :: new ( ) ,
236
+ & make_handler ( ) ,
237
+ ) )
238
+ }
245
239
246
- serde_json:: from_str :: < Json > ( & result) . expect ( "Could not parse JSON object" )
240
+ fn post ( & self , url : & str , body : & str ) -> http_tests:: TestResponse {
241
+ make_test_response ( request:: post (
242
+ & ( "http://localhost:3000" . to_owned ( ) + url) ,
243
+ Headers :: new ( ) ,
244
+ body,
245
+ & make_handler ( ) ,
246
+ ) )
247
+ }
247
248
}
248
249
249
250
#[ test]
250
- fn test_simple_get ( ) {
251
- let response = request:: get (
252
- "http://localhost:3000/?query={hero{name}}" ,
253
- Headers :: new ( ) ,
254
- & make_handler ( ) )
255
- . expect ( "Unexpected IronError" ) ;
256
-
257
- assert_eq ! ( response. status, Some ( status:: Ok ) ) ;
258
- assert_eq ! ( response. headers. get:: <headers:: ContentType >( ) ,
259
- Some ( & headers:: ContentType :: json( ) ) ) ;
260
-
261
- let json = unwrap_json_response ( response) ;
262
-
263
- assert_eq ! (
264
- json,
265
- serde_json:: from_str:: <Json >( r#"{"data": {"hero": {"name": "R2-D2"}}}"# )
266
- . expect( "Invalid JSON constant in test" ) ) ;
267
- }
251
+ fn test_iron_integration ( ) {
252
+ let integration = TestIronIntegration ;
268
253
269
- #[ test]
270
- fn test_encoded_get ( ) {
271
- let response = request:: get (
272
- "http://localhost:3000/?query=query%20{%20%20%20human(id:%20\" 1000\" )%20{%20%20%20%20%20id,%20%20%20%20%20name,%20%20%20%20%20appearsIn,%20%20%20%20%20homePlanet%20%20%20}%20}" ,
273
- Headers :: new ( ) ,
274
- & make_handler ( ) )
275
- . expect ( "Unexpected IronError" ) ;
276
-
277
- assert_eq ! ( response. status, Some ( status:: Ok ) ) ;
278
- assert_eq ! ( response. headers. get:: <headers:: ContentType >( ) ,
279
- Some ( & headers:: ContentType :: json( ) ) ) ;
280
-
281
- let json = unwrap_json_response ( response) ;
282
-
283
- assert_eq ! (
284
- json,
285
- serde_json:: from_str:: <Json >( r#"{
286
- "data": {
287
- "human": {
288
- "appearsIn": [
289
- "NEW_HOPE",
290
- "EMPIRE",
291
- "JEDI"
292
- ],
293
- "homePlanet": "Tatooine",
294
- "name": "Luke Skywalker",
295
- "id": "1000"
296
- }
297
- }
298
- }"# )
299
- . expect( "Invalid JSON constant in test" ) ) ;
254
+ http_tests:: run_http_test_suite ( & integration) ;
300
255
}
301
256
302
- #[ test]
303
- fn test_get_with_variables ( ) {
304
- let response = request:: get (
305
- "http://localhost:3000/?query=query($id:%20String!)%20{%20%20%20human(id:%20$id)%20{%20%20%20%20%20id,%20%20%20%20%20name,%20%20%20%20%20appearsIn,%20%20%20%20%20homePlanet%20%20%20}%20}&variables={%20%20%20\" id\" :%20%20\" 1000\" %20}" ,
306
- Headers :: new ( ) ,
307
- & make_handler ( ) )
308
- . expect ( "Unexpected IronError" ) ;
309
-
310
- assert_eq ! ( response. status, Some ( status:: Ok ) ) ;
311
- assert_eq ! ( response. headers. get:: <headers:: ContentType >( ) ,
312
- Some ( & headers:: ContentType :: json( ) ) ) ;
313
-
314
- let json = unwrap_json_response ( response) ;
315
-
316
- assert_eq ! (
317
- json,
318
- serde_json:: from_str:: <Json >( r#"{
319
- "data": {
320
- "human": {
321
- "appearsIn": [
322
- "NEW_HOPE",
323
- "EMPIRE",
324
- "JEDI"
325
- ],
326
- "homePlanet": "Tatooine",
327
- "name": "Luke Skywalker",
328
- "id": "1000"
329
- }
330
- }
331
- }"# )
332
- . expect( "Invalid JSON constant in test" ) ) ;
257
+ fn context_factory ( _: & mut Request ) -> Database {
258
+ Database :: new ( )
333
259
}
334
260
335
-
336
- #[ test]
337
- fn test_simple_post ( ) {
338
- let response = request:: post (
339
- "http://localhost:3000/" ,
340
- Headers :: new ( ) ,
341
- r#"{"query": "{hero{name}}"}"# ,
342
- & make_handler ( ) )
343
- . expect ( "Unexpected IronError" ) ;
344
-
345
- assert_eq ! ( response. status, Some ( status:: Ok ) ) ;
346
- assert_eq ! ( response. headers. get:: <headers:: ContentType >( ) ,
347
- Some ( & headers:: ContentType :: json( ) ) ) ;
348
-
349
- let json = unwrap_json_response ( response) ;
350
-
351
- assert_eq ! (
352
- json,
353
- serde_json:: from_str:: <Json >( r#"{"data": {"hero": {"name": "R2-D2"}}}"# )
354
- . expect( "Invalid JSON constant in test" ) ) ;
261
+ fn make_test_response ( response : IronResult < Response > ) -> http_tests:: TestResponse {
262
+ let response = response. expect ( "Error response from GraphQL handler" ) ;
263
+ let status_code = response. status . expect ( "No status code returned from handler" ) . to_u16 ( ) as i32 ;
264
+ let content_type = String :: from_utf8 (
265
+ response. headers . get_raw ( "content-type" )
266
+ . expect ( "No content type header from handler" ) [ 0 ] . clone ( ) )
267
+ . expect ( "Content-type header invalid UTF-8" ) ;
268
+ let body = response:: extract_body_to_string ( response) ;
269
+
270
+ http_tests:: TestResponse {
271
+ status_code : status_code,
272
+ body : Some ( body) ,
273
+ content_type : content_type,
274
+ }
355
275
}
356
276
357
- #[ test]
358
- fn test_unsupported_method ( ) {
359
- let response = request:: options (
360
- "http://localhost:3000/?query={hero{name}}" ,
361
- Headers :: new ( ) ,
362
- & make_handler ( ) )
363
- . expect ( "Unexpected IronError" ) ;
364
-
365
- assert_eq ! ( response. status, Some ( status:: MethodNotAllowed ) ) ;
277
+ fn make_handler ( ) -> Box < Handler > {
278
+ Box :: new ( GraphQLHandler :: new (
279
+ context_factory,
280
+ Database :: new ( ) ,
281
+ EmptyMutation :: < Database > :: new ( ) ,
282
+ ) )
366
283
}
367
284
}
0 commit comments