sdk

Radroots SDK and bindings
git clone https://radroots.dev/git/sdk.git
Log | Files | Refs | README

adapters_relay_tests.rs (3144B)


      1 use super::{
      2     client_from_identity, configure_write_relays, connected_client_from_identity,
      3     connected_relay_urls, publish_signed_event, signerless_client, signerless_client_with_options,
      4 };
      5 use crate::adapters::signing::sign_parts_with_identity;
      6 use crate::identity::RadrootsIdentity;
      7 use core::time::Duration;
      8 use radroots_events_codec::wire::WireEventParts;
      9 use tokio::runtime::Runtime;
     10 
     11 #[test]
     12 fn client_constructors_build_without_runtime_net() {
     13     let identity = RadrootsIdentity::generate();
     14     let _client = client_from_identity(&identity);
     15     let _signerless = signerless_client();
     16     let _signerless_with_options = signerless_client_with_options(super::RelayClientOptions::new())
     17         .expect("signerless client with options");
     18 }
     19 
     20 #[test]
     21 fn signerless_client_has_no_signer() {
     22     let runtime = Runtime::new().expect("tokio runtime");
     23     runtime.block_on(async {
     24         let client = signerless_client();
     25         assert!(!client.has_signer().await);
     26     });
     27 }
     28 
     29 #[test]
     30 fn relay_helpers_accept_empty_relay_sets_without_network_endpoints() {
     31     let runtime = Runtime::new().expect("tokio runtime");
     32     runtime.block_on(async {
     33         let identity = RadrootsIdentity::generate();
     34         let client = client_from_identity(&identity);
     35 
     36         configure_write_relays(&client, &[], Duration::from_millis(1))
     37             .await
     38             .expect("configure empty relays");
     39         assert_eq!(connected_relay_urls(&client).await, Vec::<String>::new());
     40 
     41         let invalid_relays = vec!["not-a-relay-url".to_owned()];
     42         let error = configure_write_relays(&client, &invalid_relays, Duration::from_millis(1))
     43             .await
     44             .expect_err("invalid relay");
     45         assert!(format!("{error:?}").contains("Url"));
     46         let connected_error = match connected_client_from_identity(
     47             &identity,
     48             &invalid_relays,
     49             Duration::from_millis(1),
     50         )
     51         .await
     52         {
     53             Ok(_) => panic!("expected invalid connected relay"),
     54             Err(error) => error,
     55         };
     56         assert!(format!("{connected_error:?}").contains("Url"));
     57 
     58         let disconnected = client_from_identity(&identity);
     59         disconnected
     60             .add_write_relay("wss://relay.example.com")
     61             .await
     62             .expect("add relay");
     63         assert_eq!(
     64             connected_relay_urls(&disconnected).await,
     65             Vec::<String>::new()
     66         );
     67 
     68         let connected = connected_client_from_identity(&identity, &[], Duration::from_millis(1))
     69             .await
     70             .expect("connected client");
     71         assert_eq!(connected_relay_urls(&connected).await, Vec::<String>::new());
     72 
     73         let signed = sign_parts_with_identity(
     74             &identity,
     75             WireEventParts {
     76                 kind: 1,
     77                 content: "hello".to_owned(),
     78                 tags: Vec::new(),
     79             },
     80         )
     81         .expect("signed event");
     82         let error = publish_signed_event(&connected, &signed)
     83             .await
     84             .expect_err("publish without relays");
     85         assert!(format!("{error:?}").contains("NoRelaysSpecified"));
     86     });
     87 }