profile_encode.rs (2177B)
1 #![cfg(all(feature = "nostr", feature = "serde_json"))] 2 3 use radroots_events::{ 4 kinds::KIND_PROFILE, 5 profile::{ 6 RADROOTS_PROFILE_TYPE_TAG_FARM, RADROOTS_PROFILE_TYPE_TAG_KEY, RadrootsProfile, 7 RadrootsProfileType, 8 }, 9 }; 10 use radroots_events_codec::profile::encode::{ 11 to_metadata, to_wire_parts, to_wire_parts_with_profile_type, 12 }; 13 use radroots_events_codec::profile::error::ProfileEncodeError; 14 use serde_json::Value; 15 16 #[test] 17 fn profile_to_metadata_rejects_invalid_url() { 18 let profile = RadrootsProfile { 19 name: "alice".to_string(), 20 display_name: None, 21 nip05: None, 22 about: None, 23 website: Some("not-a-url".to_string()), 24 picture: None, 25 banner: None, 26 lud06: None, 27 lud16: None, 28 bot: None, 29 }; 30 31 let err = to_metadata(&profile).unwrap_err(); 32 assert!(matches!(err, ProfileEncodeError::InvalidUrl("website", _))); 33 } 34 35 #[test] 36 fn profile_to_wire_parts_writes_json_content() { 37 let profile = RadrootsProfile { 38 name: "alice".to_string(), 39 display_name: Some("Alice".to_string()), 40 nip05: None, 41 about: None, 42 website: None, 43 picture: None, 44 banner: None, 45 lud06: None, 46 lud16: None, 47 bot: None, 48 }; 49 50 let parts = to_wire_parts(&profile).unwrap(); 51 assert_eq!(parts.kind, KIND_PROFILE); 52 53 let value: Value = serde_json::from_str(&parts.content).unwrap(); 54 assert_eq!(value.get("name").and_then(|v| v.as_str()), Some("alice")); 55 } 56 57 #[test] 58 fn profile_to_wire_parts_with_profile_type_sets_tag() { 59 let profile = RadrootsProfile { 60 name: "farm".to_string(), 61 display_name: None, 62 nip05: None, 63 about: None, 64 website: None, 65 picture: None, 66 banner: None, 67 lud06: None, 68 lud16: None, 69 bot: None, 70 }; 71 72 let parts = to_wire_parts_with_profile_type(&profile, Some(RadrootsProfileType::Farm)).unwrap(); 73 assert!(parts.tags.iter().any(|tag| tag.get(0).map(|v| v.as_str()) 74 == Some(RADROOTS_PROFILE_TYPE_TAG_KEY) 75 && tag.get(1).map(|v| v.as_str()) == Some(RADROOTS_PROFILE_TYPE_TAG_FARM))); 76 }