Skip to content

Commit ff36902

Browse files
committed
Add tests for errors (#20)
1 parent 37c253d commit ff36902

File tree

1 file changed

+83
-2
lines changed

1 file changed

+83
-2
lines changed

src/model.rs

Lines changed: 83 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ impl TiledQuery {
1515

1616
#[cfg(test)]
1717
mod 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} \nExpected: {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

Comments
 (0)