Skip to content

Commit e2c14e1

Browse files
committed
test(bolt12): Add tests for CurrencyCode validation
Tests cover UTF-8 validation, ASCII uppercase validation, case sensitivity, length checks, and API consistency between new() and from_str().
1 parent c77c9ad commit e2c14e1

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

lightning/src/offers/offer.rs

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2168,6 +2168,61 @@ mod tests {
21682168
}
21692169
}
21702170

2171+
#[cfg(test)]
2172+
mod currency_code_tests {
2173+
use super::CurrencyCode;
2174+
2175+
#[test]
2176+
fn creates_valid_currency_codes() {
2177+
let usd = CurrencyCode::new(*b"USD").unwrap();
2178+
assert_eq!(usd.as_str(), "USD");
2179+
assert_eq!(usd.as_bytes(), b"USD");
2180+
2181+
let eur = CurrencyCode::new(*b"EUR").unwrap();
2182+
assert_eq!(eur.as_str(), "EUR");
2183+
assert_eq!(eur.as_bytes(), b"EUR");
2184+
}
2185+
2186+
#[test]
2187+
fn rejects_invalid_utf8() {
2188+
let invalid_utf8 = [0xFF, 0xFE, 0xFD];
2189+
assert!(CurrencyCode::new(invalid_utf8).is_err());
2190+
}
2191+
2192+
#[test]
2193+
fn rejects_lowercase_letters() {
2194+
assert!(CurrencyCode::new(*b"usd").is_err());
2195+
assert!(CurrencyCode::new(*b"Eur").is_err());
2196+
}
2197+
2198+
#[test]
2199+
fn rejects_non_letters() {
2200+
assert!(CurrencyCode::new(*b"US1").is_err());
2201+
assert!(CurrencyCode::new(*b"U$D").is_err());
2202+
}
2203+
2204+
#[test]
2205+
fn from_str_validates_length() {
2206+
assert!("US".parse::<CurrencyCode>().is_err());
2207+
assert!("USDA".parse::<CurrencyCode>().is_err());
2208+
2209+
assert!("USD".parse::<CurrencyCode>().is_ok());
2210+
}
2211+
2212+
#[test]
2213+
fn works_with_real_currency_codes() {
2214+
let codes = ["USD", "EUR", "GBP", "JPY", "CNY"];
2215+
2216+
for code_str in &codes {
2217+
let code1 = CurrencyCode::new(code_str.as_bytes().try_into().unwrap()).unwrap();
2218+
let code2 = code_str.parse::<CurrencyCode>().unwrap();
2219+
2220+
assert_eq!(code1, code2);
2221+
assert_eq!(code1.as_str(), *code_str);
2222+
}
2223+
}
2224+
}
2225+
21712226
#[cfg(test)]
21722227
mod bolt12_tests {
21732228
use super::{Bolt12ParseError, Bolt12SemanticError, Offer};

0 commit comments

Comments
 (0)