mod common;
use apollo_errors::Error as ErrorTrait;
use common::{
BoolHeaderError, ErrorWithHeaders, InnerErrorWithHeaders, RateLimitStructError,
TransparentWithHeaders,
};
use http::HeaderValue;
#[test]
fn enum_multiple_headers() {
let error = ErrorWithHeaders::RateLimitExceeded {
retry_after: 60,
remaining: 0,
};
let headers = error.http_headers();
assert_eq!(headers.len(), 2);
assert_eq!(headers[0].0.as_str(), "retry-after");
assert_eq!(headers[0].1, HeaderValue::from(60u64));
assert_eq!(headers[1].0.as_str(), "x-ratelimit-remaining");
assert_eq!(headers[1].1, HeaderValue::from(0u32));
}
#[test]
fn enum_option_header_some() {
let error = ErrorWithHeaders::QuotaWarning { remaining: Some(5) };
let headers = error.http_headers();
assert_eq!(headers.len(), 1);
assert_eq!(headers[0].0.as_str(), "x-ratelimit-remaining");
assert_eq!(headers[0].1, HeaderValue::from(5u32));
}
#[test]
fn enum_option_header_none() {
let error = ErrorWithHeaders::QuotaWarning { remaining: None };
let headers = error.http_headers();
assert!(headers.is_empty());
}
#[test]
fn enum_no_headers() {
let error = ErrorWithHeaders::NoHeaders;
let headers = error.http_headers();
assert!(headers.is_empty());
}
#[test]
fn struct_with_headers() {
let error = RateLimitStructError {
retry_after: 120,
limit: 1000,
};
let headers = error.http_headers();
assert_eq!(headers.len(), 1);
assert_eq!(headers[0].0.as_str(), "retry-after");
assert_eq!(headers[0].1, HeaderValue::from(120u64));
}
#[test]
fn transparent_inherits_headers() {
let error = TransparentWithHeaders::Inner(InnerErrorWithHeaders::RateLimit { retry_after: 30 });
let headers = error.http_headers();
assert_eq!(headers.len(), 1);
assert_eq!(headers[0].0.as_str(), "retry-after");
assert_eq!(headers[0].1, HeaderValue::from(30u64));
}
#[test]
fn transparent_direct_no_headers() {
let error = TransparentWithHeaders::Direct;
let headers = error.http_headers();
assert!(headers.is_empty());
}
#[test]
fn bool_header_true() {
let error = BoolHeaderError { enabled: true };
let headers = error.http_headers();
assert_eq!(headers.len(), 1);
assert_eq!(headers[0].0.as_str(), "x-feature-enabled");
assert_eq!(headers[0].1, HeaderValue::from_static("true"));
}
#[test]
fn bool_header_false() {
let error = BoolHeaderError { enabled: false };
let headers = error.http_headers();
assert_eq!(headers.len(), 1);
assert_eq!(headers[0].0.as_str(), "x-feature-enabled");
assert_eq!(headers[0].1, HeaderValue::from_static("false"));
}