emailit 2.0.3

The official Rust SDK for the Emailit Email API
Documentation
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;
}