lib

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

post_profile.rs (2827B)


      1 #[path = "../src/test_fixtures.rs"]
      2 mod test_fixtures;
      3 
      4 use nostr::{Keys as RadrootsNostrKeys, SecretKey as RadrootsNostrSecretKey};
      5 use radroots_blossom::{BlobDescriptor, BlobUrl, MediaType, Sha256};
      6 use radroots_event::{
      7     media::AuthoredImage,
      8     post::{
      9         AuthoredAsk, AuthoredPhotoUpdate, AuthoredPostImage, AuthoredUpdate, PostImageDimensions,
     10     },
     11 };
     12 use radroots_nostr::event::{
     13     Timestamp as RadrootsNostrTimestamp, build_ask as build_ask_event,
     14     build_photo_update as build_photo_update_event, build_update as build_update_event,
     15 };
     16 
     17 #[test]
     18 fn typed_post_builders_preserve_strict_wire_profiles() {
     19     let keys = RadrootsNostrKeys::new(
     20         RadrootsNostrSecretKey::from_hex(test_fixtures::FIXTURE_ALICE_SECRET_KEY_HEX).unwrap(),
     21     );
     22     let created_at = RadrootsNostrTimestamp::from_secs(1_784_347_200);
     23     let update = AuthoredUpdate::new("Farm update").unwrap();
     24     let event = build_update_event(&update)
     25         .unwrap()
     26         .custom_created_at(created_at)
     27         .sign_with_keys(&keys)
     28         .unwrap();
     29     assert_eq!(event.kind.as_u16(), 1);
     30     assert!(event.tags.is_empty());
     31     assert_eq!(event.created_at, created_at);
     32     assert!(event.verify().is_ok());
     33 
     34     let image = authored_image();
     35     let photo =
     36         AuthoredPhotoUpdate::new(format!("Harvest {}", image.url()), vec![image.clone()]).unwrap();
     37     let event = build_photo_update_event(&photo)
     38         .unwrap()
     39         .custom_created_at(created_at)
     40         .sign_with_keys(&keys)
     41         .unwrap();
     42     assert_eq!(event.tags.len(), 1);
     43     assert_eq!(event.tags.iter().next().unwrap().as_slice()[0], "imeta");
     44     assert!(event.verify().is_ok());
     45 
     46     let ask = AuthoredAsk::new(format!("Is this ready? {}", image.url()), vec![image]).unwrap();
     47     let event = build_ask_event(&ask)
     48         .unwrap()
     49         .custom_created_at(created_at)
     50         .sign_with_keys(&keys)
     51         .unwrap();
     52     assert_eq!(event.tags.len(), 2);
     53     let tags = event.tags.iter().collect::<Vec<_>>();
     54     assert_eq!(tags[0].as_slice(), ["t", "radroots-ask"]);
     55     assert_eq!(tags[1].as_slice()[0], "imeta");
     56     assert!(event.verify().is_ok());
     57 }
     58 
     59 fn authored_image() -> AuthoredPostImage {
     60     let bytes = b"strawberries";
     61     let hash = Sha256::digest(bytes);
     62     let media_type = MediaType::parse("image/webp").unwrap();
     63     let descriptor = BlobDescriptor::new(
     64         BlobUrl::parse(&format!("https://media.example/{hash}.webp")).unwrap(),
     65         hash,
     66         bytes.len() as u64,
     67         media_type.clone(),
     68         1_784_347_200,
     69     )
     70     .unwrap()
     71     .approve_reference()
     72     .unwrap()
     73     .verify_bytes(bytes, &media_type)
     74     .unwrap();
     75     AuthoredPostImage::new(
     76         AuthoredImage::try_from(descriptor).unwrap(),
     77         PostImageDimensions::new(1200, 900).unwrap(),
     78         "Harvest",
     79     )
     80     .unwrap()
     81 }