@@ -15,7 +15,7 @@ impl TiledQuery {
1515
1616#[ cfg( test) ]
1717mod tests {
18- use async_graphql:: { EmptyMutation , EmptySubscription , Schema } ;
18+ use async_graphql:: { EmptyMutation , EmptySubscription , Schema , Value } ;
1919 use httpmock:: MockServer ;
2020 use url:: Url ;
2121
@@ -25,7 +25,6 @@ mod tests {
2525 #[ tokio:: test]
2626 async fn test_api_version_query ( ) {
2727 let mock_server = MockServer :: start ( ) ;
28-
2928 let mock = mock_server
3029 . mock_async ( |when, then| {
3130 when. method ( "GET" ) . path ( "/api/v1/" ) ;
@@ -46,6 +45,88 @@ mod tests {
4645 let response = schema. execute ( "{metadata { apiVersion } }" ) . await ;
4746
4847 assert_eq ! ( response. data. to_string( ) , "{metadata: {apiVersion: 0}}" ) ;
48+ assert_eq ! ( response. errors, & [ ] ) ;
49+ mock. assert ( ) ;
50+ }
51+
52+ #[ tokio:: test]
53+ async fn test_server_unavailable ( ) {
54+ let schema = Schema :: build (
55+ TiledQuery ( TiledClient {
56+ address : Url :: parse ( "http://tiled.example.com" ) . unwrap ( ) ,
57+ } ) ,
58+ EmptyMutation ,
59+ EmptySubscription ,
60+ )
61+ . finish ( ) ;
62+
63+ let response = schema. execute ( "{metadata { apiVersion } }" ) . await ;
64+ assert_eq ! ( response. data, Value :: Null ) ;
65+ assert_eq ! (
66+ response. errors[ 0 ] . message,
67+ "Tiled server error: error sending request for url (http://tiled.example.com/api/v1/)"
68+ ) ;
69+ assert_eq ! ( response. errors. len( ) , 1 ) ;
70+ }
71+
72+ #[ tokio:: test]
73+ async fn test_internal_tiled_error ( ) {
74+ let mock_server = MockServer :: start ( ) ;
75+ let mock = mock_server
76+ . mock_async ( |when, then| {
77+ when. method ( "GET" ) . path ( "/api/v1/" ) ;
78+ then. status ( 503 ) ;
79+ } )
80+ . await ;
81+
82+ let schema = Schema :: build (
83+ TiledQuery ( TiledClient {
84+ address : Url :: parse ( & mock_server. base_url ( ) ) . unwrap ( ) ,
85+ } ) ,
86+ EmptyMutation ,
87+ EmptySubscription ,
88+ )
89+ . finish ( ) ;
90+
91+ let response = schema. execute ( "{metadata { apiVersion } }" ) . await ;
92+ let actual = & response. errors [ 0 ] . message ;
93+ let expected =
94+ "Tiled server error: HTTP status server error (503 Service Unavailable) for url" ;
95+ assert_eq ! ( response. data, Value :: Null ) ;
96+ assert ! (
97+ actual. starts_with( expected) ,
98+ "Unexpected error: {actual} \n Expected: {expected} [...]"
99+ ) ;
100+ assert_eq ! ( response. errors. len( ) , 1 ) ;
101+ mock. assert ( ) ;
102+ }
103+
104+ #[ tokio:: test]
105+ async fn test_invalid_server_response ( ) {
106+ let mock_server = MockServer :: start ( ) ;
107+ let mock = mock_server
108+ . mock_async ( |when, then| {
109+ when. method ( "GET" ) . path ( "/api/v1/" ) ;
110+ then. status ( 200 ) . body ( "{}" ) ;
111+ } )
112+ . await ;
113+
114+ let schema = Schema :: build (
115+ TiledQuery ( TiledClient {
116+ address : Url :: parse ( & mock_server. base_url ( ) ) . unwrap ( ) ,
117+ } ) ,
118+ EmptyMutation ,
119+ EmptySubscription ,
120+ )
121+ . finish ( ) ;
122+
123+ let response = schema. execute ( "{metadata { apiVersion } }" ) . await ;
124+ assert_eq ! ( response. data, Value :: Null ) ;
125+ assert_eq ! ( response. errors. len( ) , 1 ) ;
126+ assert_eq ! (
127+ response. errors[ 0 ] . message,
128+ "Invalid response: missing field `api_version` at line 1 column 2, response: {}"
129+ ) ;
49130 mock. assert ( ) ;
50131 }
51132}
0 commit comments