use orion_error::ErrorCode;
use orion_error::ErrorOwe;
use orion_error::ErrorOweBase;
use orion_error::ErrorOweSource;
use orion_error::{StructError, UvsReason};
use std::error::Error as StdError;
#[test]
fn test_owe_basic_conversion() {
let result: Result<i32, &str> = Err("test error");
let converted: Result<i32, StructError<UvsReason>> = result.owe(UvsReason::business_error());
assert_eq!(converted.as_ref().unwrap_err().error_code(), 101);
assert!(converted
.as_ref()
.unwrap_err()
.detail()
.as_ref()
.unwrap()
.contains("test error"));
}
#[test]
fn test_owe_biz() {
let result: Result<i32, &str> = Err("business error");
let converted: Result<i32, StructError<UvsReason>> = result.owe_biz();
assert_eq!(converted.as_ref().unwrap_err().error_code(), 101);
assert!(converted
.as_ref()
.unwrap_err()
.detail()
.as_ref()
.unwrap()
.contains("business error"));
}
#[test]
fn test_owe_validation() {
let result: Result<i32, &str> = Err("validation error");
let converted: Result<i32, StructError<UvsReason>> = result.owe_validation();
assert_eq!(converted.as_ref().unwrap_err().error_code(), 100);
assert!(converted.as_ref().unwrap_err().detail().is_some());
assert!(converted
.as_ref()
.unwrap_err()
.detail()
.as_ref()
.unwrap()
.contains("validation error"));
}
#[test]
fn test_owe_data() {
let result: Result<Vec<i32>, &str> = Err("data corruption");
let converted: Result<Vec<i32>, StructError<UvsReason>> = result.owe_data();
assert!(converted.is_err());
let error = converted.unwrap_err();
assert_eq!(error.reason().error_code(), 200); assert!(error.detail().is_some());
assert!(error.detail().as_ref().unwrap().contains("data corruption"));
}
#[test]
fn test_owe_conf() {
let result: Result<bool, &str> = Err("config missing");
let converted: Result<bool, StructError<UvsReason>> = result.owe_conf();
assert!(converted.is_err());
let error = converted.unwrap_err();
assert_eq!(error.reason().error_code(), 300); assert!(error.detail().is_some());
assert!(error.detail().as_ref().unwrap().contains("config missing"));
}
#[test]
fn test_owe_res() {
let result: Result<(), &str> = Err("memory full");
let converted: Result<(), StructError<UvsReason>> = result.owe_res();
assert!(converted.is_err());
let error = converted.unwrap_err();
assert_eq!(error.reason().error_code(), 203); assert!(error.detail().is_some());
assert!(error.detail().as_ref().unwrap().contains("memory full"));
}
#[test]
fn test_owe_net() {
let result: Result<(), &str> = Err("connection failed");
let converted: Result<(), StructError<UvsReason>> = result.owe_net();
assert!(converted.is_err());
let error = converted.unwrap_err();
assert_eq!(error.reason().error_code(), 202); assert!(error.detail().is_some());
assert!(error
.detail()
.as_ref()
.unwrap()
.contains("connection failed"));
}
#[test]
fn test_owe_sys() {
let result: Result<(), &str> = Err("system crash");
let converted: Result<(), StructError<UvsReason>> = result.owe_sys();
assert!(converted.is_err());
let error = converted.unwrap_err();
assert_eq!(error.reason().error_code(), 201); assert!(error.detail().is_some());
assert!(error.detail().as_ref().unwrap().contains("system crash"));
}
#[test]
fn test_owe_logic() {
let result: Result<(), &str> = Err("logic bug");
let converted: Result<(), StructError<UvsReason>> = result.owe_logic();
assert!(converted.is_err());
let error = converted.unwrap_err();
assert_eq!(error.reason().error_code(), 104); assert!(error.detail().is_some());
assert!(error.detail().as_ref().unwrap().contains("logic bug"));
}
#[test]
fn test_owe_success_case() {
let result: Result<i32, &str> = Ok(42);
let converted: Result<i32, StructError<UvsReason>> = result.owe_biz();
assert!(converted.is_ok());
assert_eq!(converted.unwrap(), 42);
}
#[test]
fn test_owe_with_different_error_types() {
let result: Result<(), std::io::Error> = Err(std::io::Error::new(
std::io::ErrorKind::NotFound,
"file not found",
));
let converted: Result<(), StructError<UvsReason>> = result.owe_sys();
assert!(converted.is_err());
let error = converted.unwrap_err();
assert_eq!(error.reason().error_code(), 201); assert!(error.detail().is_some());
assert!(error.detail().as_ref().unwrap().contains("file not found"));
}
#[test]
fn test_owe_network() {
let result: Result<i32, &str> = Err("network error");
let converted: Result<i32, StructError<UvsReason>> = result.owe_net();
assert_eq!(converted.as_ref().unwrap_err().error_code(), 202);
assert!(converted
.as_ref()
.unwrap_err()
.detail()
.as_ref()
.unwrap()
.contains("network error"));
}
#[test]
fn test_owe_resource() {
let result: Result<i32, &str> = Err("resource error");
let converted: Result<i32, StructError<UvsReason>> = result.owe_res();
assert_eq!(converted.as_ref().unwrap_err().error_code(), 203);
assert!(converted
.as_ref()
.unwrap_err()
.detail()
.as_ref()
.unwrap()
.contains("resource error"));
}
#[test]
fn test_owe_timeout() {
let result: Result<i32, &str> = Err("timeout error");
let converted: Result<i32, StructError<UvsReason>> = result.owe_timeout();
assert_eq!(converted.as_ref().unwrap_err().error_code(), 204);
assert!(converted
.as_ref()
.unwrap_err()
.detail()
.as_ref()
.unwrap()
.contains("timeout error"));
}
#[test]
fn test_owe_not_found() {
let result: Result<i32, &str> = Err("not found error");
let converted: Result<i32, StructError<UvsReason>> = result.owe(UvsReason::not_found_error());
assert_eq!(converted.as_ref().unwrap_err().error_code(), 102);
assert!(converted
.as_ref()
.unwrap_err()
.detail()
.as_ref()
.unwrap()
.contains("not found error"));
}
#[test]
fn test_owe_permission() {
let result: Result<i32, &str> = Err("permission error");
let converted: Result<i32, StructError<UvsReason>> = result.owe(UvsReason::permission_error());
assert_eq!(converted.as_ref().unwrap_err().error_code(), 103);
assert!(converted
.as_ref()
.unwrap_err()
.detail()
.as_ref()
.unwrap()
.contains("permission error"));
}
#[test]
fn test_owe_external() {
let result: Result<i32, &str> = Err("external error");
let converted: Result<i32, StructError<UvsReason>> = result.owe(UvsReason::external_error());
assert_eq!(converted.as_ref().unwrap_err().error_code(), 301);
assert!(converted
.as_ref()
.unwrap_err()
.detail()
.as_ref()
.unwrap()
.contains("external error"));
}
#[test]
fn test_owe_system() {
let result: Result<i32, &str> = Err("system error");
let converted: Result<i32, StructError<UvsReason>> = result.owe_sys();
assert_eq!(converted.as_ref().unwrap_err().error_code(), 201);
assert!(converted
.as_ref()
.unwrap_err()
.detail()
.as_ref()
.unwrap()
.contains("system error"));
}
#[test]
fn test_error_code_implementation() {
let result: Result<i32, &str> = Err("test error");
let converted: Result<i32, StructError<UvsReason>> = result.owe(UvsReason::business_error());
assert_eq!(converted.as_ref().unwrap_err().error_code(), 101);
assert!(converted
.as_ref()
.unwrap_err()
.detail()
.as_ref()
.unwrap()
.contains("test error"));
}
#[test]
fn test_owe_source_preserves_real_source() {
let result: Result<(), std::io::Error> = Err(std::io::Error::other("disk offline"));
let converted: Result<(), StructError<UvsReason>> = result.owe_sys_source();
let error = converted.unwrap_err();
assert_eq!(error.error_code(), 201);
assert_eq!(
StdError::source(&error).unwrap().to_string(),
"disk offline"
);
assert_eq!(error.root_cause().unwrap().to_string(), "disk offline");
}