commit cc9a808ffe1f28fa6ff8ff601ed165b42ef661d3
parent 429ba5ec8a93a493a29c592383a3d3cad80b9135
Author: triesap <triesap@radroots.dev>
Date: Tue, 6 Jan 2026 15:05:33 +0000
tests: add nip46 coverage scaffolding
- add metadata parsing tests for bunker/nostrconnect URLs
- add connect response validation tests
- document auth_url gap via ignored test
- keep nip46 coverage focused on helpers
Diffstat:
2 files changed, 63 insertions(+), 0 deletions(-)
diff --git a/src/api/jsonrpc/methods/nip46/connect.rs b/src/api/jsonrpc/methods/nip46/connect.rs
@@ -256,3 +256,42 @@ fn validate_connect_response(
"nip46 connect unexpected result: {result}"
)))
}
+
+#[cfg(test)]
+mod tests {
+ use super::validate_connect_response;
+ use nostr::nips::nip46::{NostrConnectMessage, NostrConnectResponse, ResponseResult};
+
+ #[test]
+ fn validate_connect_response_accepts_ack() {
+ let message = NostrConnectMessage::response(
+ "1",
+ NostrConnectResponse::with_result(ResponseResult::Ack),
+ );
+ validate_connect_response(&message, None).expect("ack");
+ }
+
+ #[test]
+ fn validate_connect_response_accepts_secret_match() {
+ let message = NostrConnectMessage::Response {
+ id: "1".to_string(),
+ result: Some("secret".to_string()),
+ error: None,
+ };
+ validate_connect_response(&message, Some("secret")).expect("secret");
+
+ let err = validate_connect_response(&message, Some("other")).expect_err("mismatch");
+ let msg = format!("{err}");
+ assert!(msg.contains("unexpected result"));
+ }
+
+ #[test]
+ #[ignore = "auth_url handling not implemented"]
+ fn validate_connect_response_accepts_auth_url() {
+ let message = NostrConnectMessage::response(
+ "1",
+ NostrConnectResponse::with_result(ResponseResult::AuthUrl),
+ );
+ validate_connect_response(&message, None).expect("auth_url");
+ }
+}
diff --git a/src/nip46/connection.rs b/src/nip46/connection.rs
@@ -184,4 +184,28 @@ mod tests {
assert_eq!(info.secret.as_deref(), Some("token"));
assert_eq!(info.perms.len(), 2);
}
+
+ #[test]
+ fn parse_bunker_with_metadata() {
+ let url = format!("bunker://{HEX_PUBKEY}?relay=wss%3A%2F%2Frelay.example.com&name=Radroots&url=https%3A%2F%2Fradroots.org&image=https%3A%2F%2Fradroots.org%2Flogo.png");
+ let info = parse_connect_url(&url).expect("info");
+ assert_eq!(info.mode, Nip46ConnectMode::Bunker);
+ assert_eq!(info.remote_signer_pubkey.as_deref(), Some(HEX_PUBKEY));
+ assert_eq!(info.relays, vec!["wss://relay.example.com"]);
+ assert_eq!(info.name.as_deref(), Some("Radroots"));
+ assert_eq!(info.url.as_deref(), Some("https://radroots.org"));
+ assert_eq!(info.image.as_deref(), Some("https://radroots.org/logo.png"));
+ }
+
+ #[test]
+ fn parse_nostrconnect_with_metadata() {
+ let url = format!("nostrconnect://{HEX_PUBKEY}?relay=wss%3A%2F%2Frelay.example.com&secret=token&name=Radroots&url=https%3A%2F%2Fradroots.org");
+ let info = parse_connect_url(&url).expect("info");
+ assert_eq!(info.mode, Nip46ConnectMode::Nostrconnect);
+ assert_eq!(info.client_pubkey.as_deref(), Some(HEX_PUBKEY));
+ assert_eq!(info.relays, vec!["wss://relay.example.com"]);
+ assert_eq!(info.secret.as_deref(), Some("token"));
+ assert_eq!(info.name.as_deref(), Some("Radroots"));
+ assert_eq!(info.url.as_deref(), Some("https://radroots.org"));
+ }
}