commit 49e68230ad6b0f607e23a976fed9339138ea2346
parent 5c5280d83ca596c63940df7e0e6e69d2a169cfae
Author: triesap <tyson@radroots.org>
Date: Tue, 16 Jun 2026 13:18:04 -0700
sdk: cover empty configured relay enqueue
- add a listing runtime test for UseConfiguredRelays without builder relays
- keep empty relay default resolution at the enqueue boundary
- preserve queued outbox sync behavior without a builder relay precondition
- verify runtime and relay-runtime SDK test lanes
Diffstat:
1 file changed, 32 insertions(+), 6 deletions(-)
diff --git a/crates/sdk/tests/listings_runtime.rs b/crates/sdk/tests/listings_runtime.rs
@@ -156,14 +156,18 @@ fn listing(d_tag: &str, title: &str) -> RadrootsListing {
}
async fn directory_sdk() -> (tempfile::TempDir, RadrootsSdk) {
+ directory_sdk_with_relays(&[RELAY]).await
+}
+
+async fn directory_sdk_with_relays(relays: &[&str]) -> (tempfile::TempDir, RadrootsSdk) {
let tempdir = tempfile::tempdir().expect("tempdir");
- let sdk = RadrootsSdk::builder()
+ let mut builder = RadrootsSdk::builder()
.directory_storage(tempdir.path().join("sdk"))
- .fixed_clock(RadrootsSdkTimestamp::from_unix_seconds(1_700_000_000))
- .relay_url(RELAY)
- .build()
- .await
- .expect("sdk");
+ .fixed_clock(RadrootsSdkTimestamp::from_unix_seconds(1_700_000_000));
+ for relay in relays {
+ builder = builder.relay_url(*relay);
+ }
+ let sdk = builder.build().await.expect("sdk");
(tempdir, sdk)
}
@@ -279,6 +283,28 @@ async fn enqueue_publish_stores_event_and_queues_signed_outbox_without_publish()
}
#[tokio::test]
+async fn enqueue_publish_use_configured_relays_rejects_empty_builder_relays() {
+ let (_tempdir, sdk) = directory_sdk_with_relays(&[]).await;
+ let request = ListingEnqueuePublishRequest::new(
+ actor(),
+ listing(LISTING_A_D_TAG, "Coffee"),
+ SdkRelayTargetPolicy::UseConfiguredRelays,
+ );
+
+ let error = sdk
+ .listings()
+ .enqueue_publish(request, &FixtureSigner::new(SELLER))
+ .await
+ .expect_err("empty configured relays");
+
+ assert!(matches!(
+ error,
+ RadrootsSdkError::EmptyTargetRelays { operation }
+ if operation == "sdk relay target set"
+ ));
+}
+
+#[tokio::test]
async fn prepare_then_enqueue_prepared_uses_same_event_id() {
let (_tempdir, sdk) = directory_sdk().await;
let actor = actor();