mod.rs (3532B)
1 #![forbid(unsafe_code)] 2 3 pub mod decode; 4 pub mod encode; 5 6 #[cfg(test)] 7 mod tests { 8 use crate::error::EventEncodeError; 9 use crate::resource_cap::encode::resource_harvest_cap_build_tags; 10 use radroots_core::{RadrootsCoreDecimal, RadrootsCoreQuantity, RadrootsCoreUnit}; 11 use radroots_events::resource_area::RadrootsResourceAreaRef; 12 use radroots_events::resource_cap::{ 13 RadrootsResourceHarvestCap, RadrootsResourceHarvestProduct, 14 }; 15 16 #[test] 17 fn resource_harvest_cap_tags_include_required_fields() { 18 let cap = RadrootsResourceHarvestCap { 19 d_tag: "DAAAAAAAAAAAAAAAAAAAAA".to_string(), 20 resource_area: RadrootsResourceAreaRef { 21 pubkey: "area_pubkey".to_string(), 22 d_tag: "AAAAAAAAAAAAAAAAAAAAAw".to_string(), 23 }, 24 product: RadrootsResourceHarvestProduct { 25 key: "nutmeg".to_string(), 26 category: Some("spice".to_string()), 27 }, 28 start: 1735689600, 29 end: 1767225600, 30 cap_quantity: RadrootsCoreQuantity::new( 31 RadrootsCoreDecimal::from(100000u32), 32 RadrootsCoreUnit::MassG, 33 ), 34 display_amount: None, 35 display_unit: None, 36 display_label: None, 37 tags: Some(vec!["community".to_string()]), 38 }; 39 40 let tags = resource_harvest_cap_build_tags(&cap).expect("tags"); 41 assert!( 42 tags.iter() 43 .any(|tag| tag.get(0).map(|v| v.as_str()) == Some("d")) 44 ); 45 assert!( 46 tags.iter() 47 .any(|tag| tag.get(0).map(|v| v.as_str()) == Some("a")) 48 ); 49 assert!( 50 tags.iter() 51 .any(|tag| tag.get(0).map(|v| v.as_str()) == Some("key")) 52 ); 53 assert!( 54 tags.iter() 55 .any(|tag| tag.get(0).map(|v| v.as_str()) == Some("start")) 56 ); 57 assert!( 58 tags.iter() 59 .any(|tag| tag.get(0).map(|v| v.as_str()) == Some("end")) 60 ); 61 } 62 63 #[test] 64 fn resource_harvest_cap_build_tags_rejects_invalid_d_tags() { 65 let mut cap = RadrootsResourceHarvestCap { 66 d_tag: "DAAAAAAAAAAAAAAAAAAAAA".to_string(), 67 resource_area: RadrootsResourceAreaRef { 68 pubkey: "area_pubkey".to_string(), 69 d_tag: "AAAAAAAAAAAAAAAAAAAAAw".to_string(), 70 }, 71 product: RadrootsResourceHarvestProduct { 72 key: "nutmeg".to_string(), 73 category: Some("spice".to_string()), 74 }, 75 start: 1735689600, 76 end: 1767225600, 77 cap_quantity: RadrootsCoreQuantity::new( 78 RadrootsCoreDecimal::from(100000u32), 79 RadrootsCoreUnit::MassG, 80 ), 81 display_amount: None, 82 display_unit: None, 83 display_label: None, 84 tags: None, 85 }; 86 87 cap.resource_area.d_tag = "invalid".to_string(); 88 let err = resource_harvest_cap_build_tags(&cap).expect_err("invalid resource area d_tag"); 89 assert!(matches!( 90 err, 91 EventEncodeError::InvalidField("resource_area.d_tag") 92 )); 93 94 cap.resource_area.d_tag = "AAAAAAAAAAAAAAAAAAAAAw".to_string(); 95 cap.d_tag = "invalid".to_string(); 96 let err = resource_harvest_cap_build_tags(&cap).expect_err("invalid cap d_tag"); 97 assert!(matches!(err, EventEncodeError::InvalidField("d_tag"))); 98 } 99 }