@@ -466,7 +466,9 @@ pub mod subscriptions {
466
466
467
467
#[ cfg( test) ]
468
468
mod tests {
469
- use actix_http:: body:: AnyBody ;
469
+ use std:: pin:: Pin ;
470
+
471
+ use actix_http:: body:: MessageBody ;
470
472
use actix_web:: {
471
473
dev:: ServiceResponse ,
472
474
http,
@@ -475,6 +477,7 @@ mod tests {
475
477
web:: Data ,
476
478
App ,
477
479
} ;
480
+ use futures:: future;
478
481
use juniper:: {
479
482
http:: tests:: { run_http_test_suite, HttpIntegration , TestResponse } ,
480
483
tests:: fixtures:: starwars:: schema:: { Database , Query } ,
@@ -487,11 +490,16 @@ mod tests {
487
490
type Schema =
488
491
juniper:: RootNode < ' static , Query , EmptyMutation < Database > , EmptySubscription < Database > > ;
489
492
490
- async fn take_response_body_string ( resp : & mut ServiceResponse ) -> String {
491
- match resp. response ( ) . body ( ) {
492
- AnyBody :: Bytes ( body) => String :: from_utf8 ( body. to_vec ( ) ) . unwrap ( ) ,
493
- _ => String :: from ( "" ) ,
494
- }
493
+ async fn take_response_body_string ( resp : ServiceResponse ) -> String {
494
+ let mut body = resp. into_body ( ) ;
495
+ String :: from_utf8 (
496
+ future:: poll_fn ( |cx| Pin :: new ( & mut body) . poll_next ( cx) )
497
+ . await
498
+ . unwrap ( )
499
+ . unwrap ( )
500
+ . to_vec ( ) ,
501
+ )
502
+ . unwrap ( )
495
503
}
496
504
497
505
async fn index (
@@ -537,13 +545,13 @@ mod tests {
537
545
. append_header ( ( ACCEPT , "text/html" ) )
538
546
. to_request ( ) ;
539
547
540
- let mut resp = test:: call_service ( & mut app, req) . await ;
541
- let body = take_response_body_string ( & mut resp) . await ;
548
+ let resp = test:: call_service ( & mut app, req) . await ;
542
549
assert_eq ! ( resp. status( ) , http:: StatusCode :: OK ) ;
543
550
assert_eq ! (
544
551
resp. headers( ) . get( CONTENT_TYPE ) . unwrap( ) . to_str( ) . unwrap( ) ,
545
552
"text/html; charset=utf-8"
546
553
) ;
554
+ let body = take_response_body_string ( resp) . await ;
547
555
assert ! ( body. contains( "<script>var GRAPHQL_URL = '/dogs-api/graphql';</script>" ) ) ;
548
556
assert ! ( body. contains(
549
557
"<script>var GRAPHQL_SUBSCRIPTIONS_URL = '/dogs-api/subscriptions';</script>"
@@ -578,13 +586,13 @@ mod tests {
578
586
. append_header ( ( ACCEPT , "text/html" ) )
579
587
. to_request ( ) ;
580
588
581
- let mut resp = test:: call_service ( & mut app, req) . await ;
582
- let body = take_response_body_string ( & mut resp) . await ;
589
+ let resp = test:: call_service ( & mut app, req) . await ;
583
590
assert_eq ! ( resp. status( ) , http:: StatusCode :: OK ) ;
584
591
assert_eq ! (
585
592
resp. headers( ) . get( CONTENT_TYPE ) . unwrap( ) . to_str( ) . unwrap( ) ,
586
593
"text/html; charset=utf-8"
587
594
) ;
595
+ let body = take_response_body_string ( resp) . await ;
588
596
assert ! ( body. contains( "GraphQLPlayground.init(root, { endpoint: '/dogs-api/graphql', subscriptionEndpoint: '/dogs-api/subscriptions' })" ) ) ;
589
597
}
590
598
@@ -611,17 +619,16 @@ mod tests {
611
619
)
612
620
. await ;
613
621
614
- let mut resp = test:: call_service ( & mut app, req) . await ;
615
- dbg ! ( take_response_body_string( & mut resp) . await ) ;
622
+ let resp = test:: call_service ( & mut app, req) . await ;
616
623
assert_eq ! ( resp. status( ) , http:: StatusCode :: OK ) ;
617
- assert_eq ! (
618
- take_response_body_string( & mut resp) . await ,
619
- r#"{"data":{"hero":{"name":"R2-D2"}}}"#
620
- ) ;
621
624
assert_eq ! (
622
625
resp. headers( ) . get( "content-type" ) . unwrap( ) ,
623
626
"application/json" ,
624
627
) ;
628
+ assert_eq ! (
629
+ take_response_body_string( resp) . await ,
630
+ r#"{"data":{"hero":{"name":"R2-D2"}}}"#
631
+ ) ;
625
632
}
626
633
627
634
#[ actix_web:: rt:: test]
@@ -644,17 +651,17 @@ mod tests {
644
651
)
645
652
. await ;
646
653
647
- let mut resp = test:: call_service ( & mut app, req) . await ;
654
+ let resp = test:: call_service ( & mut app, req) . await ;
648
655
649
656
assert_eq ! ( resp. status( ) , http:: StatusCode :: OK ) ;
650
- assert_eq ! (
651
- take_response_body_string( & mut resp) . await ,
652
- r#"{"data":{"hero":{"name":"R2-D2"}}}"#
653
- ) ;
654
657
assert_eq ! (
655
658
resp. headers( ) . get( "content-type" ) . unwrap( ) ,
656
659
"application/json" ,
657
660
) ;
661
+ assert_eq ! (
662
+ take_response_body_string( resp) . await ,
663
+ r#"{"data":{"hero":{"name":"R2-D2"}}}"#
664
+ ) ;
658
665
}
659
666
660
667
#[ actix_web:: rt:: test]
@@ -688,17 +695,17 @@ mod tests {
688
695
)
689
696
. await ;
690
697
691
- let mut resp = test:: call_service ( & mut app, req) . await ;
698
+ let resp = test:: call_service ( & mut app, req) . await ;
692
699
693
700
assert_eq ! ( resp. status( ) , http:: StatusCode :: OK ) ;
694
- assert_eq ! (
695
- take_response_body_string( & mut resp) . await ,
696
- r#"[{"data":{"hero":{"name":"R2-D2"}}},{"data":{"hero":{"id":"1000","name":"Luke Skywalker"}}}]"#
697
- ) ;
698
701
assert_eq ! (
699
702
resp. headers( ) . get( "content-type" ) . unwrap( ) ,
700
703
"application/json" ,
701
704
) ;
705
+ assert_eq ! (
706
+ take_response_body_string( resp) . await ,
707
+ r#"[{"data":{"hero":{"name":"R2-D2"}}},{"data":{"hero":{"id":"1000","name":"Luke Skywalker"}}}]"#
708
+ ) ;
702
709
}
703
710
704
711
#[ test]
@@ -757,14 +764,20 @@ mod tests {
757
764
}
758
765
}
759
766
760
- async fn make_test_response ( mut resp : ServiceResponse ) -> TestResponse {
761
- let body = take_response_body_string ( & mut resp) . await ;
767
+ async fn make_test_response ( resp : ServiceResponse ) -> TestResponse {
762
768
let status_code = resp. status ( ) . as_u16 ( ) ;
763
- let content_type = resp. headers ( ) . get ( CONTENT_TYPE ) . unwrap ( ) ;
769
+ let content_type = resp
770
+ . headers ( )
771
+ . get ( CONTENT_TYPE )
772
+ . unwrap ( )
773
+ . to_str ( )
774
+ . unwrap ( )
775
+ . to_string ( ) ;
776
+ let body = take_response_body_string ( resp) . await ;
764
777
TestResponse {
765
778
status_code : status_code as i32 ,
766
779
body : Some ( body) ,
767
- content_type : content_type . to_str ( ) . unwrap ( ) . to_string ( ) ,
780
+ content_type,
768
781
}
769
782
}
770
783
0 commit comments