commit 4f12d0215da93b51d2b9a6a8b597c7308938515e
parent 9b7e4a4ef5fa07f6c2f4fe7c759a63800e503a69
Author: triesap <tyson@radroots.org>
Date: Mon, 15 Jun 2026 22:39:51 -0700
sdk: add product api guard tests
Diffstat:
2 files changed, 49 insertions(+), 0 deletions(-)
diff --git a/crates/sdk/tests/listings_runtime.rs b/crates/sdk/tests/listings_runtime.rs
@@ -328,6 +328,44 @@ async fn prepare_then_enqueue_prepared_uses_same_event_id() {
}
#[tokio::test]
+async fn enqueue_receipt_debug_omits_signed_event_payload_material() {
+ let (_tempdir, sdk) = directory_sdk().await;
+ let request = ListingEnqueuePublishRequest::new(
+ actor(),
+ listing(LISTING_A_D_TAG, "Coffee"),
+ SdkRelayTargetPolicy::UseConfiguredRelays,
+ )
+ .try_with_idempotency_key("debug-secret-idempotency")
+ .expect("idempotency key");
+ let receipt = sdk
+ .listings()
+ .enqueue_publish(request, &FixtureSigner::new(SELLER))
+ .await
+ .expect("enqueue");
+ let debug = format!("{receipt:?}");
+
+ assert!(debug.contains("ListingEnqueueReceipt"));
+ assert!(debug.contains("StoredAndQueued"));
+ assert!(!debug.contains("debug-secret-idempotency"));
+ assert!(!debug.contains("raw_json"));
+ assert!(!debug.contains("\"tags\""));
+ assert!(!debug.contains("\"content\""));
+ assert!(!debug.contains(&"f".repeat(128)));
+}
+
+#[test]
+fn mutation_state_debug_uses_product_state_names() {
+ assert_eq!(
+ format!("{:?}", SdkMutationState::StoredAndQueued),
+ "StoredAndQueued"
+ );
+ assert_eq!(
+ format!("{:?}", SdkMutationState::AlreadyQueued),
+ "AlreadyQueued"
+ );
+}
+
+#[tokio::test]
async fn enqueue_publish_convenience_matches_prepare_plus_enqueue_prepared() {
let (_prepared_tempdir, prepared_sdk) = directory_sdk().await;
let prepared_actor = actor();
diff --git a/crates/sdk/tests/runtime_foundation.rs b/crates/sdk/tests/runtime_foundation.rs
@@ -244,3 +244,14 @@ fn outbox_idempotency_conflict_maps_to_structured_sdk_error() {
assert!(!message.contains(&"b".repeat(64)));
assert!(!message.contains(&"c".repeat(64)));
}
+
+#[test]
+fn runtime_local_example_stays_on_product_api_boundary() {
+ let example = include_str!("../examples/runtime_local.rs");
+
+ assert!(example.contains("prepare_publish"));
+ assert!(example.contains("push_outbox"));
+ assert!(!example.contains("WireEventParts"));
+ assert!(!example.contains(".as_wire_parts("));
+ assert!(!example.contains(".into_wire_parts("));
+}