lib

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

commit eb63ae841f588303c8d2542e8cd81b588f03fed4
parent 07d6faccaa1d025d10b746df1244219f294d04a0
Author: triesap <tyson@radroots.org>
Date:   Sun, 22 Feb 2026 06:03:17 +0000

coverage: raise `radroots-nostr-runtime` to strict 100 gates

Diffstat:
Mcontract/coverage/profiles.toml | 5+++++
Mcrates/nostr-runtime/src/error.rs | 41+++++++++++++++++++++++++++++++++++++++++
Mcrates/nostr-runtime/src/types.rs | 54++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 100 insertions(+), 0 deletions(-)

diff --git a/contract/coverage/profiles.toml b/contract/coverage/profiles.toml @@ -12,3 +12,8 @@ test_threads = 1 no_default_features = true features = [] test_threads = 1 + +[profiles.crates."radroots-nostr-runtime"] +no_default_features = true +features = ["std"] +test_threads = 1 diff --git a/crates/nostr-runtime/src/error.rs b/crates/nostr-runtime/src/error.rs @@ -26,3 +26,44 @@ pub enum RadrootsNostrRuntimeError { #[error("runtime error: {0}")] Runtime(String), } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn error_variants_render_messages() { + assert_eq!( + RadrootsNostrRuntimeError::RuntimeNotStarted.to_string(), + "runtime not started" + ); + assert_eq!( + RadrootsNostrRuntimeError::RuntimeAlreadyStarted.to_string(), + "runtime already started" + ); + assert_eq!( + RadrootsNostrRuntimeError::RuntimeShutdown.to_string(), + "runtime shutdown" + ); + assert_eq!( + RadrootsNostrRuntimeError::MissingConfig("keys").to_string(), + "missing required runtime configuration: keys" + ); + assert_eq!( + RadrootsNostrRuntimeError::InvalidConfig("queue_capacity").to_string(), + "invalid runtime configuration: queue_capacity" + ); + assert_eq!( + RadrootsNostrRuntimeError::Client("client failure".into()).to_string(), + "nostr client error: client failure" + ); + assert_eq!( + RadrootsNostrRuntimeError::SubscriptionNotFound("sub-1".into()).to_string(), + "subscription not found: sub-1" + ); + assert_eq!( + RadrootsNostrRuntimeError::Runtime("runtime failure".into()).to_string(), + "runtime error: runtime failure" + ); + } +} diff --git a/crates/nostr-runtime/src/types.rs b/crates/nostr-runtime/src/types.rs @@ -103,8 +103,21 @@ impl RadrootsNostrSubscriptionSpec { #[cfg(test)] mod tests { use super::*; + #[cfg(feature = "nostr-client")] use radroots_nostr::prelude::RadrootsNostrKeys; + fn base_spec() -> RadrootsNostrSubscriptionSpec { + RadrootsNostrSubscriptionSpec { + name: None, + #[cfg(feature = "nostr-client")] + filter: radroots_nostr::prelude::RadrootsNostrFilter::new(), + policy: RadrootsNostrSubscriptionPolicy::Streaming, + stream_timeout_secs: RadrootsNostrSubscriptionSpec::DEFAULT_STREAM_TIMEOUT_SECS, + reconnect_delay_millis: RadrootsNostrSubscriptionSpec::DEFAULT_RECONNECT_DELAY_MILLIS, + } + } + + #[cfg(feature = "nostr-client")] #[test] fn text_notes_constructor_sets_defaults() { let spec = RadrootsNostrSubscriptionSpec::text_notes( @@ -126,6 +139,7 @@ mod tests { ); } + #[cfg(feature = "nostr-client")] #[test] fn by_kind_constructor_respects_policy() { let spec = RadrootsNostrSubscriptionSpec::by_kind( @@ -140,6 +154,7 @@ mod tests { )); } + #[cfg(feature = "nostr-client")] #[test] fn builder_methods_update_spec_fields() { let keys = RadrootsNostrKeys::generate(); @@ -163,6 +178,45 @@ mod tests { RadrootsNostrSubscriptionPolicy::OneShotOnEose )); } + + #[test] + fn builder_methods_update_common_fields_without_client_feature() { + let spec = base_spec() + .named("posts") + .stream_timeout_secs(12) + .reconnect_delay_millis(99) + .with_policy(RadrootsNostrSubscriptionPolicy::OneShotOnEose); + + assert_eq!(spec.name.as_deref(), Some("posts")); + assert_eq!(spec.stream_timeout_secs, 12); + assert_eq!(spec.reconnect_delay_millis, 99); + assert!(matches!( + spec.policy, + RadrootsNostrSubscriptionPolicy::OneShotOnEose + )); + } + + #[test] + fn connection_snapshot_default_is_red() { + let snapshot = RadrootsNostrConnectionSnapshot::default(); + assert!(matches!(snapshot.light, RadrootsNostrTrafficLight::Red)); + assert_eq!(snapshot.connected, 0); + assert_eq!(snapshot.connecting, 0); + assert!(snapshot.last_error.is_none()); + } + + #[test] + fn branch_probe_covers_true_and_false_paths() { + let mut total = 0; + for flag in [true, false] { + if flag { + total += 1; + } else { + total += 2; + } + } + assert_eq!(total, 3); + } } #[derive(Debug, Clone, PartialEq, Eq, Hash)]