use emailit::error::{new_api_error, new_connection_error};
#[test]
fn test_authentication_error() {
let err = new_api_error(401, "Unauthorized".into(), "{}".into());
assert!(err.is_authentication());
assert!(!err.is_invalid_request());
assert!(!err.is_rate_limit());
assert_eq!(err.status(), Some(401));
assert_eq!(err.to_string(), "Unauthorized");
}
#[test]
fn test_invalid_request_error_400() {
let err = new_api_error(400, "Bad Request".into(), "{}".into());
assert!(err.is_invalid_request());
assert!(!err.is_authentication());
assert_eq!(err.status(), Some(400));
}
#[test]
fn test_invalid_request_error_404() {
let err = new_api_error(404, "Not Found".into(), "{}".into());
assert!(err.is_invalid_request());
assert_eq!(err.status(), Some(404));
}
#[test]
fn test_unprocessable_entity_error() {
let err = new_api_error(422, "Validation failed".into(), "{}".into());
assert!(err.is_unprocessable_entity());
assert_eq!(err.status(), Some(422));
}
#[test]
fn test_rate_limit_error() {
let err = new_api_error(429, "Too many requests".into(), "{}".into());
assert!(err.is_rate_limit());
assert_eq!(err.status(), Some(429));
}
#[test]
fn test_generic_api_error() {
let err = new_api_error(500, "Internal Server Error".into(), "{}".into());
assert!(!err.is_authentication());
assert!(!err.is_invalid_request());
assert!(!err.is_unprocessable_entity());
assert!(!err.is_rate_limit());
assert!(!err.is_connection());
assert_eq!(err.status(), Some(500));
}
#[test]
fn test_connection_error() {
let err = new_connection_error("timeout");
assert!(err.is_connection());
assert_eq!(err.status(), None);
assert!(err.to_string().contains("timeout"));
assert!(err.to_string().contains("Could not connect"));
}
#[test]
fn test_api_error_accessor() {
let err = new_api_error(
401,
"Unauthorized".into(),
r#"{"error":"Unauthorized"}"#.into(),
);
let api_err = err.api_error().unwrap();
assert_eq!(api_err.status, 401);
assert_eq!(api_err.message, "Unauthorized");
assert_eq!(api_err.body, r#"{"error":"Unauthorized"}"#);
}
#[test]
fn test_connection_error_no_api_error() {
let err = new_connection_error("network failure");
assert!(err.api_error().is_none());
}
#[test]
fn test_error_is_std_error() {
let err = new_api_error(500, "fail".into(), "".into());
let _: &dyn std::error::Error = &err;
}