Skip to content

Commit 388c5d5

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 adb5393 commit 388c5d5

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
@@ -2166,6 +2166,61 @@ mod tests {
21662166
}
21672167
}
21682168

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

0 commit comments

Comments
 (0)