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 }