upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/grasp-audit/src/specs/grasp01_nostr_relay.rs
diff options
context:
space:
mode:
authorDanConwayDev <DanConwayDev@protonmail.com>2025-11-05 12:50:03 +0000
committerDanConwayDev <DanConwayDev@protonmail.com>2025-11-05 12:50:03 +0000
commit64a86de9fc5ded51a1b5405223fc5dce16839fef (patch)
tree9c981e337d3c3908776aa41c1eaff6c3e44cba14 /grasp-audit/src/specs/grasp01_nostr_relay.rs
parent94bf5c39af0d8d0a9a15db240d5d46383ec22160 (diff)
Refactor: abstract announcement event creation into AuditClient helper
- Add create_repo_announcement() method to AuditClient - Remove duplicate code from nip01_smoke.rs - Update grasp01_nostr_relay.rs to use centralized helper - All tests passing (GRASP-01: 4/18, NIP-01: 6/6)
Diffstat (limited to 'grasp-audit/src/specs/grasp01_nostr_relay.rs')
-rw-r--r--grasp-audit/src/specs/grasp01_nostr_relay.rs31
1 files changed, 12 insertions, 19 deletions
diff --git a/grasp-audit/src/specs/grasp01_nostr_relay.rs b/grasp-audit/src/specs/grasp01_nostr_relay.rs
index 5a93672..837434b 100644
--- a/grasp-audit/src/specs/grasp01_nostr_relay.rs
+++ b/grasp-audit/src/specs/grasp01_nostr_relay.rs
@@ -64,35 +64,28 @@ impl Grasp01NostrRelayTests {
64 "Accept valid repository announcements with service in clone and relays tags", 64 "Accept valid repository announcements with service in clone and relays tags",
65 ) 65 )
66 .run(|| async { 66 .run(|| async {
67 // Get relay URL from client 67 // Create a NIP-34 repository announcement event
68 let event = client.create_repo_announcement("accept_valid_repo_announcement").await
69 .map_err(|e| format!("Failed to create repository announcement: {}", e))?;
70
71 // Get relay URL for validation
68 let relay_url = client.client().relays().await 72 let relay_url = client.client().relays().await
69 .keys() 73 .keys()
70 .next() 74 .next()
71 .ok_or("No relay connected")? 75 .ok_or("No relay connected")?
72 .to_string(); 76 .to_string();
73 77
74 // Convert WebSocket URL to HTTP URL for clone tag 78 // Convert WebSocket URL to HTTP URL for validation
75 let http_url = relay_url 79 let http_url = relay_url
76 .replace("ws://", "http://") 80 .replace("ws://", "http://")
77 .replace("wss://", "https://"); 81 .replace("wss://", "https://");
78 82
79 // Create unique repository identifier 83 // Extract repo_id from the event's d tag
80 let timestamp = Timestamp::now().as_u64(); 84 let repo_id = event.tags.iter()
81 let repo_id = format!("test-repo-{}", timestamp); 85 .find(|t| t.kind() == TagKind::d())
82 86 .and_then(|t| t.content())
83 // Get npub for clone URL 87 .ok_or("Missing d tag in announcement")?
84 let npub = client.public_key().to_bech32() 88 .to_string();
85 .map_err(|e| format!("Failed to convert public key to bech32 npub format: {}", e))?;
86
87 // Build kind 30617 repository announcement
88 let event = client.event_builder(Kind::GitRepoAnnouncement, "")
89 .tag(Tag::identifier(&repo_id))
90 .tag(Tag::custom(TagKind::Custom("name".into()), vec!["GRASP-01 Test Repository"]))
91 .tag(Tag::custom(TagKind::Custom("description".into()), vec!["Test repository for GRASP-01 compliance testing"]))
92 .tag(Tag::custom(TagKind::Custom("clone".into()), vec![format!("{}/{}/{}.git", http_url, npub, repo_id)]))
93 .tag(Tag::custom(TagKind::Custom("relays".into()), vec![relay_url.clone()]))
94 .build(client.keys())
95 .map_err(|e| format!("Failed to build repository announcement event (kind 30617): {}", e))?;
96 89
97 // Send the event 90 // Send the event
98 let event_id = client.send_event(event.clone()).await 91 let event_id = client.send_event(event.clone()).await