use super::*;
use rust_decimal_macros::dec;
#[test]
fn default_is_conservative() {
let config = PositionConfig::default();
assert_eq!(config.max_position_pct(), dec!(0.1));
assert!(!config.volatility_scaling());
assert_eq!(config.risk_per_trade_pct(), None);
}
#[test]
fn valid_config() {
let config = PositionConfig::new(dec!(0.25), true, Some(dec!(0.02))).expect("valid config");
assert_eq!(config.max_position_pct(), dec!(0.25));
assert!(config.volatility_scaling());
assert_eq!(config.risk_per_trade_pct(), Some(dec!(0.02)));
}
#[test]
fn max_pct_above_one_rejected() {
let result = PositionConfig::new(dec!(1.5), false, None);
assert_eq!(
result.unwrap_err(),
PositionConfigError::MaxPositionOutOfRange(dec!(1.5))
);
}
#[test]
fn max_pct_below_zero_rejected() {
let result = PositionConfig::new(dec!(-0.1), false, None);
assert_eq!(
result.unwrap_err(),
PositionConfigError::MaxPositionOutOfRange(dec!(-0.1))
);
}
#[test]
fn max_pct_boundary_zero() {
let config = PositionConfig::new(dec!(0.0), false, None);
assert!(config.is_ok());
assert_eq!(
config.expect("valid config").max_position_pct(),
Decimal::ZERO
);
}
#[test]
fn max_pct_boundary_one() {
let config = PositionConfig::new(dec!(1.0), false, None);
assert!(config.is_ok());
assert_eq!(
config.expect("valid config").max_position_pct(),
Decimal::ONE
);
}
#[test]
fn risk_pct_above_one_rejected() {
let result = PositionConfig::new(dec!(0.1), false, Some(dec!(1.5)));
assert_eq!(
result.unwrap_err(),
PositionConfigError::RiskPerTradeOutOfRange(dec!(1.5))
);
}
#[test]
fn risk_pct_below_zero_rejected() {
let result = PositionConfig::new(dec!(0.1), false, Some(dec!(-0.5)));
assert_eq!(
result.unwrap_err(),
PositionConfigError::RiskPerTradeOutOfRange(dec!(-0.5))
);
}
#[test]
fn risk_pct_none_valid() {
let config = PositionConfig::new(dec!(0.1), false, None);
assert!(config.is_ok());
assert_eq!(config.expect("valid config").risk_per_trade_pct(), None);
}
#[test]
fn getters_match_construction() {
let config = PositionConfig::new(dec!(0.5), true, Some(dec!(0.03))).expect("valid config");
assert_eq!(config.max_position_pct(), dec!(0.5));
assert!(config.volatility_scaling());
assert_eq!(config.risk_per_trade_pct(), Some(dec!(0.03)));
}