Skip to content

Commit 2b62220

Browse files
committed
Add tests for tiled server errors
1 parent f934091 commit 2b62220

File tree

2 files changed

+52
-3
lines changed

2 files changed

+52
-3
lines changed

src/clients.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,10 @@ impl TiledClient {
1919
async fn request<T: DeserializeOwned>(&self, endpoint: &str) -> ClientResult<T> {
2020
println!("Requesting data from tiled");
2121
let url = self.address.join(endpoint)?;
22-
22+
2323
let response = reqwest::get(url).await?.error_for_status()?;
2424
let body = response.text().await?;
2525
serde_json::from_str(&body).map_err(|e| ClientError::InvalidResponse(e, body))
26-
2726
}
2827
}
2928
impl Client for TiledClient {

src/model.rs

Lines changed: 51 additions & 1 deletion
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

@@ -46,6 +46,56 @@ mod tests {
4646
let response = schema.execute("{metadata { apiVersion } }").await;
4747

4848
assert_eq!(response.data.to_string(), "{metadata: {apiVersion: 0}}");
49+
50+
#[tokio::test]
51+
async fn test_server_unavailable() {
52+
let schema = Schema::build(
53+
TiledQuery(TiledClient {
54+
address: Url::parse("http://tiled.example.com").unwrap(),
55+
}),
56+
EmptyMutation,
57+
EmptySubscription,
58+
)
59+
.finish();
60+
61+
let response = schema.execute("{metadata { apiVersion } }").await;
62+
assert_eq!(response.data, Value::Null);
63+
assert_eq!(
64+
response.errors[0].message,
65+
"Tiled server error: error sending request for url (http://tiled.example.com/api/v1/)"
66+
);
67+
assert_eq!(response.errors.len(), 1);
68+
}
69+
70+
#[tokio::test]
71+
async fn test_internal_tiled_error() {
72+
let mock_server = MockServer::start();
73+
let mock = mock_server
74+
.mock_async(|when, then| {
75+
when.method("GET").path("/api/v1/");
76+
then.status(503);
77+
})
78+
.await;
79+
80+
let schema = Schema::build(
81+
TiledQuery(TiledClient {
82+
address: Url::parse(&mock_server.base_url()).unwrap(),
83+
}),
84+
EmptyMutation,
85+
EmptySubscription,
86+
)
87+
.finish();
88+
89+
let response = schema.execute("{metadata { apiVersion } }").await;
90+
let actual = &response.errors[0].message;
91+
let expected =
92+
"Tiled server error: HTTP status server error (503 Service Unavailable) for url";
93+
assert_eq!(response.data, Value::Null);
94+
assert!(
95+
actual.starts_with(expected),
96+
"Unexpected error: {actual} \nExpected: {expected} [...]"
97+
);
98+
assert_eq!(response.errors.len(), 1);
4999
mock.assert();
50100
}
51101
}

0 commit comments

Comments
 (0)