use rust_x402::X402Error;
#[test]
fn test_network_not_supported_error() {
let error = X402Error::NetworkNotSupported {
network: "unsupported-network".to_string(),
};
let error_msg = error.to_string();
assert!(
error_msg.contains("Network not supported"),
"Error message MUST contain 'Network not supported' - actual: {}",
error_msg
);
assert!(
error_msg.contains("unsupported-network"),
"Error message MUST contain the unsupported network name - actual: {}",
error_msg
);
}
#[test]
fn test_invalid_payment_payload_error() {
let error = X402Error::invalid_payment_payload("Invalid signature format");
let error_msg = error.to_string();
assert!(
error_msg.contains("Invalid payment payload"),
"Error message MUST contain 'Invalid payment payload' - actual: {}",
error_msg
);
assert!(
error_msg.contains("Invalid signature format"),
"Error message MUST contain the specific error reason - actual: {}",
error_msg
);
}
#[test]
fn test_insufficient_funds_error() {
let error = X402Error::InsufficientFunds;
let error_msg = error.to_string();
assert!(
error_msg.contains("Insufficient funds"),
"Error message MUST contain 'Insufficient funds' - actual: {}",
error_msg
);
}
#[test]
fn test_authorization_expired_error() {
let error = X402Error::AuthorizationExpired;
let error_msg = error.to_string();
assert!(
error_msg.contains("Authorization expired"),
"Error message MUST contain 'Authorization expired' - actual: {}",
error_msg
);
}
#[test]
fn test_invalid_signature_error() {
let error = X402Error::InvalidSignature {
message: "Signature verification failed".to_string(),
};
let error_msg = error.to_string();
assert!(
error_msg.contains("Invalid signature"),
"Error message MUST contain 'Invalid signature' - actual: {}",
error_msg
);
assert!(
error_msg.contains("Signature verification failed"),
"Error message MUST contain the specific signature error - actual: {}",
error_msg
);
}
#[test]
fn test_facilitator_error() {
let error = X402Error::facilitator_error("Facilitator service unavailable");
let error_msg = error.to_string();
assert!(
error_msg.contains("Facilitator error"),
"Error message MUST contain 'Facilitator error' - actual: {}",
error_msg
);
assert!(
error_msg.contains("Facilitator service unavailable"),
"Error message MUST contain the specific facilitator error - actual: {}",
error_msg
);
}
#[test]
fn test_crypto_error() {
let error = X402Error::Crypto(Box::new(std::io::Error::new(
std::io::ErrorKind::InvalidData,
"ECDSA signature verification failed",
)));
let error_msg = error.to_string();
assert!(
error_msg.contains("Crypto error")
|| error_msg.contains("ECDSA signature verification failed"),
"Error message MUST contain either 'Crypto error' or 'ECDSA signature verification failed' - actual: {}", error_msg
);
}
#[test]
fn test_timeout_error() {
let error = X402Error::Timeout;
let error_msg = error.to_string();
assert!(
error_msg.contains("Timeout") || error_msg.contains("timeout"),
"Error message MUST contain 'Timeout' or 'timeout' - actual: {}",
error_msg
);
}
#[test]
fn test_io_error() {
let error = X402Error::Io(std::io::Error::new(
std::io::ErrorKind::NotFound,
"File not found",
));
let error_msg = error.to_string();
assert!(
error_msg.contains("IO error"),
"Error message MUST contain 'IO error' - actual: {}",
error_msg
);
}
#[test]
fn test_error_chain() {
let io_error = std::io::Error::new(std::io::ErrorKind::NotFound, "File not found");
let x402_error = X402Error::Io(io_error);
let chained_error = X402Error::facilitator_error(x402_error.to_string());
let chained_msg = chained_error.to_string();
assert!(
chained_msg.contains("Facilitator error"),
"Chained error MUST contain 'Facilitator error' - actual: {}",
chained_msg
);
assert!(
chained_msg.contains("File not found"),
"Chained error MUST contain original error message 'File not found' - actual: {}",
chained_msg
);
}
#[test]
fn test_error_debug_format() {
let error = X402Error::InvalidSignature {
message: "Test error".to_string(),
};
let debug_str = format!("{:?}", error);
assert!(
debug_str.contains("InvalidSignature"),
"Debug format MUST contain variant name 'InvalidSignature' - actual: {}",
debug_str
);
assert!(
debug_str.contains("Test error"),
"Debug format MUST contain error message 'Test error' - actual: {}",
debug_str
);
}
#[test]
fn test_error_display_format() {
let error = X402Error::NetworkNotSupported {
network: "test-network".to_string(),
};
let display_str = format!("{}", error);
assert!(
display_str.contains("Network not supported"),
"Display format MUST contain 'Network not supported' - actual: {}",
display_str
);
assert!(
display_str.contains("test-network"),
"Display format MUST contain network name 'test-network' - actual: {}",
display_str
);
}