use crate::clients::HttpError;
use thiserror::Error;
#[derive(Debug, Error)]
pub enum GraphqlError {
#[error(transparent)]
Http(#[from] HttpError),
}
#[cfg(test)]
mod tests {
use super::*;
use crate::clients::{HttpResponseError, MaxHttpRetriesExceededError};
#[test]
fn test_graphql_error_http_variant_wraps_http_error() {
let http_error = HttpError::Response(HttpResponseError {
code: 404,
message: r#"{"error":"Not Found"}"#.to_string(),
error_reference: Some("abc-123".to_string()),
});
let graphql_error = GraphqlError::Http(http_error);
let message = graphql_error.to_string();
assert!(message.contains("Not Found"));
}
#[test]
fn test_all_error_variants_implement_std_error() {
let http_error: &dyn std::error::Error =
&GraphqlError::Http(HttpError::Response(HttpResponseError {
code: 400,
message: "test".to_string(),
error_reference: None,
}));
let _ = http_error;
}
#[test]
fn test_from_http_error_conversion() {
let http_error = HttpError::Response(HttpResponseError {
code: 500,
message: r#"{"error":"Internal Server Error"}"#.to_string(),
error_reference: None,
});
let graphql_error: GraphqlError = http_error.into();
assert!(matches!(graphql_error, GraphqlError::Http(_)));
}
#[test]
fn test_http_error_wraps_max_retries_exceeded() {
let http_error = HttpError::MaxRetries(MaxHttpRetriesExceededError {
code: 429,
tries: 3,
message: r#"{"error":"Rate limited"}"#.to_string(),
error_reference: None,
});
let graphql_error = GraphqlError::Http(http_error);
let message = graphql_error.to_string();
assert!(message.contains("Exceeded maximum retry count"));
assert!(message.contains("3"));
}
}