lib

Core libraries for Radroots
git clone https://radroots.dev/git/lib.git
Log | Files | Refs | README | LICENSE

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 }