field_lib

Cross-platform Rust runtime for Radroots iOS and Android apps
git clone https://radroots.dev/git/field_lib.git
Log | Files | Refs | README | LICENSE

no_nostr_runtime.rs (5357B)


      1 #![cfg(not(feature = "nostr-client"))]
      2 
      3 use radroots_field_core::logging;
      4 use radroots_field_core::runtime::builder::RuntimeBuilder;
      5 use radroots_field_core::runtime::nostr::{
      6     NostrConnectionStatus, NostrEvent, NostrLight, NostrPost, NostrPostEventMetadata, NostrProfile,
      7     NostrProfileEventMetadata,
      8 };
      9 use radroots_field_core::{RadrootsAppError, RadrootsRuntime};
     10 use radroots_net_core::config::NetConfig;
     11 
     12 fn expect_disabled<T>(result: Result<T, RadrootsAppError>) {
     13     match result {
     14         Err(RadrootsAppError::Unsupported(message)) => assert_eq!(message, "nostr disabled"),
     15         _ => panic!("expected nostr disabled error"),
     16     }
     17 }
     18 
     19 #[test]
     20 fn runtime_info_and_platform_paths_are_exercised() {
     21     let runtime = RadrootsRuntime::new().expect("runtime");
     22     assert!(runtime.uptime_millis() >= 0);
     23 
     24     runtime.stop();
     25     runtime.stop();
     26 }
     27 
     28 #[test]
     29 fn key_management_disabled_paths_are_exercised() {
     30     let runtime = RadrootsRuntime::new().expect("runtime");
     31 
     32     assert!(!runtime.nostr_identity_has_selected_signing_identity());
     33     assert_eq!(runtime.nostr_identity_selected_npub(), None);
     34     expect_disabled(runtime.nostr_identity_list());
     35     expect_disabled(runtime.nostr_identity_list_ids());
     36     expect_disabled(runtime.nostr_identity_snapshot());
     37     expect_disabled(runtime.nostr_identity_validate_host_custody_secret("deadbeef".to_string()));
     38     expect_disabled(runtime.nostr_identity_restore_host_custody_secret(
     39         "deadbeef".to_string(),
     40         Some("alpha".to_string()),
     41         true,
     42     ));
     43     expect_disabled(runtime.nostr_identity_select("account-1".to_string()));
     44     expect_disabled(runtime.nostr_identity_remove("account-1".to_string()));
     45     expect_disabled(runtime.nostr_identity_lock_host_custody_runtime());
     46     expect_disabled(runtime.nostr_identity_reset_host_custody_runtime());
     47 }
     48 
     49 #[test]
     50 fn nostr_disabled_paths_are_exercised() {
     51     let runtime = RadrootsRuntime::new().expect("runtime");
     52 
     53     let status = runtime.nostr_connection_status();
     54     assert_eq!(status.connected, 0);
     55     assert_eq!(status.connecting, 0);
     56     assert!(status.last_error.is_none());
     57 
     58     expect_disabled(runtime.nostr_profile_for_self());
     59     expect_disabled(runtime.nostr_next_post_event());
     60     expect_disabled(runtime.nostr_set_default_relays(vec!["wss://relay.example.com".to_string()]));
     61     expect_disabled(runtime.nostr_connect_if_key_present());
     62     expect_disabled(runtime.nostr_post_profile(None, None, None, None));
     63     expect_disabled(runtime.nostr_post_text_note("hello".to_string()));
     64     expect_disabled(runtime.nostr_fetch_text_notes(25, Some(0)));
     65     expect_disabled(runtime.nostr_post_reply(
     66         "event-id".to_string(),
     67         "author".to_string(),
     68         "reply".to_string(),
     69         None,
     70     ));
     71     expect_disabled(runtime.nostr_start_post_event_stream(None));
     72     expect_disabled(runtime.nostr_stop_post_event_stream());
     73 }
     74 
     75 #[test]
     76 fn runtime_builder_and_logging_paths_are_exercised() {
     77     let handle = RuntimeBuilder::new()
     78         .with_config(NetConfig::default())
     79         .manage_runtime(false)
     80         .build()
     81         .expect("build net handle");
     82     drop(handle);
     83     let default_handle = RuntimeBuilder::new()
     84         .build()
     85         .expect("build default net handle");
     86     drop(default_handle);
     87 
     88     let err = logging::init_logging(Some("/dev/null/file.log".to_string()), None, Some(false));
     89     assert!(matches!(err, Err(RadrootsAppError::Initialization(_))));
     90     let _ = logging::init_logging(None, None, None);
     91     let _ = logging::init_logging(None, Some("app.log".to_string()), Some(false));
     92     let _ = logging::init_logging_stdout();
     93 
     94     assert!(logging::log_info("info".to_string()).is_ok());
     95     assert!(logging::log_error("error".to_string()).is_ok());
     96     assert!(logging::log_debug("debug".to_string()).is_ok());
     97 }
     98 
     99 #[test]
    100 fn nostr_records_and_enums_are_exercised() {
    101     let status = NostrConnectionStatus {
    102         light: NostrLight::Yellow,
    103         connected: 1,
    104         connecting: 2,
    105         last_error: Some("err".to_string()),
    106     };
    107     let _status_debug = format!("{status:?}");
    108     let _status_clone = status.clone();
    109 
    110     let profile = NostrProfile::default();
    111     let _profile_debug = format!("{profile:?}");
    112     let _profile_clone = profile.clone();
    113 
    114     let profile_event = NostrProfileEventMetadata {
    115         id: "id".to_string(),
    116         author: "author".to_string(),
    117         published_at: 1,
    118         profile,
    119     };
    120     let _profile_event_debug = format!("{profile_event:?}");
    121     let _profile_event_clone = profile_event.clone();
    122 
    123     let event = NostrEvent {
    124         id: "event-id".to_string(),
    125         author: "event-author".to_string(),
    126         created_at: 2,
    127         kind: 1,
    128         content: "content".to_string(),
    129     };
    130     let _event_debug = format!("{event:?}");
    131     let _event_clone = event.clone();
    132 
    133     let post = NostrPost {
    134         content: "post".to_string(),
    135     };
    136     let _post_debug = format!("{post:?}");
    137     let _post_clone = post.clone();
    138 
    139     let post_event = NostrPostEventMetadata {
    140         id: "id".to_string(),
    141         author: "author".to_string(),
    142         published_at: 3,
    143         post,
    144     };
    145     let _post_event_debug = format!("{post_event:?}");
    146     let _post_event_clone = post_event.clone();
    147 
    148     assert!(matches!(NostrLight::Red, NostrLight::Red));
    149     assert!(matches!(NostrLight::Green, NostrLight::Green));
    150 }